我最近需要一个 Bootstrap 圣杯布局(3 个响应列,中心列在源排序中排在第一位,任何列都可以有最长的内容)。
原始标记:
<div class="container">
<div class="row">
<div id="center">
...
center column content
...
</div>
<div id="left">
...
left column content
...
</div>
<div id="right">
...
right column content
...
</div>
</div>
</div>
通过添加一组-inset-
(margin-right)mixins/classes 来补充 Bootstrap (margin-left)mixins/classes,我可以通过使用这些以及围绕中心列内容-offset-
的额外包装来实现布局。div
装饰标记:
<div class="container">
<div class="row">
<div id="center" class="col-xs-12 col-sm-inset--12">
<div class="col-sm-offset-3 col-md-offset-3 col-md-inset-3 col-lg-offset-2 col-lg-inset-2">
...
center column content
...
</div>
</div>
<div id="left" class="col-xs-12 col-sm-3 col-lg-2">
...
left column content
...
</div>
<div id="right" class="col-xs-12 col-md-3 col-lg-2">
...
right column content
...
</div>
</div>
</div>
JS 小提琴:https ://jsfiddle.net/3n5Lvr84/
这个想法是中心列是 100% 宽度和 -100% 右侧边距,将左右列带到中心列的顶部,并且中心列内部元素为具有-offset-
和-inset-
边距的列腾出空间。
我已经在小提琴的 CSS 中包含了全套编译-inset-
规则;您需要规则中的 0-12-offset-
以及中心列外部元素的 -12。左右列源顺序可以通过改变元素来切换float:right
。
最后,我发现使用 mixins 更整洁。这是通过重新利用 Bootstrap 的mixins\_grid.scss
. 如果您更喜欢使用基于标记和类的 Bootstrap 响应式网格和/或 LESS ,则 LESS 混合器mixins\_grid-frameword.scss
可以类似地重新调整用途。
_inset.scss
@mixin make-xs-column-inset($columns) {
margin-right: percentage(($columns / $grid-columns));
}
@mixin make-sm-column-inset($columns) {
@media (min-width: $screen-sm-min) {
margin-right: percentage(($columns / $grid-columns));
}
}
@mixin make-md-column-inset($columns) {
@media (min-width: $screen-md-min) {
margin-right: percentage(($columns / $grid-columns));
}
}
@mixin make-lg-column-inset($columns) {
@media (min-width: $screen-lg-min) {
margin-right: percentage(($columns / $grid-columns));
}
}
帖子顶部原始标记的圣杯布局(一旦将包装 div 添加到#center
):
_holygrail.scss
@import "bootstrap/variables";
@import "bootstrap/mixins";
@import "_inset.scss";
#center {
@include make-xs-column(12);
@include make-sm-column-inset(-12);
> div {
@include make-sm-column-offset(3);
@include make-md-column-offset(3);
@include make-md-column-inset(3);
@include make-lg-column-offset(2);
@include make-lg-column-inset(2);
}
}
#left {
@include make-xs-column(12);
@include make-sm-column(3);
@include make-lg-column(2);
}
#right {
@include make-xs-column(12);
@include make-md-column(3);
@include make-lg-column(2);
}
.container #right {
float:right;
}
归功于https://stackoverflow.com/users/669044/clairesuzy使用的非响应式圣杯布局理念 (Tanfa flexi_floats)