内联/内联块元素的CSS垂直对齐


142

我试图让几个inlineinline-block组件的垂直对齐div。为什么在span这个例子坚持被推下来?我已经尝试了vertical-align:middle;vertical-align:top;,但是没有任何变化。

HTML:

<div>
  <a></a><a></a>
  <span>Some text</span>
</div>

CSS:

a {
    background-color:#FFF;
    width:20px;
    height:20px;
    display:inline-block;
    border:solid black 1px;
}

div {
    background:yellow;
    vertical-align:middle;
}
span {
    background:red;
}

结果:
在此处输入图片说明

小提琴


请注意,这不会发生,如果<a>它们内部元素包含一些文本看这个链接
S.Serpooshan

Answers:


270

vertical-align适用于对齐的元素,而不是其父元素。要垂直对齐div的子代,请执行以下操作:

div > * {
    vertical-align:middle;  // Align children to middle of line
}

请参阅:http//jsfiddle.net/dfmx123/TFPx8/1186/

注意vertical-align是相对于当前文本行,而不是父级的整个高度div。如果您希望父项div更高,并且元素仍垂直居中,请设置divline-height属性,而不是height。请遵循上面的jsfiddle链接作为示例。


如果为外部指定高度,这将停止工作div
Abhranil Das 2015年

4
@AbhranilDas vertical-align相对于当前文本行,而不是父元素。要根据需要进行此工作,请设置div line-height而不是height
迭戈


5

只需将两个元素都悬空即可获得相同的结果。

div {
background:yellow;
vertical-align:middle;
margin:10px;
}

a {
background-color:#FFF;
width:20px;
height:20px;
display:inline-block;
border:solid black 1px;
float:left;
}

span {
background:red;
display:inline-block;
float:left;
}

将它们向左浮动的问题是,当浏览器变得太小时,它们将换行到下一行。有时您需要使项目保持内联,甚至超出浏览器的范围,因此,这inline-block是唯一的解决方案。
杰克·威尔逊

尽管可能存在包装问题,但我想说对于那些可以包装的情况,这是一个非常好的解决方案。它优雅,可以传达出预期效果的精神,并且不需要修改父级。
克里斯彭·史密斯

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.