Bootstrap 3.0 - Жидкостная сетка, которая включает в себя фиксированные размеры колонок
Я изучаю, как использовать Bootstrap. В настоящее время я пробираюсь через макеты. Хотя Bootstrap довольно круто, все, что я вижу, кажется датированным. Для жизни меня у меня есть то, что я думаю, это базовый макет, который я не могу понять. Мой макет выглядит следующим образом:
---------------------------------------------------------------------------
| | | |
| | | |
| 240px | 160px | All Remaining Width of the Window |
| | | |
| | | |
--------------------------------------------------------------------------|
Эта сетка должна занимать всю высоту окна. По моему мнению, мне нужно смешивать фиксированную и жидкую ширину. Однако у Bootstrap 3.0 больше нет класса жидкости. Даже если бы это было так, я не могу понять, как смешивать жидкости и фиксированные размеры колонок. Кто-нибудь знает, как это сделать в Bootstrap 3.0?
Спасибо
Ответы
Ответ 1
На самом деле нет простого способа смешать флюид и фиксированную ширину с помощью Bootstrap 3. Это означает, что это так, так как сетчатая система спроектирована как жидкая, отзывчивая вещь. Вы можете попробовать взломать что-то, но это будет противоречить тому, что пытается выполнить система реагирующей сетки, цель которой - сделать этот макет для разных типов устройств.
Если вам нужно придерживаться этого макета, я бы подумал о том, чтобы выложить свою страницу с помощью специального CSS и не использовать сетку.
Ответ 2
edit: Поскольку многие люди, похоже, хотят это сделать, я написал короткий путеводитель с более общим прецедентом здесь https://www.atlascode.com/bootstrap-fixed-width-sidebars/. Надеюсь, что это поможет.
Система сетки bootstrap3 поддерживает вложенность строк, которая позволяет вам отрегулировать корневую строку, чтобы разрешить меню с фиксированной шириной.
Вам нужно добавить в корневую строку padding-left, затем иметь дочернюю строку, содержащую ваши обычные элементы макета сетки.
Вот как я обычно это делаю
http://jsfiddle.net/u9gjjebj/
HTML
<div class="container">
<div class="row">
<div class="col-fixed-240">Fixed 240px</div>
<div class="col-fixed-160">Fixed 160px</div>
<div class="col-md-12 col-offset-400">
<div class="row">
Standard grid system content here
</div>
</div>
</div>
</div>
CSS
.col-fixed-240{
width:240px;
background:red;
position:fixed;
height:100%;
z-index:1;
}
.col-fixed-160{
margin-left:240px;
width:160px;
background:blue;
position:fixed;
height:100%;
z-index:1;
}
.col-offset-400{
padding-left:415px;
z-index:0;
}
Ответ 3
или использовать свойство display с табличной ячейкой;
CSS
.table-layout {
display:table;
width:100%;
}
.table-layout .table-cell {
display:table-cell;
border:solid 1px #ccc;
}
.fixed-width-200 {
width:200px;
}
HTML
<div class="table-layout">
<div class="table-cell fixed-width-200">
<p>fixed width div</p>
</div>
<div class="table-cell">
<p>fluid width div</p>
</div>
</div>
http://jsfiddle.net/DnGDz/
Ответ 4
У меня была немного другая проблема:
- Мне нужно было объединить фиксированные и текучие столбцы как часть таблицы, а не как часть полноэкранного макета
- Мне нужно было иметь столбцы, фиксированные как слева, так и справа.
- Я не беспокоился о фоновых столбцах, используя полную высоту содержащейся строки
В результате я прибегал к float
для левого и правого столбцов, а затем использовал Bootstrap row
для промежуточных столбцов.
<div>
<div class="pull-left" style="width:240px">Fixed 240px</div>
<div class="pull-right" style="width:120px">Fixed 120px</div>
<div style="margin-left:240px;margin-right:120px">
<div class="row" style="margin:0px">
Standard grid system content here
</div>
</div>
</div>
Ответ 5
IMO, лучший способ приблизиться к этому в Bootstrap 3 будет использовать медиа-запросы, которые согласуются с точками останова Bootstrap, так что вы используете только столбцы с фиксированной шириной - это большие экраны, а затем пусть макет будет реагировать на меньшие экраны. Таким образом, вы сохраняете отзывчивость...
@media (min-width:768px) {
#sidebar {
width: inherit;
min-width: 240px;
max-width: 240px;
min-height: 100%;
position:relative;
}
#sidebar2 {
min-width: 160px;
max-width: 160px;
min-height: 100%;
position:relative;
}
#main {
width:calc(100% - 400px);
}
}
Рабочий бутстрап Фиксированная жидкость Демо
UPDATE: поскольку Bootstrap 4 будет иметь flexbox макеты, подобные этому, будет намного проще: http://www.codeply.com/go/eAYKvDkiGw
Ответ 6
ОБНОВЛЕНИЕ 2014-11-14:
Нижеприведенное решение слишком старое, я рекомендую использовать метод компоновки гибкой коробки. Вот обзор: http://learnlayout.com/flexbox.html
Мое решение
HTML
<li class="grid-list-header row-cw row-cw-msg-list ...">
<div class="col-md-1 col-cw col-cw-name">
<div class="col-md-1 col-cw col-cw-keyword">
<div class="col-md-1 col-cw col-cw-reply">
<div class="col-md-1 col-cw col-cw-action">
</li>
<li class="grid-list-item row-cw row-cw-msg-list ...">
<div class="col-md-1 col-cw col-cw-name">
<div class="col-md-1 col-cw col-cw-keyword">
<div class="col-md-1 col-cw col-cw-reply">
<div class="col-md-1 col-cw col-cw-action">
</li>
СКС
.row-cw {
position: relative;
}
.col-cw {
position: absolute;
top: 0;
}
.ir-msg-list {
$col-reply-width: 140px;
$col-action-width: 130px;
.row-cw-msg-list {
padding-right: $col-reply-width + $col-action-width;
}
.col-cw-name {
width: 50%;
}
.col-cw-keyword {
width: 50%;
}
.col-cw-reply {
width: $col-reply-width;
right: $col-action-width;
}
.col-cw-action {
width: $col-action-width;
right: 0;
}
}
Не изменяйте слишком большой код макета начальной загрузки.
Обновить (не от OP): добавление фрагмента кода ниже, чтобы облегчить понимание этого ответа. Но он работает не так, как ожидалось.
ul {
list-style: none;
}
.row-cw {
position: relative;
height: 20px;
}
.col-cw {
position: absolute;
top: 0;
background-color: rgba(150, 150, 150, .5);
}
.row-cw-msg-list {
padding-right: 270px;
}
.col-cw-name {
width: 50%;
background-color: rgba(150, 0, 0, .5);
}
.col-cw-keyword {
width: 50%;
background-color: rgba(0, 150, 0, .5);
}
.col-cw-reply {
width: 140px;
right: 130px;
background-color: rgba(0, 0, 150, .5);
}
.col-cw-action {
width: 130px;
right: 0;
background-color: rgba(150, 150, 0, .5);
}
<ul class="ir-msg-list">
<li class="grid-list-header row-cw row-cw-msg-list">
<div class="col-md-1 col-cw col-cw-name">name</div>
<div class="col-md-1 col-cw col-cw-keyword">keyword</div>
<div class="col-md-1 col-cw col-cw-reply">reply</div>
<div class="col-md-1 col-cw col-cw-action">action</div>
</li>
<li class="grid-list-item row-cw row-cw-msg-list">
<div class="col-md-1 col-cw col-cw-name">name</div>
<div class="col-md-1 col-cw col-cw-keyword">keyword</div>
<div class="col-md-1 col-cw col-cw-reply">reply</div>
<div class="col-md-1 col-cw col-cw-action">action</div>
</li>
</ul>
Ответ 7
Хорошо, мой ответ супер приятный:
<style>
#wrapper {
display:flex;
width:100%;
align-content: streach;
justify-content: space-between;
}
#wrapper div {
height:100px;
}
.static240 {
flex: 0 0 240px;
}
.static160 {
flex: 0 0 160px;
}
.growMax {
flex-grow: 1;
}
</style>
<div id="wrapper">
<div class="static240" style="background:red;" > </div>
<div class="static160" style="background: green;" > </div>
<div class="growMax" style="background:yellow;" ></div>
</div>
игровая площадка jsfiddle
если вы хотите поддерживать браузер, используйте https://github.com/10up/flexibility
Ответ 8
Почему бы просто не установить два левых столбца на фиксированный с помощью собственного css, а затем создать новый макет сетки из всех 12 столбцов для остальной части контента?
<div class="row">
<div class="fixed-1">Left 1</div>
<div class="fixed-2">Left 2</div>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-11"></div>
</div>
</div>