CSS垂直对齐不适用于float


85

我如何使用vertical-align,以及floatdiv性能?的vertical-align,如果我不使用工作正常float。但是,如果我使用浮点数,那么它将不起作用。对我来说float:right,在最后一个div中使用至关重要。

我正在尝试遵循,如果您从所有div删除浮点数,那么它将正常工作:

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

Answers:


92

您需要设置行高。

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


31
如果line-height为所有元素设置相同的值,那将vertical-align是无用的。(jsfiddle.net/VBR5J/448)–
埃德森·

不适用于<button>元素。取而代之的<span>是一个<button>
绿色

14
这个答案是错误的。vertical-align属于容器(而div不是单个元素)。正确的解决方案-能够垂直对齐的浮动元素-是把两者vertical-alignline-height在容器: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">vertical-align:middle; line-height: 38px;从跨度样式中删除。
ToolmakerSteve

1
刚刚发现,我建议的方法适用于答案中的浮动范围,但不适用于某些元素(不适用于浮动无线电输入)。
ToolmakerSteve

1
@ToolmakerSteve是错误的,并且此答案是错误的。垂直对齐仅适用于内联元素,内联块或表单元格(后者只是怪异的)。添加“ float”会使en元素成为block元素。不过,使用行高(并忽略垂直对齐)可以解决。
commonpike

15

编辑:

垂直对齐CSS属性指定内嵌,内联块或表格单元元件的垂直取向。

阅读本文以了解垂直对齐


1
它也适用于inline-block元素。
罗尔夫(Rolf)

1
更新。我错过了。感谢您的提及。
Ahsan Khurshid

3
这不是答案
Serzhan Akhmetov

虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。-评论
乌萨夫·帕特尔

8

实际上,垂直对齐方式不适用于浮动元素。这是因为float将元素从文档的正常流程中移出。您可能需要使用其他垂直对齐技术,例如基于转换,显示的技术:表格,绝对定位,行高,js(可能是最后一种选择)甚至是普通的html表格(如果内容是实际上是表格)。您会发现在此问题上存在激烈的辩论。

但是,这是您可以垂直对齐3个div的方法:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

不确定为什么同时需要固定宽度和显示:内联块和浮动。


您可以在答案中添加一些代码以显示如何实现该解决方案吗?
abarisone 2015年

另外,“正确答案”是如此容易破解……这让我想知道地球上19个人是如何投票的。
加百利2015年

3
这个问题说“他需要float:right在最后一个元素上”,因此他可能需要最后一个元素位于容器的右侧。如何在您的答案中实现该目标?
fly.x

好的答案,而且很清楚!它只是缺少Flexbox选项。
Luillyfe '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.