内联块中的垂直居中文本

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-blockbutton-text 跨度来定义文本装饰覆盖(对于按钮在父元素定义它的页面中没有下划线文本的必要条件 - 特别是在 chrome 和 safari 上)

demo example

【讨论】:

以上是关于内联块中的垂直居中文本的主要内容,如果未能解决你的问题,请参考以下文章

如何让Word文本框中的文字垂直上下居中

DIV块中 元素垂直居中

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

总结一下各种居中(内联元素块级元素浮动元素绝对定位元素)*(水平垂直)

Word文本框里面的文字如何让它垂直居中?

用CSS如何实现单行图片与文字垂直居中