【发布时间】:2014-03-20 06:10:34
【问题描述】:
我试图将<span> 元素中的一些文本垂直居中,相对于更大的<span>,它是第一个元素的兄弟。两者都是包含父元素 <div> 的子元素。
HTML:
<div>
<span class="previewLabel">Preview:</span>
<span class="previewText">The quick brown fox jumps over the lazy dog.</span>
</div>
CSS:
.previewLabel {
display: inline-block;
line-height: 100%;
vertical-align: middle;
}
.previewText {
font-family: Verdana, Geneva, sans-serif;
font-size: 64px;
font-style: italic;
font-weight: bold;
}
JSFiddle:http://jsfiddle.net/5chXG/
如您所见,我已经尝试了this Q&A ("Text vertical align in a div") 中描述的vertical-align 技巧(定义了line-height),但它似乎不起作用。我认为不同之处在于我不能使用静态的line-height 值。
我不能为line-height 属性使用px 值,因为.previewText 跨度可以动态更改大小。在实际代码中,页面上有控件可以更改字体属性,而 JavaScript 会在您更改内容时调整 .previewText 的 CSS。
我的问题:
如何使“预览:”文本 (.previewLabel) <span> 在父 <div> 元素的中间垂直对齐?
编辑/澄清
我希望 所有 文本的行为与通常的单行文本一样。
- 换行应使大文本在小文本下方流动。
- 较小的文本只能在单行较大文本的高度内垂直对齐,而不是多行
这是我想要实现的目标的可视化:
【问题讨论】:
-
你的意思是这样jsfiddle.net/j08691/5chXG/1?
-
@j08691 有点,但这使它看起来像 2 个不同的元素。我希望它看起来像一条连续的线。所以大文本仍然会包裹在小文本下面,而小文本只会垂直对齐到 1 行大文本的中间。希望这是有道理的......
-
将
vertical-align: middle更改为vertical-align: baseline