Як я можу вирівняти щось вертикально всередині проміжної теги?


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

ditto for @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
неприязні

Я маю на увазі, чи не повинні вони. Вони призначені для вмісту тексту. Ще використовувати дів.
JorgeeFG

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

3
Так чи інакше, ця лінія розмови не є конструктивною в технічному сенсі до питання, і хіба для чого такі коментарі в
ТА

Працює і для мене. Використовується інший елемент, ніж проліт.
chocolata


5

Мені це знадобилося для посилань, тому я загорнув проміжок a-тегом і дівом, а потім по центру відзначив сам тег 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, хром, сафарі, 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.