CSS вертикальне вирівнювання вбудованих / вбудованих блокових елементів


142

Я намагаюся встановити декілька inlineта inline-blockкомпоненти, вирівняні вертикально в div. Як же spanв цьому прикладі наполягають на тому, щоб його натискали вниз? Я спробував vertical-align:middle;і те vertical-align:top;, і нічого не змінюється.

HTML:

<div>
  <a></a><a></a>
  <span>Some text</span>
</div>

CSS:

a {
    background-color:#FFF;
    width:20px;
    height:20px;
    display:inline-block;
    border:solid black 1px;
}

div {
    background:yellow;
    vertical-align:middle;
}
span {
    background:red;
}

РЕЗУЛЬТАТ:
введіть тут опис зображення

ПІДМОГА


зауважте, що цього не відбудеться, якщо <a>елементи містять текст всередині них, дивіться це посилання
S.Serpooshan

Відповіді:


270

vertical-alignстосується елементів, що вирівнюються, а не їх батьківського елемента. Щоб вертикально вирівняти діти діва, зробіть це замість цього:

div > * {
    vertical-align:middle;  // Align children to middle of line
}

Дивіться: http://jsfiddle.net/dfmx123/TFPx8/1186/

ПРИМІТКА : vertical-alignвідносно поточного рядка тексту, а не повної висоти батьківського рівня div. Якщо ви хотіли, щоб батько divбув вище і все ще містив елементи вертикально по центру, встановіть властивість divs line-heightзамість його height. Для прикладу перейдіть за посиланням jsfiddle вище.


Це припиняє роботу, якщо вказати висоту для зовнішньої div.
Абхраніл Дас

4
@AbhranilDas vertical-alignвідносно поточного рядка тексту, а не батьківського елемента. Щоб зробити цю роботу як завгодно, встановіть div, line-heightзамість його height.
Дієго


5

Просто плаваючи обидва елементи ліворуч, досягається однаковий результат.

div {
background:yellow;
vertical-align:middle;
margin:10px;
}

a {
background-color:#FFF;
width:20px;
height:20px;
display:inline-block;
border:solid black 1px;
float:left;
}

span {
background:red;
display:inline-block;
float:left;
}

Проблема з плаваючими ними зліва полягає в тому, що вони перейдуть до наступного рядка, коли браузер стане занадто маленьким. Іноді потрібні елементи, щоб вони залишалися в рядку навіть поза межами браузера, і, таким чином, inline-blockце єдине рішення.
Джейк Вілсон

Хоча ця проблема з обгортанням може бути проблемою, я б сказав, що це дійсно хороше рішення для тих випадків, коли обгортання нормально. Він елегантний, відповідає духу бажаного ефекту і не потребує модифікацій для батьків.
Кріспен Сміт

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.