继续我的问题 Vertically center align divs with unknown height
我有这样的代码:
它使用了flex。
问题是:是否可能在没有flex的情况下(当然也没有JavaScript)获得相同的结果?
重要提示:禁止在像素、ems、百分比等方面硬编码任何高度或宽度(这使得这个问题更加困难)。所有的高度和宽度都是由包含的文本隐含形成的。这是一个自适应底部原型。
首先想到的是使用浮动,但由于“block2” div的vertical-align:middle(浮动只有vertical-align:top),所以这是不可能的 - 详见Vertically center align divs with unknown height。
EDIT1: “test” div 应该跨越整个页面宽度,因为它是页脚。
EDIT2:提出的解决方案应尽可能支持最老的浏览器。
UPDATE1:最佳答案是由@Muhammad Usman提供的。伪元素:after在比@Nenad Vracar的答案提出的transform更旧的浏览器中得到支持。谢谢大家!
更新2:在@Muhammad Usman的答案中,如果在某个父块中声明了
https://jsfiddle.net/yyjde1gb/
#test {
background: yellow;
display: flex;
align-items: center;
}
#block1 {
background-color: grey;
}
#block2 {
background-color: green;
margin-left: auto;
}
<div id="test">
<div id="block1">
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
<div>test</div>
</div>
<div id="block2">
sample
</div>
</div>
问题是:是否可能在没有flex的情况下(当然也没有JavaScript)获得相同的结果?
重要提示:禁止在像素、ems、百分比等方面硬编码任何高度或宽度(这使得这个问题更加困难)。所有的高度和宽度都是由包含的文本隐含形成的。这是一个自适应底部原型。
首先想到的是使用浮动,但由于“block2” div的vertical-align:middle(浮动只有vertical-align:top),所以这是不可能的 - 详见Vertically center align divs with unknown height。
EDIT1: “test” div 应该跨越整个页面宽度,因为它是页脚。
EDIT2:提出的解决方案应尽可能支持最老的浏览器。
UPDATE1:最佳答案是由@Muhammad Usman提供的。伪元素:after在比@Nenad Vracar的答案提出的transform更旧的浏览器中得到支持。谢谢大家!
更新2:在@Muhammad Usman的答案中,如果在某个父块中声明了
line-height
属性(从而影响我们的页脚),则可能需要添加该属性。我不得不在零大小字体块中添加line-height: 0;
,并在16px字体大小的块中添加line-height: 16px;
。