使用CSS Grid,我需要一个带有固定标题,导航和页脚的全屏,只有文章是flex。
但是如果保证金= 10px则不行since footer is not fixed below
如何使用固定页眉,导航和页脚(仅限文章为flex)保持全屏,并且页边距为= 20px?
答案 0 :(得分:2)
检查MDN article box-sizing
。
默认情况下,box-sizing
的{{1}}设置为body
- 这意味着:
在您的情况下,宽度和高度属性包含内容,但不包括填充,边框或边距。
content-box
正文的属性为height
,但是当您设置100vh
时,它需要margin
,而更多 100vh + 2 * 20px
。
要防止出现这种情况,您必须考虑100vh
- 在正文上设置margin
:
height: calc(100vh - 40px);

body {
display: grid;
grid-template-areas:
"header header header"
"nav article article"
"nav footer footer";
grid-template-rows: 80px 1fr 70px;
grid-template-columns: 20% 1fr 15%;
grid-row-gap: 10px;
grid-column-gap: 10px;
height: calc(100vh - 40px);
border-radius: 10px;
padding: 0px;
margin: 20px;
font-size: 150%;
}
header,
footer,
article,
nav,
div {
background-color: #444;
color: #fff;
border-radius: 10px;
padding: 20px;
font-size: 150%;
}
#pageHeader {
grid-area: header;
}
#pageFooter {
grid-area: footer;
}
#mainArticle {
grid-area: article;
background-color: #379;
}
#mainNav {
grid-area: nav;
}
/* Stack the layout on small devices/viewports. */
@media all and (max-width: 975px) {
body {
grid-template-areas:
"header"
"nav"
"article"
"article"
"footer";
grid-template-rows: 80px 1fr 70px 1fr 70px;
grid-template-columns: 1fr;
}
}

答案 1 :(得分:1)
所以你的问题基本上就是当你添加边距或填充时身体占据更多空间的原因?
常识是,如果您向边距或填充等元素添加内容,则该元素会占用更多空间以默认增加。
请看一下CSS box模型。在这里阅读 - > box model或此处box model
重要提示:使用CSS设置元素的宽度和高度属性时,只需设置内容区域的宽度和高度。要计算元素的完整大小,还必须添加填充,边框和边距。
要将height:100vh
与margin:20px
放在一起,您需要使用100vh
从calc()
中减去该边距。所以代码是body { height: calc(100vh - 40px)}
。您减去40px
因为margin:20px
等于margin-top:20px;margin-right:20px;margin-bottom:20px;margin-left:20px
所以您有top-bottom : 20+20 = 40px
页边距。
对于填充,您可以使用box-sizing:border-box
- >更多box-sizing
border-box宽度和高度属性(以及最小/最大属性)包括内容,填充和边框
body {
margin:20px;
height:calc(100vh - 40px);
padding:20px;
box-sizing:border-box;
background:red;
}