Поработав с этой же проблемой в течение некоторого времени, я наконец-то нашел решение, отвечающее всем моим требованиям:
- Не требует, чтобы я знал высоту контейнера.
- В отличие от относительных + абсолютных решений, контент не плавает в своем собственном слое (т.е. он обычно встраивается в контейнерный элемент div).
- Работает в разных браузерах (IE8 +).
- Простота реализации.
Решение просто занимает один <div>
, который я называю «выравнивателем»:
CSS
.bottom_aligner {
display: inline-block;
height: 100%;
vertical-align: bottom;
width: 0px;
}
HTML
<div class="bottom_aligner"></div>
... Your content here ...
Этот трюк работает, создавая высокий, тощий div, который выдвигает базовую линию текста к основанию контейнера.
Вот полный пример, который достигает того, о чем просил ОП. Я сделал "bottom_aligner" толстым и красным только для демонстрационных целей.
CSS:
.outer-container {
border: 2px solid black;
height: 175px;
width: 300px;
}
.top-section {
background: lightgreen;
height: 50%;
}
.bottom-section {
background: lightblue;
height: 50%;
margin: 8px;
}
.bottom-aligner {
display: inline-block;
height: 100%;
vertical-align: bottom;
width: 3px;
background: red;
}
.bottom-content {
display: inline-block;
}
.top-content {
padding: 8px;
}
HTML:
<body>
<div class="outer-container">
<div class="top-section">
This text
<br> is on top.
</div>
<div class="bottom-section">
<div class="bottom-aligner"></div>
<div class="bottom-content">
I like it here
<br> at the bottom.
</div>
</div>
</div>
</body>