我如何在Twitter Bootstrap 3的容器(12列)中心一个列大小的div ?
.centered {
背景颜色:红色;
}
<!——最新编译和最小化的CSS——>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="匿名">
<身体类= "容器" >
<div class=" font - family -宋体">
<img data-src="holder.js/100x100" alt="" /> .
< / div >
身体< / >
我想要一个div,类。居中在容器中。如果有多个div,我可能会使用一行,但现在我只想要一个div的大小为一列居中容器(12列)。
我也不确定上面的方法是否足够好,因为目的不是将div抵消一半。我不需要在div之外的自由空间和div的内容按比例缩小。我想清空div之外的空间,以均匀分布(收缩直到容器宽度等于一列)。
在Bootstrap 3中有两种方法来居中列<div>:
方法1(偏移量):
第一种方法使用Bootstrap自己的偏移类,因此不需要更改标记,也不需要额外的CSS。关键是将偏移量设置为行剩余大小的一半。例如,一个大小为2的列的居中偏移量为5,即(12-2)/2。
在标记中,这看起来像:
<div class="row">
<div class="col-md-2 col-md-offset-5"></div>
</div>
这个方法有一个明显的缺点。它只适用于偶数列大小,因此只支持.col- x -2、.col- x -4、col-X-6、col-X-8和col-X-10。
方法2(旧边距:auto)
您可以通过使用已验证的边距来居中任何列大小:0 auto;技术。你只需要处理Bootstrap的网格系统添加的浮动。我建议像下面这样定义一个自定义CSS类:
.col-centered{
float: none;
margin: 0 auto;
}
现在你可以将它添加到任何屏幕大小的任何列中,它将与Bootstrap的响应式布局无缝配合:
<div class="row">
<div class="col-lg-1 col-centered"></div>
</div>
注意:使用这两种技术,您都可以跳过.row元素,并将列置于.container中居中,但您会注意到实际列大小的最小差异,因为容器类中的填充。
更新:
由于v3.0.1 Bootstrap有一个名为center-block的内置类,它使用margin: 0 auto,但缺少float:none,因此您可以将其添加到CSS中,使其与网格系统一起工作。
居中列的首选方法是使用“偏移量”(即:col-md-offset-3)
引导3。X定心示例
对于居中元素,有一个居中块助手类。
您还可以使用文本中心到文本中心(以及内联元素)。
响应式演示:http://bootply.com/91632
编辑-正如评论中提到的,center-block适用于列内容和display:block元素,但不适用于列本身(col-* divs),因为Bootstrap使用float。
更新2020
现在与Bootstrap 4,定心方法已经改变..
文本中心仍然用于显示:内联元素
Mx-auto将center-block替换为center display:block元素
Offset -*或mx-auto可用于网格列居中
Mx-auto (auto x轴边距)将中心显示:块或显示:具有定义宽度的flex元素(%,vw, px等)。默认情况下,在网格列上使用Flexbox,因此也有各种Flexbox居中方法。
示范引导4水平定心
有关BS4的垂直定心,请参阅https://stackoverflow.com/a/41464397/171456
要居中的颜色-我们需要使用下面的代码。Cols是除保证金外的浮动元素。我们也将它设为浮点数为0,
<body class="container">
<div class="col-lg-1 col-md-4 centered">
<img data-src="holder.js/100x100" alt="" />
</div>
</body>
为了使上面的col-lg-1的类居中,我们将写:
.centered {
float: none;
margin-left: auto;
margin-right: auto;
}
要将div中的内容居中,请使用text-align:center,
.centered {
text-align: center;
}
如果您只想在桌面和更大的屏幕上居中,而不是在移动设备上,则使用以下媒体查询。
@media (min-width: 768px) {
.centered {
float: none;
margin-left: auto;
margin-right: auto;
}
}
并且只在移动版本上居中div,使用下面的代码。
@media (max-width: 768px) {
.centered {
float: none;
margin-left: auto;
margin-right: auto;
}
}
你可以使用文本中心的行,并可以确保内部divs有display:inline-block(与不浮动)。
As:
<div class="container">
<div class="row text-center" style="background-color : black;">
<div class="redBlock">A red block</div>
<div class="whiteBlock">A white block</div>
<div class="yellowBlock">A yellow block</div>
</div>
</div>
和CSS:
.redBlock {
width: 100px;
height: 100px;
background-color: aqua;
display: inline-block
}
.whiteBlock {
width: 100px;
height: 100px;
background-color: white;
display: inline-block
}
.yellowBlock {
width: 100px;
height: 100px;
background-color: yellow;
display: inline-block
}
小提琴:
http://jsfiddle.net/DTcHh/3177/
我处理列居中的方法是对列使用display: inline-block,对父容器使用text-align: center。
你只需要将CSS类“居中”添加到行。
HTML:
<div class="container-fluid">
<div class="row centered">
<div class="col-sm-4 col-md-4">
Col 1
</div>
<div class="col-sm-4 col-md-4">
Col 2
</div>
<div class="col-sm-4 col-md-4">
Col 3
</div>
</div>
</div>
CSS:
.centered {
text-align: center;
font-size: 0;
}
.centered > div {
float: none;
display: inline-block;
text-align: left;
font-size: 13px;
}
JSFiddle: http://jsfiddle.net/steyffi/ug4fzcjd/
只需将显示内容的列设置为col-xs-12 (mobile-first;-),并仅配置容器来控制您希望居中内容的宽度,因此:
.container {
背景颜色:蓝色;
}
.centered {
背景颜色:红色;
}
<body class="container col-xs-offset-3 col-xs-6">
<div class=" font - family -宋体">
<img data-src="holder.js/100x100" alt="" /> .
< / div >
身体< / >
<body class="container col-xs-offset-1 col-xs-10">
<div class=" font - family -宋体">
<img data-src="holder.js/100x100" alt="" /> .
< / div >
身体< / >
有关演示,请参见http://codepen.io/Kebten/pen/gpRNMe:-)
对于那些当你没有确切的数字来填充你的网格时,希望在屏幕上将列元素居中的人,我写了一小段JavaScript来返回类名:
function colCalculator(totalNumberOfElements, elementsPerRow, screenSize) {
var arrayFill = function (size, content) {
return Array.apply(null, Array(size)).map(String.prototype.valueOf, content);
};
var elementSize = parseInt(12 / elementsPerRow, 10);
var normalClassName = 'col-' + screenSize + '-' + elementSize;
var numberOfFittingElements = parseInt(totalNumberOfElements / elementsPerRow, 10) * elementsPerRow;
var numberOfRemainingElements = totalNumberOfElements - numberOfFittingElements;
var ret = arrayFill(numberOfFittingElements, normalClassName);
var remainingSize = 12 - numberOfRemainingElements * elementSize;
var remainingLeftSize = parseInt(remainingSize / 2, 10);
return ret.concat(arrayFill(numberOfRemainingElements, normalClassName + ' col-' + screenSize + '-push-' + remainingLeftSize));
}
如果你有5个元素,你想在md屏幕上每行有3个元素,你可以这样做:
colCalculator(5, 3, 'md')
>> ["col-md-4", "col-md-4", "col-md-4", "col-md-4 col-md-push-2", "col-md-4 col-md-push-2"]
记住,第二个参数必须能被12整除。
这可能不是最好的答案,但有一个更有创意的解决方案。正如koala_dev所指出的,列偏移只适用于相等的列大小。然而,通过嵌套行,您也可以实现居中不均匀的列。
坚持最初的问题,你想要在12个网格中居中一列1。
将2的列居中,使其偏移5
创建一个嵌套行,这样在2列中就有了新的12列。
因为你想要居中1列,而1是2的“一半”(我们在步骤1中居中),现在你需要在嵌套行中居中一个6列,这很容易通过偏移3来实现。
例如:
<div class="container">
<div class="row">
<div class="col-md-offset-5 col-md-2">
<div class="row">
<div class="col-md-offset-3 col-md-6">
centered column with that has an "original width" of 1 col
</div>
</div>
</div>
</div>
</div>
看到这里,请注意,你必须增加输出窗口的大小,以便太看到结果,否则列将自动换行。
要在Bootstrap行中居中多个列-并且cols的数量是奇数,只需将这个css类添加到该行中的所有列:
.many-cols-centered { // To horizontally center bootstrap odd cols, eg col-lg-9, col-md-3, works well in lg
display:inline-block;
float:none;
}
所以在你的HTML中,你有这样的东西:
<div class="row text-center"> <!-- text-center centers all text in that row -->
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
<img src='assets/image1.jpg'>
<h3>You See</h3>
<p>I love coding.</p>
</div>
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
<img src='assets/image2.jpg'>
<h3>You See</h3>
<p>I love coding.</p>
</div>
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
<img src='assets/image3.jpg'>
<h3>You See</h3>
<p>I love coding.</p>
</div>
</div>
更准确地说,Bootstrap的网格系统包含12列,为了将任何内容居中,例如,内容占用一列。需要占用Bootstrap网格的两列,并将内容放置在这两列的一半上。
<div class="row">
<div class="col-xs-2 col-xs-offset-5 centered">
... your content / data will come here ...
</div>
</div>
'col-xs-offset-5'告诉网格系统从哪里开始放置内容。
'col-xs-2'告诉网格系统内容应该占据多少剩余列。
' centric '将是一个定义的类,它将内容居中。
下面是这个例子在Bootstrap的网格系统中的样子。
列:
1 | 2 | 3 | 4 5 6 7 | | | | | 8 9 10 11 | | | 12
.......offset....... .data. .......不习惯……