Вертикальне вирівнювання CSS не працює з поплавком


85

Як я можу використовувати vertical-alignтак само, як і floatу divвластивостях? vertical-alignПрацює відмінно , якщо я не використовувати float. Але якщо я використовую поплавок, то він не працює. Для мене важливо використовувати float:rightдля останнього div.

Я намагаюся слідувати, якщо ви видалите поплавок з усіх div, то це буде добре працювати:

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

Відповіді:


92

Вам потрібно встановити висоту рядка.

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


31
якщо встановити line-heightоднакове значення для всіх елементів vertical-align, марно. ( jsfiddle.net/VBR5J/448 )
Едерсон Т. Шлахта

Не працює для <button>елементів. Замість <span>є a <button>.
Зелений

14
Ця відповідь неправильна. вертикальне вирівнювання належить КОНТЕЙНЕРУ ( divне), а не окремим елементам. Правильне рішення - здатне вертикального вирівнювання плавало елементи - це помістити як vertical-alignі line-heightна контейнері: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. ВИДАЛИТИ vertical-align:middle; line-height: 38px;зі стилів span.
ToolmakerSteve

1
Щойно виявив, що те, що я пропоную, працює для плаваючих інтервалів у скрипті відповіді, але не для деяких елементів (не вдалося для плаваючого радіовходу).
ToolmakerSteve

1
@ToolmakerSteve помиляється, і ця відповідь неправильна. Вирівнювання по вертикалі застосовується лише до вбудованих елементів, вбудованих блоків або комірок таблиці (останнє просто дивно). Додавання 'float' робить елемент en блочним елементом. Тим не менш, використання висоти рядка (та ігнорування вертикального вирівнювання) може бути рішенням.
commonpike

15

Відредаговано:

Вертикалі вирівнювання CSS властивість задає вертикальне вирівнювання інлайн, вбудований блок або елемент таблиці елементів.

Прочитайте цю статтю для розуміння вертикального вирівнювання


1
Це стосується і inline-blockелементів.
Рольф

1
Оновлено. Я пропустив це. Дякую за згадку.
Ahsan Khurshid

3
це не відповідь
Сержан Ахметов

Хоча це посилання може відповісти на питання, краще включити сюди основні частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
Utsav Patel

8

Вертикальне вирівнювання насправді не працює з плаваючими елементами. Це тому, що float піднімає елемент із нормального потоку документа. Можливо, ви захочете використати інші методи вертикального вирівнювання, такі як ті, що базуються на перетворенні, відображенні: таблиця, абсолютне позиціонування, висота рядка, js (можливо, остання інстанція) або навіть звичайна стара таблиця html (можливо, перший вибір, якщо вміст власне таблична). Ви побачите, що з цього приводу ведуться бурхливі дискусії.

Однак ось як ви можете вертикально вирівняти ВАШІ 3 div:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

Не впевнений, навіщо вам потрібна фіксована ширина, дисплей: вбудований блок та плаваючий.


Не могли б ви додати якийсь код до своєї відповіді, щоб показати, як досягти рішення?
абарізон

Крім того, "правильну відповідь" так легко зламати ... це змушує мене дивуватися, як на Землі 19 людей проголосували за неї.
Габріель

3
у запитанні говорилося "йому потрібен поплавок: прямо на останньому елементі", тому йому може знадобитися останній елемент, який знаходиться вздовж правої сторони контейнера. як досягти цієї мети у своїй відповіді?
fly.x

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