Как да подравните вертикално плаващите divs към дъното?

Тъй като правилото за примери е: http://jsfiddle.net/rudiedirkx/wgue7/

Как да поставя лентите на дъното вместо нагоре? Сега те залепват за горната част на контейнера (#bars), но аз искам да залепват за дъното.

Както можете да видите, не знам височината на най-високата лента, така че не знам височината на контейнера.

Тези q+a не помагат: Вертикално подравняване на плаващи div, Вертикално подравняване на плаващи DIV

Трябва да е просто, нали? Ако помага: трябва да работи само в прилични браузъри.

PS. Броят на лентите е променлив (не в примера) и техните височини са. Само широчините им са статични. Позиционирането absolute няма да помогне, защото div на контейнера няма измервания.


person Rudie    schedule 24.05.2011    source източник
comment
не са ли вече подравнени до дъното? Или ги искате точно на границата? Изглежда, че вече са подравнени отдолу с vertical-align:bottom;   -  person robx    schedule 25.05.2011
comment
Да, това, което Robx каза. Ако искате само лентите да докосват долната граница, всичко, което трябва да направите, е да премахнете padding: 5px;.   -  person Chloe    schedule 24.07.2015


Отговори (2)


Това ще свърши работа:

#bars {
    display: table-cell;
    border: solid 1px black;
}
#bars > div {
    display: inline-block;
    vertical-align: bottom;
    width: 5px;
    background-color: #999;
    margin-left: 2px;
}
#bars > div:first-child {
    margin-left: 0;
}

Той използва display: table-cell; на родителския div, който по подразбиране има приложено vertical-align: baseline;. Това променя необходимостта от float: left; на дъщерните divs и ни позволява да използваме display: inline-block;. Това също така премахва необходимостта от вашата ясна корекция на CSS.

РЕДАКТИРАНЕ – Според коментарите на @thirtydot, добавянето на vertical-align: bottom; към дъщерните divs премахва празнината в долната част.

Следователно промених CSS по-горе и jsFiddle. Запазих display: table-cell;, така че родителският div обвива дъщерните div с 0 подложка и изглежда хубаво и ефектно!

person Code Maverick    schedule 24.05.2011
comment
Актуализирах отговора и jsFiddle, но ако просто промените подложката си на padding: 5px 5px 0;, това ще изравни проблема. - person Code Maverick; 25.05.2011
comment
О, премахнах vertical-align: bottom;, тъй като vertical-align: baseline е по подразбиране. - person Code Maverick; 25.05.2011
comment
Само за информация, ако трябва да поддържате IE7, той не поддържа display:table-cell, въпреки че мисля, че това е най-добрият отговор. - person Paul Sham; 25.05.2011
comment
@Paul - Той каза, че е само за модерни браузъри, затова използвах това, което направих. =D - person Code Maverick; 25.05.2011
comment
@Scott Да, знам. Просто добавям допълнителна информация, където мога. Все пак гласувах за вашия отговор. :) - person Paul Sham; 25.05.2011
comment
@Paul Добре ... просто се уверявам. =D - person Code Maverick; 25.05.2011
comment
И така, какво става с 5px? Това е бяло пространство, което не може да бъде променено? За всички браузъри ли е еднакво? Не обичам да използвам 5px само защото пасва в този случай. Защо е 5? - person Rudie; 25.05.2011
comment
@Rudie - Съжалявам, не съм сигурен. Играх си с него известно време, опитвайки отрицателни полета/подложки и никога не можах да изчезна тази празнина от 5 пиксела в долната част. Може да е това, с което трябва да живеете, за да заработи примерът ви. Все пак бихте могли да използвате позициониране, за да го поправите, нека да видя дали мога да го накарам да работи. - person Code Maverick; 25.05.2011
comment
@Scott: За да премахнете тази долна подложка (всъщност не е padding), имате нужда от vertical-align: bottom. Освен това нямате нужда display: table-cell, ако използвате display: inline-block на divs. Добавих и хакове, за да накарам inline-block да работи в IE6/7. Вижте: jsfiddle.net/7BBqC/3 - осъзнавам, че можех току-що да публикувам собствения си отговор на този въпрос с всички тези подробности, но аз съм хубав човек :) - person thirtydot; 25.05.2011
comment
@thirtydot - Прав си. Трябва да съм опитвал vertical-align: bottom;, преди да използвам display: inline-block; на дъщерните div. В родителския div използването на display: table-cell; ефективно обгръща div-ите, както би направило float: left, вместо да се простира по екрана. - person Code Maverick; 25.05.2011
comment
@Rudie - jsFiddle и отговорът са актуализирани с част от предложението на @thirtydot! Сега изглежда страхотно! =D - person Code Maverick; 25.05.2011
comment
@Scott: Да, забравих да спомена, че смених display: table-cell с float: left, което е малко по-добре, защото работи в IE6/7. IE7 за съжаление все още има около 8% дял в световен мащаб, така че все още хубаво е да го подкрепите където е възможно. Освен това, display: table-cell е добре. Предполагам, че зависи от това дали OP се интересува от IE7. +1 между другото. - person thirtydot; 25.05.2011
comment

Ако се притеснявате, че Apple може някой ден да даде специален случай на забавяне от 0, винаги можете да посочите забавяне от 1e-37 или така. Въпреки че документацията за performSelector:withObject:afterDelay: може лесно да се прочете, за да се гарантира, че селекторът винаги ще бъде планиран за следващата итерация на цикъл на изпълнение.

Ако се притеснявате, че Apple някой ден може да забави специални случаи по-малко от произволна долна граница, винаги можете да опитате да използвате performSelector:target:argument:order:modes:, което в документацията изрично посочва, че ще насрочи изпълнение за следващата итерация на цикъл на изпълнение.

- person Code Maverick; 25.05.2011
comment
@Scott: Прав си. Дори не прочетох въпроса, просто погледнах демонстрацията ви и коментарите и го поправих. - person thirtydot; 25.05.2011
comment
@thirtydot - Оценявам го. Изнервяше ме. Никога не съм мислил за вертикално дъно, b/c това беше първото нещо, което опитах. Но това беше с float: left, след това display: inline на дъщерните divs. След това се преместих в родителския div и vertical-align: bottom; там го измести надолу, но грозно. След това добавих display: inline-block и изглежда поправи всичко, освен празнината в долната част. Не знаех, че OP искаше да се изравнява, мислех, че изглежда добре с подложката от 5px навсякъде. - person Code Maverick; 25.05.2011
comment
Нямате нужда от float: left. Просто направете контейнера display: inline-block. Сега работи перфектно: jsfiddle.net/rudiedirkx/wgue7 @thirtydot Мисля, че заслужаваш поне +1... Не искаш? - person Rudie; 26.05.2011
comment
@Rudie: Няма нищо, което бих могъл да напиша в отговор на този въпрос, което да не е вече казано. Ако искате да ми дадете +1, гласувайте за някой от другите отговори, които съм написал, които смятате, че заслужават. :) - person thirtydot; 26.05.2011

FLEXBOX! Flexbox е най-добрият.

Пример: http://jsfiddle.net/rudiedirkx/7FGKN/

Flexbox прави това абсурдно просто (и да не забравя правилно):

#container {
  display: flex; /* or inline-flex */
  flex-flow: row nowrap; /* is default: columns along the main-axis (row) and no wrapping to next lines */
  align-items: flex-end; /* bottom */
}
#container > div {
  /* margin etc here, but nothing layoutish */
}

Това е. Два реда CSS: display: flex и align-items: flex-end.

person Rudie    schedule 04.06.2013
comment
Flexbox е толкова страхотен, че дори не е нужно да се занимавате с плаващи елементи през повечето време, защото не можете да плавате гъвкави елементи! (Все още можете да поставите гъвкав контейнер или нещо вътре във гъвкав елемент, което е хубаво и не прави flexbox по-малко страхотен.) - person BoltClock; 17.11.2013
comment
+1 W3C, мрежа за разработчици на Mozilla и CSS трикове са страхотни източници да научите за flexbox. Добре е да се отбележи, че на този етап изглежда е само препоръка на WC3. Може ли някой да потвърди или отрече това официално? Текущата поддръжка на браузъра също може да бъде намерена на тези връзки. - person Code Maverick; 22.11.2013
comment
Поддръжката на браузър е всичко, което има значение и всъщност е много добра в наши дни. IE10 прилага стария начин (но повечето от тях са изпълними). IE11 е част от готиния клуб. Firefox обаче все още не прави wrap. - person Rudie; 22.11.2013
comment
comment
Какво вълшебство е това? - person phuwin; 20.04.2016