如何使网格跨越页面的剩余高度
How to make a grid span the remaining height of the page
我只是想使用 Material 响应屏幕大小的 Design Light 创建一个基本网站,但我无法让网格填充所有可用高度。我试图在网上寻找解决此问题的方法,但找不到任何有效的方法。
这是我将使用的网格之一的源代码:
<main class="mdl-layout__content">
<div class="mdl-grid">
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
</div>
</main>
这里是 link 完整的 Html 页面:Example MDL Page
这是问题的图片:Page Example
尝试使用 CSS 高度属性。像这样:
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
我假设您的页面高度是视图高度,您只能使用现代浏览器。 See view height
基本上我们在这里所做的是我们已经知道页脚和页眉的高度(在 fiddle 中我只是将它们分别设置为 50 像素)。然后我们使用 calc
CSS 属性 将 view height (vh)
设置为 100% - 100px(意思是页脚和页眉的高度加在一起(50+50 = 100)
<div id="main-body">
<div class="header"></div>
<div class="content clearfix">
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
</div>
<div class="footer"></div>
</div>
* {
box-sizing: border-box; /* add for browser prefixes */
}
#main-body {
height: 100%;
overflow: hidden;
}
.header, .footer {
background-color: blue;
height: 50px;
}
.content .a {
height: calc(100vh - 100px);
background-color: red;
width: 25%;
float: left;
}
.clearfix:after {
content: "";
clear:both;
display:table;
}
请注意,您还需要 <head>
中的视口元标记才能正常工作。
<meta name="viewport" content="width=device-width, initial-scale=1">
OP 添加了他希望能够在这些内容 div 中将文本居中的功能
<div id="main-body">
<div class="header"></div>
<div class="content clearfix">
<div class="a"><p>1</p></div>
<div class="a"><p>2</p></div>
<div class="a"><p>3</p></div>
<div class="a"><p>4</p></div>
</div>
<div class="footer"></div>
</div>
#main-body {
height: 100%;
overflow: hidden;
}
.header, .footer {
background-color: blue;
height: 50px;
}
.content .a {
height: calc(100vh - 100px);
background-color: red;
width: 25%;
float: left;
position: relative;
}
.content .a p {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
}
.clearfix:after {
content: "";
clear:both;
display:table;
}
我这样做的方法是覆盖几个 mdl 样式,特别是使 main
显示为 flex
而不是 inline-block
。添加一个 Id 以限制此覆盖对您网站其余部分的影响可能是有意义的
.mdl-layout__content {
display: flex;
flex-direction: column;
.mdl-grid {
width: 100%;
flex-grow: 2;
}
}
我只是想使用 Material 响应屏幕大小的 Design Light 创建一个基本网站,但我无法让网格填充所有可用高度。我试图在网上寻找解决此问题的方法,但找不到任何有效的方法。
这是我将使用的网格之一的源代码:
<main class="mdl-layout__content">
<div class="mdl-grid">
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray;">size 4</div>
</div>
</main>
这里是 link 完整的 Html 页面:Example MDL Page
这是问题的图片:Page Example
尝试使用 CSS 高度属性。像这样:
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
<div class="mdl-cell mdl-cell--4-col" style="text-align:center; background-color:gray; height:100%;">size 4</div>
我假设您的页面高度是视图高度,您只能使用现代浏览器。 See view height
基本上我们在这里所做的是我们已经知道页脚和页眉的高度(在 fiddle 中我只是将它们分别设置为 50 像素)。然后我们使用 calc
CSS 属性 将 view height (vh)
设置为 100% - 100px(意思是页脚和页眉的高度加在一起(50+50 = 100)
<div id="main-body">
<div class="header"></div>
<div class="content clearfix">
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
</div>
<div class="footer"></div>
</div>
* {
box-sizing: border-box; /* add for browser prefixes */
}
#main-body {
height: 100%;
overflow: hidden;
}
.header, .footer {
background-color: blue;
height: 50px;
}
.content .a {
height: calc(100vh - 100px);
background-color: red;
width: 25%;
float: left;
}
.clearfix:after {
content: "";
clear:both;
display:table;
}
请注意,您还需要 <head>
中的视口元标记才能正常工作。
<meta name="viewport" content="width=device-width, initial-scale=1">
OP 添加了他希望能够在这些内容 div 中将文本居中的功能
<div id="main-body">
<div class="header"></div>
<div class="content clearfix">
<div class="a"><p>1</p></div>
<div class="a"><p>2</p></div>
<div class="a"><p>3</p></div>
<div class="a"><p>4</p></div>
</div>
<div class="footer"></div>
</div>
#main-body {
height: 100%;
overflow: hidden;
}
.header, .footer {
background-color: blue;
height: 50px;
}
.content .a {
height: calc(100vh - 100px);
background-color: red;
width: 25%;
float: left;
position: relative;
}
.content .a p {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
}
.clearfix:after {
content: "";
clear:both;
display:table;
}
我这样做的方法是覆盖几个 mdl 样式,特别是使 main
显示为 flex
而不是 inline-block
。添加一个 Id 以限制此覆盖对您网站其余部分的影响可能是有意义的
.mdl-layout__content {
display: flex;
flex-direction: column;
.mdl-grid {
width: 100%;
flex-grow: 2;
}
}