【问题标题】:How to vertically align inline elements如何垂直对齐内联元素
【发布时间】:2011-07-17 19:45:10
【问题描述】:

我有这个锚标签,它的文本在垂直对齐文本之间。我正在使用这个css属性vertical-align:middle。什么都没有发生。

【问题讨论】:

  • 除非您提供一个小的代码/标记示例,否则很难理解“标签之间有文本”所指的内容。 @alex 写了这个很酷的答案,我不确定他的解决方案是否适用于你拥有的标记......
  • +1 友情提醒,我被骂了 60%!友好是要走的路!

标签: css inline anchor vertical-alignment


【解决方案1】:

vertical-align 仅适用于带有display: table-cell 的元素,

已知文本

如果您知道要居中的文本,这很容易。你有两个选择。

<style type="text/css">
    #container {
        padding: 10px 0;
    }
</style>
<div id="container">
    Example of some lovely<br />
    multiline text.
</div>

您可以使用 CSS 的 padding 来添加填充顶部和底部,使文本出现在中间。这对于多行文本很有用。

<style type="text/css">
    #container {
        height: 100px;
        line-height: 100px;
    }
</style>
<div id="container">
    Example
</div>

您可以利用 line-height 属性使文本垂直居中。这仅适用于一行文本。你可以猜到如果超过 1 会发生什么。

动态多行文字

这就是事情开始变得有些棘手的地方,可能会让您为桌子哭泣。

<style type="text/css">
    #container {
        display: table-cell;
        vertical-align: middle;
    }
</style>
<div id="container">
    <?php echo $content; ?>
</div>

Workaround for < IE8.

Source.

【讨论】:

  • 填充似乎是唯一可行的方法,但填充会增加盒子的高度,这是我不想要的。
  • 试试最后一个例子,如果你需要支持
  • 所以没有表格,那么填充是唯一的方法吗?
  • @dave 您实际上并没有使用table 元素,您只是使用CSS 使其显示像表格一样工作。
【解决方案2】:
<div><p>test test test test<p></div>

div{
    border:1px solid red;
    width:400px;
    height:400px;
    position:relative;
}


p{
    height:30px;
    position:absolute;
    top:50%;
    margin-top:-15px; /* negative half of height*/
}

http://jsfiddle.net/Z2ssq/1/查看工作示例

【讨论】:

  • 你应该使用更准确的方法transform: translateY(-50%)而不是margin-top:-15px; /* negative half of height*/
【解决方案3】:

你可以把它设为inline-block,然后给它一个line-height

a {
    line-height: 50px;
    display: inline-block;
}

JSFiddle 与工作示例:http://jsfiddle.net/KgqJS/

【讨论】:

  • 嗯? OP 根本不是专门针对 IE8 的,我的回答也不是。此外,在 2011 年 3 月 18 日,jsFiddle 确实支持 IE8,因此当时的答案完全相关。为什么要添加此评论?
  • 现在回到这个,我不知道!哈哈(深夜密码之夜破坏脑细胞)
猜你喜欢
  • 2012-09-07
  • 2014-01-22
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
相关资源
最近更新 更多