此问题在此处已有答案:
Make a div fill the height of the remaining screen space(42个答案)
Fill remaining vertical space with CSS using display:flex(6个答案)
3天前关闭。
下面是我的HTML的样子:
<html>
<body>
<header>...</header>
<main>...</main>
</body>
</html>
我的标题没有声明的高度,但它有内容,使它占据了大约10%的屏幕vh。
我希望能够将body标记设置为100vh,然后将main标记设置为100%,这样我就可以将main标记的内容居中显示在屏幕该部分的中心。
相反,发生的是主标记高度变得像标题下的另一个100vh,所以你必须向下滚动到主标记的底部。
我不希望发生这种情况。我只希望主标记填充父主体标记的高度,该标记在屏幕底部停止。我不希望必须向下滚动才能到达主标记的底部。我只希望将一个句子在屏幕上居中。相反,文本看起来更接近屏幕底部,而不是居中。因为主标签到达屏幕底部以下。
我该如何设计html页面的样式,使main标签只填充body标签的高度,而不填充其他内容呢?
3条答案
按热度按时间odopli941#
剩余空间
要使
<main>
占用<body>
的剩余空间,可以用途:CSS网格
CSS Grid允许我们定义一个网格布局和分配空间,通过声明
<header>
的行高为auto
,我们可以用flexible lengths (fr
):柔性盒
Flexbox允许我们沿着一个主轴来布置flex子节点,我们可以让一个子节点增长到用
flex-grow
property来填充这个主轴:一个二个一个一个
居中文本
大而突出的部分“在折叠之上”通常被称为“英雄部分”、“英雄横幅”或类似的东西。
将out-of-flow header放置到hero部分时,可以通过absolute positioning then translating进行居中。
注意:根据上述内容,确保不要在标题后面放置任何(英雄)内容!
如果英雄部分与视口大小不一样,但您仍然希望其内容在视口中居中,则居中可能会变得棘手。
当使用CSS网格和
place-items: center
居中时,内容仅居中于其父项,而不居中于视口:但如果我们知道标题的(绝对)高度,那么我们可以考虑:
lfapxunr2#
问题在于,当您设置
main {height: 100%;}
时,百分比引用包含的块,即body
本身。要实现您想要的,请将
body
设计为Flexbox,并允许main
增长。oymdgrw73#
@BrettDonald的解决方案不错;我最初读你的问题是因为你想让文本在屏幕上居中,而不是在
<main>
标签中,这将涉及到滚动条的某种绝对或固定位置。在重读这个问题时,我仍然不确定你到底在搜索什么,但我已经做了这个例子来让文本在屏幕上居中,而不是在<main>
标签中,所以你可以开始了。