内联块中的垂直居中文本
Posted
技术标签:
【中文标题】内联块中的垂直居中文本【英文标题】:Vertically centering text within an inline-block 【发布时间】:2013-08-31 09:03:56 【问题描述】:我正在尝试使用样式化的超链接为网站创建一些按钮。我已经设法让按钮看起来像我想要的那样,除了一个小问题。我无法将文本(下面源代码中的“链接”)垂直居中。
不幸的是,第二个按钮显示的文本可能不止一行,因此我无法使用line-height
将其垂直居中。
我最初的解决方案是使用display: table-cell;
而不是inline-block
,这在 Chrome、Firefox 和 Safari 中解决了问题,但在 Internet Explorer 中没有,所以我认为我需要坚持使用 inline-block。
如何在57px
x 100px
inline-block
中垂直居中链接文本,并让它适应多行文本?提前致谢。
CSS:
.button
background-image:url(/images/categorybutton-off.gif);
color:#000;
display:inline-block;
height:57px;
width:100px;
font-family:Verdana, Geneva, sans-serif;
font-size:10px;
font-weight:bold;
text-align:center;
text-decoration:none;
vertical-align:middle;
.button:hover
background-image:url(/images/categorybutton-on.gif);
.button:before
content:"Click Here For\A";
font-style:italic;
font-weight:normal !important;
white-space:pre;
HTML:
<a href="/" class="button">Link</a>
<a href="/" class="button">Link<br />More Details</a>
【问题讨论】:
【参考方案1】:非常感谢@avrahamcool,就像一个魅力!
我有一点升级。您可以用 css 替换多余的 .Centerer span
.button:before
content: '';
display: inline-block;
vertical-align: middle;
height: 100%;
在此处查看演示:http://jsfiddle.net/modernweb/bXD2V/
注意:这不适用于“内容”属性中的文本。
【讨论】:
这个对我不起作用!可能出了点问题,它确实做了一点改变。 对不起,我忘了说如果你在“内容”属性中添加任何文本,这个升级将不起作用。 值得注意的是,此演示似乎仅在包含按钮 div 的高度固定时才有效。否则文本将浮动到顶部 - 看看将height
更改为 min-height
时会发生什么:jsfiddle.net/6ne3aub8/1
@VivekGani 最初的问题是关于固定高度的 inline-block 元素,所以我不确定您为什么希望它适用于动态高度?【参考方案2】:
用一个跨度(居中)包裹你的文本,然后像这样在它之前写另一个空跨度(居中)。
HTML:
<a href="..." class="button">
<span class="Centerer"></span>
<span class='Centered'>Link</span>
</a>
CSS
.Centered
vertical-align: middle;
display: inline-block;
.Centerer
display: inline-block;
height: 100%;
vertical-align: middle;
看这里:http://jsfiddle.net/xVnQ6/
【讨论】:
您好,感谢您的回复,很遗憾这不起作用。 “链接”文本行的高度似乎为 57 像素,并导致第二行文本(更多详细信息)出现在 57 像素 x 100 像素框之外。它还会忽略 .button:before 文本。 我已经为你上传了一个小提琴。有一些小的 etid.. 告诉我它现在是否适合你。 这看起来像个黑客!有人可以解释一下这是如何工作的吗?vertical_align
定义了兄弟姐妹之间的对齐方式(而不是父子之间)。所以我们创建第一个元素并将他的高度设置为 100%(它是一个宽度为 0 的元素),我们将第二个元素居中(现在它使第二个元素居中于父元素),因为第一个元素和父元素具有相同的高度。【参考方案3】:
找出其他答案,以防有人设计一个按钮并寻找这个页面可以结合起来:
button
设计与display:inline-flex
一个button-content
div 嵌套在display:inline-block
内
button-text
跨度来定义文本装饰覆盖(对于按钮在父元素定义它的页面中没有下划线文本的必要条件 - 特别是在 chrome 和 safari 上)
demo example
【讨论】:
以上是关于内联块中的垂直居中文本的主要内容,如果未能解决你的问题,请参考以下文章