如何在span标签内垂直对齐?


144

如何使“ x”在跨度的中间垂直对齐?

.foo {
    height: 50px;
    border: solid black 1px;
    display: inline-block;
    vertical-align: middle;
}

<span class="foo">
   x
</span>

Answers:


218

使用line-height:50px;代替高度。这应该够了吧 ;)


1
优秀!它适用于任何类型的标签。就我而言,工作于<img>。
费利佩·孔德

21
问题是文本换行时。如果使用两行,则此跨度将以100px的高度呈现。
Norberto Yoan 2013年

如果您的文字换行,请尝试我的答案@NorbertoYoan
Hashbrown 2013年

@Sumit的同上(由于SO的评论存在问题而重复)
Hashbrown 2013年

这不应该是票数最高的答案,因为解决方案可能会根据内容给出其他一些不希望的结果。
rafaelmorais 2016年

113

请注意,line-height如果您的句子中有很长的句子,span这会因为没有足够的空间而导致换行,但该方法失败了。在这种情况下,您将有两条线,其间隙与属性中指定的N个像素的高度相同。

当我想在右侧显示垂直居中的文本以在响应式Web应用程序中工作时,我陷入其中。作为基础,我使用Eric Nickus和Felipe Tadeo建议的方法。

如果要实现:

桌面

还有这个:

移动

.container {
    background: url( "https://i.imgur.com/tAlPtC4.jpg" ) no-repeat;
    display: inline-block;
    background-size: 40px 40px; /* image's size */
    height: 40px; /* image's height */
    padding-left: 50px; /* image's width plus 10 px (margin between text and image) */
}

.container span {
    height: 40px; /* image's height */
    display: table-cell;
    vertical-align: middle;
}
<span class="container">
    <span>This is a centered sentence next to an image</span>
</span>


什么是dyanmic高度
阿尔贝托·阿库尼亚

39

如果需要多行,这是最简单的方法。将您span的文本换成另一个,span然后用指定高度line-height。特技到多行被复位在内spanline-height

<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
    line-height: /*set height*/;
}

.textvalignmiddle > span {
    display: inline-block;
    vertical-align: middle;
    line-height: 1em; /*set line height back to normal*/
}

演示

当然,外部span可能是您div或其他任何人


2
span与其他内联元素一样,可以包含任何HTML内联元素。无论如何,我写道,如果有必要textvalignmiddlediv话,这可能是一个(display:inline;如果您不喜欢使用,可以将其设置为spans
Hashbrown

我不是说他们不应该拥有。它们用于包含文本。否则使用div。
JorgeeFG 2015年

3
span是html 的通用内联容器,并没有暗示仅是文本;`它可用于对元素进行分组以进行样式设计...`。我建议您先阅读规范,然后再将您的个人编码标准
强加

3
无论哪种方式,这种对话方式从技术上讲都不是建设性的问题,也不是对SO的评论是什么
Hashbrown 2015年

也为我工作。使用的元素与跨度不同。
chocolata

27

flexbox方式:

.foo {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
}

因为.foo跨度display: flex-inline会更合适
考拉

7
您是说“ inline-flex”吗?
Tim Gerhard

5

我需要此链接,因此我用a-tag和div包裹了span,然后将span标签本身居中

的HTML

<div>
    <a class="tester" href="#">
        <span>Home</span>
    </a>
</div>

的CSS

.tester{
    display: inline-block;
    width: 9em;
    height: 3em;
    text-align: center;
}
.tester>span{
    position: relative;
    top: 25%;
}

为此,我讨厌弄乱CSS,当我在这里遇到您的答案时,我整日都在尝试垂直放置元素的中心。您是救生员!
托德·内斯特

5

CSS垂直居中图片和文字

我已经为垂直图像中心和文本创建了一个演示,我也对Firefox,Chrome,Safari,Internet Explorer 9和8进行了测试。

这是非常简短易用的CSS和html,请检查以下代码,您可以在screenshort上找到输出。

的HTML

<div class="frame">
    <img src="capabilities_icon1.png" alt="" />
</div>

的CSS

  .frame {
        height: 160px;      
        width: 160px;
        border: 1px solid red;
        white-space: nowrap;
        text-align: center; margin: 1em 0;
    }

    .frame::before {
        display: inline-block;
        height: 100%;
        vertical-align: middle;
        content:"";
    }

    img {
        background: #3A6F9A;
        vertical-align: middle;
    }

输出 在这里输入图像描述


2

这对我有用(Keltex说的也一样)

.foo {
height: 50px;
...
}
.foo span{
vertical-align: middle; 
}

<span class="foo"> <span>middle!</span></span>

1

不幸的是,vertical-align css属性没有达到您的期望。本文介绍了两种使用CSS垂直对齐元素的方法。


1

将padding-top设置为适当的值以向下推x,然后从高度中减去padding-top的值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.