четверг, 26 июня 2014 г.

Плавающий блок на всю оставшуюся ширину

Довольно часто в верстке приходится создавать такую структуру, при которой в родительском блоке горизонтально размещается несколько блоков, чаще всего плавающих. И обычно требуется, чтобы последний блок занимал всё оставшееся место по ширине. До недавнего времени вполне устраивал следующий способ, при котором у нас известна ширина первого блока:

HTML

<div class="container clearfix">
    <div class="fixed">Блок с известной шириной</div>
    <div class="stretch">Блок, заполняющий оставшееся место</div>
</div>


CSS
.clearfix:before,
.clearfix:after {
    content: " ";
    display: table;
}
.clearfix:after {
    clear: both;
}

.container {
    position: relative;
    height: 40px;
    background: #ddd;
    border: 1px solid #999;
    overflow: hidden;
}

.fixed {
    float: left;
    width: 200px;
    height: 40px;
    background: #eee;
}

.stretch {
    margin-left: 210px;
    height: 40px;
    background: #aaa;
    text-overflow: ellipsis;
    overflow: hidden;
}

Пример

Недостатки этого способа лишь:
  • Нужно задать ширину первому блоку, соответственно такой же отступ второму.


Но недавно столкнулся с такими требованиями:
  • Может быть любое количество плавающих блоков;
  • Не все блоки с фиксированной шириной (есть с минимальным или максимальным значением ширины);
  • Ну и как обычно последний блок должен занимать всё оставшееся место по ширине.

Решение было следующим.

IT-записки

comments powered by Disqus