我一直在绞尽脑汁用下面的方法在css中创建一个垂直对齐
.base {
背景颜色:绿色;
宽度:200 px;
身高:200 px;
溢出:汽车;
位置:相对;
}
.vert-align {
padding-top: 50%;
高度:50%;
}
<!——并使用下面的div结构。-->
< div class = "基地" >
< div class = " vert-align”>
内容在这里
< / div >
< / div >
虽然这似乎适用于这种情况,但我惊讶地发现,当我增加或减少基本div的宽度时,垂直对齐会断开。我期望当我设置padding-top属性时,它会将填充作为父容器高度的百分比,这在我们的例子中是基础,但上面的50%值是作为宽度的百分比计算的。:(
是否有一种方法来设置填充和/或边缘作为高度的百分比,而不诉诸于使用JavaScript?
为了使子元素的位置绝对依赖于它的父元素,你需要设置父元素的相对位置和子元素的绝对位置。
然后在子元素上'top'是相对于父元素的高度。所以你还需要把孩子的身高向上平移50%。
.base {
背景颜色:绿色;
宽度:200 px;
身高:200 px;
溢出:汽车;
位置:相对;
}
.vert-align {
位置:绝对的;
上图:50%;
转换:翻译(0,-50%);
}
< div class = "基地" >
< div class = " vert-align”>
内容在这里
< / div >
< / div >
还有一种解决方案是使用伸缩盒。
.base {
背景颜色:绿色;
宽度:200 px;
身高:200 px;
溢出:汽车;
显示:flex;
对齐项目:中心;
}
< div class = "基地" >
< div class = " vert-align”>
内容在这里
< / div >
< / div >
你会发现两者都有优点/缺点。
这可以通过write -mode属性来实现。如果将元素的写入模式设置为垂直写入模式,例如vertical-lr,那么它的后代在两个维度上的填充和边距的百分比值将相对于高度而不是宽度。
来自规范:
……在CSS2.1中,边缘和填充属性的百分比总是根据包含块的宽度计算,在CSS3中则根据包含块的内联大小计算。
内联大小的定义:
行内尺寸:横写时为物理宽度(水平尺寸),竖写时为物理高度(垂直尺寸)。
例如,对于一个可调整大小的元素,其中水平边距相对于宽度,垂直边距相对于高度。
.resize {
width: 400px;
height: 200px;
resize: both;
overflow: hidden;
}
.outer {
height: 100%;
background-color: red;
}
.middle {
writing-mode: vertical-lr;
margin: 0 10%;
width: 80%;
height: 100%;
background-color: yellow;
}
.inner {
writing-mode: horizontal-tb;
margin: 10% 0;
width: 100%;
height: 80%;
background-color: blue;
}
<div class="resize">
<div class="outer">
<div class="middle">
<div class="inner"></div>
</div>
</div>
</div>
如果您希望元素的纵横比保持不变,但希望其大小与高度相关,而不是与宽度相关,那么使用垂直书写模式特别有用。