Современное решение (октябрь 2014 г.): готово для гибких макетов
Введение:
Это решение даже проще, чем то, что предлагает Leigh
. На самом деле он основан на нем.
Здесь вы можете заметить, что средний элемент (в нашем случае с "content__middle"
классом) не имеет никаких размерных свойств - ни ширины, ни отступов, ни свойства, связанного с полями, - а только overflow: auto;
(см. Примечание 1).
Большим преимуществом является то, что теперь вы можете указать a max-width
и a min-width
для левого и правого элементов . Что отлично подходит для гибких макетов ... отсюда и отзывчивый макет :-)
примечание 1: по сравнению с ответом Ли, где вам нужно добавить свойства margin-left
& margin-right
в "content__middle"
класс.
Код с неглавным макетом:
Здесь левый и правый элементы (с классами "content__left"
и "content__right"
) имеют фиксированную ширину (в пикселях): отсюда это называется нефиксированной компоновкой.
Живая демонстрация на http://jsbin.com/qukocefudusu/1/edit?html,css,output
<style>
.content {
width: 100%;
}
.content__left {
width: 100px;
float: left;
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto;
}
.content__right {
width: 100px;
float: right;
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
Код с плавным макетом:
Здесь левый и правый элементы (с классами "content__left"
и "content__right"
) имеют переменную ширину (в процентах), а также минимальную и максимальную ширину: отсюда и название «гибкий макет».
Живая демонстрация в гибком макете со max-width
свойствами http://jsbin.com/runahoremuwu/1/edit?html,css,output
<style>
.content {
width: 100%;
}
.content__left {
width: 20%;
max-width: 170px;
min-width: 40px;
float: left;
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto;
}
.content__right {
width: 20%;
max-width: 250px;
min-width: 80px;
float: right;
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
max-width of 170px & min-width of 40px<br />left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
max-width of 250px & min-width of 80px<br />right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
Поддержка браузера
Протестировано на BrowserStack.com в следующих веб-браузерах:
- IE7 в IE11
- Ff 20, Ff 28
- Safari 4.0 (Windows XP), Safari 5.1 (Windows XP)
- Хром 20, Хром 25, Хром 30, Хром 33,
- Опера 20