html - 如何从容器的 % 高度确定行高?
问题描述
在经典布局(页眉固定,主要和页脚固定)中,我想将主要元素的文本居中。出于本练习的目的,我想设置 line-height 使其等于主元素的高度,然后文本将垂直居中。绝对定位的主元素具有 10% 的顶部和底部填充,因此它是 80% 高。
如何使行高等于容器高度?
* { box-sizing: border-box; }
html { height: 100%; }
body { margin: 0;
font-size: 10px; }
header { border: 1px solid black;
position: fixed;
top: 0;
height: 10%;
left: 0;
right: 0;
}
main { border: 1px solid black; left: 0; right: 0;
position: absolute;
top: 10%;
/* height: 80%; */
bottom: 10%;
line-height: 80%;
}
footer { border: 1px solid black;
position: fixed;
height: 10%;
left: 0;
right: 0;
bottom: 0;
}
<header>Header</header>
<main><div>Main Div</div></main>
<footer>Footer</footer>
解决方案
您可以使用带有伪的旧技巧并将div
集合作为inline-block
元素和vertical-align
. 伪是主高度的 100%,因为它是一个通过坐标调整大小的绝对元素,伪应该采用height:100%;
下面的演示
* {
box-sizing: border-box;
}
html {
height: 100%;
}
body {
margin: 0;
font-size: 10px;
}
header {
border: 1px solid black;
position: fixed;
top: 0;
height: 10%;
left: 0;
right: 0;
}
main {
border: 1px solid black;
left: 0;
right: 0;
position: absolute;
top: 10%;
/* height: 80%; */
bottom: 10%;
}
/* centering trick */
main::before {
content: '';
height: 100%;
}
main:before,
main>div {
vertical-align: middle;
display: inline-block;
}
/* end centering trick */
footer {
border: 1px solid black;
position: fixed;
height: 10%;
left: 0;
right: 0;
bottom: 0;
}
<header>Header</header>
<main>
<div>Main Div</div>
</main>
<footer>Footer</footer>
但这真的不是办法,这个例子也不会教你任何有用的东西,今天你可以轻松地使用 flex 或 grid 模型来避免棘手的方法.....
忘记line-height
这种视觉效果,这不是行高的工作,也不是使用它的方式。行高:80%;表示 1em 的 80%(字体大小设置)。
推荐阅读
- ios - UITableViewWrapperView 在 tvOS 上具有超级视图的前导和尾随边距
- angular - Angular 6 的 Karma-Jasmine 上的“TypeError:无法读取属性‘routeConfig’ of null”
- c# - 将json字符串反序列化为变体的变体数组时如何控制变体类型
- codeblocks - 尝试调试 [C++] [Code::Blocks] 时出现“未知选项‘全名’”
- vba - 无法检查范围是否为空
- sql - FindOneBy 或 Find Doctrine 的区别
- r - 使用 lapply 和 read_xls 将文件名用作列表名称
- phpstorm - PhpStorm - 防止禁用“从现有文件创建新项目”选项
- rest - 无法正确设置soapUI的代理
- ios - iOS:10.0 以后应该使用哪个 Webview