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

Posted

技术标签:

【中文标题】内联/内联块元素的 CSS 垂直对齐【英文标题】:CSS vertical alignment of inline/inline-block elements 【发布时间】:2012-03-29 01:16:40 【问题描述】:

我试图让几个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;

结果:

FIDDLE

【问题讨论】:

请注意,如果&lt;a&gt; 元素中包含一些文本see this link,则不会发生这种情况 【参考方案1】:

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 指定高度,这将停止工作。 @AbhranilDas vertical-align 相对于当前文本行,而不是父元素。要使这项工作如您所愿,请设置 div 的 line-height 而不是其 height【参考方案2】:

aspan 中提供vertical-align:top;。像这样:

a, span
 vertical-align:top;

查看http://jsfiddle.net/TFPx8/10/

【讨论】:

【参考方案3】:

只需将两个元素都向左浮动即可获得相同的结果。

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 是唯一的解决方案。 虽然包装问题可能存在问题,但我想说这对于包装可以的情况来说是一个非常好的解决方案。它很优雅,符合预期效果的精神,不需要对父级进行修改。【参考方案4】:

要微调 inline-block 项目的位置,请使用 top 和 left:

  position: relative;
  top: 5px;
  left: 5px;

谢谢CSS-Tricks!

【讨论】:

translate 也是可以的。 完美运行!

以上是关于内联/内联块元素的 CSS 垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

css text-align:内联块元素的对齐技术

如何使用 CSS 垂直对齐没有垂直空格的内联块 div?

将内联块 DIV 对齐到容器元素的顶部

将内联块 DIV 对齐到容器元素的顶部

关于CSS的内联和块元素

如何垂直对齐一行文本中的内联块?