Как мне выровнять что-то внутри тега span?


144

Как я могу получить "х", чтобы быть вертикально выровненным в середине промежутка?

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

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

Ответы:


218

Используйте line-height:50px;вместо высоты. Это должно делать свое дело ;)


1
Отлично! Это работает с любым типом тега. В моем случае сработало <img>.
Фелипе Конде

21
Проблема в том, когда текст переносится. С двумя строками этот диапазон будет отображаться с высотой 100 пикселей.
Норберто Йоан

если ваш текст обернутся, попробуйте мой ответ @NorbertoYoan
Hashbrown

То же самое для @Sumit (дублируется из-за проблем с комментариями SO )
Hashbrown

Это не должен быть ответ с наибольшим количеством голосов, решение может дать некоторые другие нежелательные результаты в зависимости от содержимого.
rafaelmorais

113

Имейте в виду, что line-heightподход потерпит неудачу, если у вас есть длинное предложение, spanкоторое разрывает строку, потому что не хватает места. В этом случае у вас будет две строки с пропуском с высотой N пикселей, указанной в свойстве.

Я застрял в нем, когда хотел показать изображение с вертикально центрированным текстом на правой стороне, которое работает в адаптивном веб-приложении. В качестве основы я использую подход, предложенный Эриком Никусом и Фелипе Тадео.

Если вы хотите добиться:

рабочий стол

и это:

мобильный

.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>


что такое дианмическая высота
Альберто Акунья

39

Это самый простой способ сделать это, если вам нужно несколько строк. Оберните spanтекст в другое spanи укажите его высоту с помощью line-height. Хитрость в несколько линий сброса внутренних span«сек line-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*/
}

DEMO

Конечно, внешний spanможет быть divили что вы сказали


2
spans, как и любой другой встроенный элемент, может содержать любой встроенный элемент HTML . Несмотря на это, я написал, что это textvalignmiddleможет быть, divесли это необходимо (и вы можете установить его, display:inline;если вы так не хотите использовать spans)
Hashbrown

Я имею в виду, они не должны были. Они для содержания текста. Остальное используй div.
JorgeeFG

3
spanявляется универсальным встроенным контейнером для html и не является намеком только на то, чтобы быть текстом; `Может использоваться для группировки элементов в целях стилизации ...`. Я предлагаю прочитать спецификацию, прежде чем выдвигать ваши личные стандарты кодирования на тех, кто
считает

3
в любом случае, эта линия разговора не является конструктивной в техническом смысле к вопросу и не для чего нужны комментарии в SO
Hashbrown

У меня тоже работает. Используется другой элемент, чем span.
chocolata


5

Мне это нужно было для ссылок, поэтому я обернул span тегом a и div, затем центрировал сам тег 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, пожалуйста, проверьте код ниже, и вы можете найти вывод на скриншоте.

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

Атрибут css с вертикальным выравниванием, к сожалению, не соответствует ожиданиям. Эта статья объясняет 2 способа вертикального выравнивания элемента с помощью CSS.


1

Установите для padding-top подходящее значение, чтобы нажать x вниз, затем вычтите значение, которое вы имеете для padding-top, из высоты.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.