Html CSS网格布局,最大宽度,内容居中
我正在学习CSS网格(我知道早该学习了)。我曾向自己提出挑战,要将一个相对标准的基于浮点的布局转换为网格,但无法理解最后一部分 我的目标是要有一个布局,内容(徽标+导航,边栏+内容)居中,最大宽度Html CSS网格布局,最大宽度,内容居中,html,css,flexbox,css-grid,grid-layout,Html,Css,Flexbox,Css Grid,Grid Layout,我正在学习CSS网格(我知道早该学习了)。我曾向自己提出挑战,要将一个相对标准的基于浮点的布局转换为网格,但无法理解最后一部分 我的目标是要有一个布局,内容(徽标+导航,边栏+内容)居中,最大宽度。例如,徽标+导航的最大宽度应为600px。我还需要一个覆盖视口全宽的实心填充背景(与可变高度徽标/导航行的高度相匹配) 第一列(徽标和侧边栏)应收缩以适合其内容-因此第一列的宽度仅与徽标/侧边栏之间的宽度相同。然后,导航/内容应填满最大宽度所允许的剩余空间 以下是我最好的尝试。主内容的宽度不填充最大宽
。例如,徽标+导航的最大宽度应为600px。我还需要一个覆盖视口全宽的实心填充背景(与可变高度徽标/导航行的高度相匹配)
第一列(徽标和侧边栏)应收缩以适合其内容-因此第一列的宽度仅与徽标/侧边栏之间的宽度相同。然后,导航/内容应填满最大宽度所允许的剩余空间
以下是我最好的尝试。主内容的宽度不填充最大宽度
。相反,主要内容的宽度是徽标的宽度+250px(由网格列定义的宽度)
我希望实现的是-将Logo+Nav的最大宽度
定义为特定的宽度(比如600px),并使Logo列收缩以适合其内容
正文{
利润率:40像素;
}
.填充{
网格列开始:1;
网格柱端:6;
网格行开始:1;
网格行端:1;
背景颜色:灰色;
}
.标志{
网格区域:标志;
字体大小:calc(1rem+4vw);
}
.侧边栏{
网格区域:侧栏;
}
.内容{
网格区域:内容;
}
.导航{
网格区域:导航;
文本对齐:右对齐;
}
.页脚{
网格区域:页脚;
}
.包装纸{
显示:网格;
栅隙:10px;
网格模板列:自动最小内容120px 120px自动;
网格模板区域:“…徽标导航…”“…侧栏内容…”“…页脚页脚…”;
背景色:#fff;
颜色:#444;
}
.盒子{
背景色:#444;
颜色:#fff;
边界半径:5px;
填充:10px;
}
.标题,
.页脚{
背景色:#999;
}
标志
导航
边栏
内容
内容比以前多了,所以这个专栏现在相当高了。
页脚
您可以有一个两列网格,其中包含网格模板列:auto 1fr
,这样第一列的宽度为其内容的宽度(与徽标/侧边栏之间的宽度相同),第二列的宽度为剩余空间(注意,我已将最大宽度:600px
设置为网格容器)
我也有一个坚实的填充背景覆盖的要求
视口的全宽(与变量的高度匹配
高度标志/导航行)
为此,您可以执行以下操作:
通过设置网格行
和网格列
属性,首先修复第一行中的徽标
和导航
现在,为重叠第一行的wrapper
使用一个伪元素(但是使用z-index
属性堆叠在下面)
将marginleft
属性设置为calc(-50vw+50%)
和width
设置为100vw,以在视口中拉伸实心填充背景
请参见下面的演示:
正文{
利润率:40像素;
}
.包装纸{
显示:网格;
栅隙:10px;
网格模板列:自动1fr;/*2列网格*/
/*背景色:#fff*/
颜色:#444;
最大宽度:600px;/*布局的最大宽度*/
边距:0自动;/*在视口中居中*/
}
.标志{
字体大小:calc(1rem+4vw);
网格行:1;/*将徽标固定在第一行*/
网格列:1;/*将徽标固定在第一列中*/
}
.导航{
文本对齐:右对齐;
网格行:1;/*将导航固定在第一行*/
网格列:2;/*将导航固定在第二列中*/
}
.页脚{
网格列:span 2;/*页脚跨两列*/
}
.盒子{
背景色:#444;
颜色:#fff;
边界半径:5px;
填充:10px;
}
.标题,
.页脚{
背景色:#999;
}
.wrapper:在{/*之后将其放置在第一行*/
内容:'';
显示:块;
网格行:1;
网格柱:1/3;
宽度:100vw;
左边距:计算(-50vw+50%);
背景:灰色;
z索引:-1;/*将其推到第一行后面*/
}
标志
导航
边栏
内容
内容比以前多了,所以这个专栏现在相当高了。
页脚
对中
将网格容器水平居中相对简单。在父对象上使用柔性对齐特性:
body {
display: flex;
justify-content: center;
}
最大宽度
您可以使用max width
或flex
属性在网格容器上创建最大宽度
.wrapper {
flex: 600px 0 1;
}
这条规则规定:
- 弹性基准:600px(起始宽度)
flex-grow:0
(项目不能扩展到600像素以上)
弹性收缩:1
(该项目可以收缩)
此命令实质上相当于最大宽度:600px
双栏布局
你写道:
第一列(徽标和侧边栏)应收缩以适合其内容-因此第一列的宽度仅与徽标/侧边栏之间的宽度相同。然后,导航/内容应填满最大宽度允许的剩余空间
试试这个:
.wrapper {
flex: 600px 0 1;
display: grid;
grid-template-columns: min-content 1fr;
}
正文{
利润率:40像素;
显示器:flex;
证明内容:中心;
}
.包装纸{
flex:600px01;
显示:网格;
栅隙:10px;
网格模板列:最小内容1fr;
网格模板区域:“徽标导航”
“侧边栏内容”
“页脚”;
背景色:#fff;
颜色:#444;
}
.标志{
网格区域:标志;
字体大小:calc(1rem+4vw);
}
.侧边栏{
网格区域:侧栏;
}
.内容{
网格区域:内容;
}
.导航{
网格区域:导航;
文本对齐:右对齐;
}
.页脚{
网格区域:页脚;
}
.填充{
背景颜色:灰色;
}
.盒子{
背景色:#444;
颜色:#fff;
边界半径:5px;
填充:10px;
}
.标题,
.页脚{
背景色:#999;
}
标志
导航
边栏
内容