ChatGPT解决这个技术问题 Extra ChatGPT

使用 Twitter Bootstrap 3 居中列

如何在 Twitter Bootstrap 3 中的容器(12 列)中将一列大小的 div 居中?

.centered { 背景颜色:红色; }

我想要一个 div,其类 .centered 在容器内居中。如果有多个 div,我可以使用一行,但现在我只想要一个 div,其大小为容器中心的一列(12 列)。

我也不确定上述方法是否足够好,因为其目的不是将 div 偏移一半。我不需要 div 之外的空闲空间,并且 div 的内容按比例缩小。我想 div 外的空白空间均匀分布(缩小到容器宽度等于一列)。

恕我直言,仅限于bootstrap3的话题,那是不合适的,尤其是bootstrap版本会越来越新,过去的版本只会对未来的人越来越没用,甚至没用。我希望以后如果有人想更新答案,不会受此影响和限制。

P
Peter Mortensen

在 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-4col-X-6col-X-8col-X-10

方法2(旧边距:auto)

您可以使用经过验证的 margin: 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 以使其与网格系统一起使用。


Z
Zim

居中列的首选方法是使用“偏移”(即:col-md-offset-3

Bootstrap 3.x centering examples

对于居中元素,有一个 center-block helper class

您还可以使用 text-center 将文本居中(和内联元素)。

响应式演示http://bootply.com/91632

编辑 - 如评论中所述,center-block 适用于列内容和 display:block 元素,但不适用于列本身(col-* div)因为 Bootstrap 使用 float

2020 年更新

现在使用 Bootstrap 4,居中方法已经改变..

text-center 仍然用于 display:inline 元素

mx-auto 将 center-block 替换为 center display:block 元素

offset-* 或 mx-auto 可用于使网格列居中

mx-auto(自动 x 轴边距)将具有 已定义宽度、(%vwpx 等)的 display:blockdisplay:flex 元素居中. 默认使用弹性盒在网格列上,因此弹性盒居中方法也多种多样。

Demo Bootstrap 4 Horizontal Centering

关于 BS4 中的垂直居中,请参阅 https://stackoverflow.com/a/41464397/171456


text-center 是为我工作的人Bootstrap v3.3.7
S
Sender

现在 Bootstrap 3.1.1 正在与 .center-block 一起使用,并且此帮助程序类与列系统一起使用。

引导程序 3 Helper Class Center

请检查this jsfiddle DEMO

<div class="container">
    <div class="row">
        <div class="center-block">row center-block</div>
    </div>
    <div class="row">
        <div class="col-md-6 brd">
            <div class="center-block">1 center-block</div>
        </div>
        <div class="col-md-6 brd">
            <div class="center-block">2 center-block</div>
        </div>
    </div>
</div>
<div class="row">
    <div class="col-xs-2 col-center-block">row col-xs-2 col-center-block</div>
</div>

https://i.stack.imgur.com/bHg4V.png

使用 col-center-block 辅助类的行列中心。

.col-center-block {
    float: none;
    display: block;
    margin: 0 auto;
    /* margin-left: auto; margin-right: auto; */
}

// row col-xs-2 col-center-block 工作得很好
P
Peter Mortensen

只需将以下内容添加到您的自定义 CSS 文件中。不建议直接编辑 Bootstrap CSS 文件,这会取消您使用 CDN 的能力。

.center-block {
    float: none !important
}

为什么?

Bootstrap CSS(3.7 及更低版本)使用 margin: 0 auto;,但它被 size 容器的 float 属性覆盖。

PS:

添加这个类后,不要忘记按正确的顺序设置类。

<div class="col-md-6 center-block">Example</div>

S
Schmalzy

Bootstrap 3 现在有一个用于此 .center-block 的内置类

.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}

如果您仍在使用 2.X,那么只需将其添加到您的 CSS 中。


P
Peter Mortensen

我对中心列的方法是将 display: inline-block 用于列,将 text-align: center 用于容器父级。

您只需将 CSS 类“居中”添加到 row

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/


J
JoshYates1980

Bootstrap 版本 3 有一个 .text-center 类。

只需添加此类:

text-center

它只会加载这种样式:

.text-center {
    text-align: center;
}

例子:

<div class="container-fluid">
  <div class="row text-center">
     <div class="col-md-12">
          Bootstrap 4 is coming....
      </div>
  </div>
</div>   

O
Omar Alahmed

使用 Bootstrap v3 和 v4,只需将 .justify-content-center 添加到 .row <div>

<div class="row justify-content-center">
    <div class="col-1">centered 1 column</div>
</div>

https://getbootstrap.com/docs/4.0/utilities/flex/#justify-content


P
Peter Mortensen

这行得通。可能是一种骇人听闻的方式,但效果很好。它已针对响应性 (Y) 进行了测试。

.centered {
    background-color: teal;
    text-align: center;
}

https://i.stack.imgur.com/dGRBO.png

https://i.stack.imgur.com/tvMEA.png


H
Hossein Narimani Rad

使用引导程序 4,您可以简单地尝试 justify-content-md-center,因为它提到了 here

<div class="container">
    <div class="row justify-content-md-center">
        <div class="col col-lg-2">
              1 of 3
        </div>
        <div class="col-md-auto">
            Variable width content
        </div>
        <div class="col col-lg-2">
              3 of 3
        </div>
    </div>
    <div class="row">
        <div class="col">
             1 of 3
        </div>
        <div class="col-md-auto">
                Variable width content
        </div>
        <div class="col col-lg-2">
              3 of 3
        </div>
    </div>
</div>

https://i.stack.imgur.com/D1VEf.jpg


J
JGallardo
<div class="container-fluid">
    <div class="row">
        <div class="col-lg-4 col-lg-offset-4">
            <img src="some.jpg">
        </div>
    </div>
</div>

P
Peter Mortensen

为了使 col- 居中,我们需要使用下面的代码。 cols 是除margin auto 之外的浮动元素。我们还将它设置为不浮动,

<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;
    }
}

P
Peter Mortensen

只需将显示内容的一列设置为 col-xs-12 (mobile-first ;-) 并将容器配置为仅控制您希望居中内容的宽度,因此:

.container { 背景颜色:蓝色; } .centered { 背景颜色:红色; }

有关演示,请参阅 http://codepen.io/Kebten/pen/gpRNMe :-)


P
Peter Mortensen

偏移的另一种方法是有两个空行,例如:

<div class="col-md-4"></div>
<div class="col-md-4">Centered Content</div>
<div class="col-md-4"></div>

P
Peter Mortensen

您可以将 text-center 用于该行,并确保内部 div 具有 display:inline-block(而不是 float)。

作为:

<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/


r
reinder

这可能不是最好的答案,但对此还有另一种创造性的解决方案。正如 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>

请参阅this fiddle,请注意您必须增加输出窗口的大小才能看到结果,否则列会换行。


G
Gianfranco P.

这不是我的代码,但它可以完美运行(在 Bootstrap 3 上测试),我不必乱用 col-offset。

演示:

/* 居中列样式 */ .col-centered { display: inline-block;浮动:无; /* 行内块空间修复 */ margin-right: -4px;背景颜色:#ccc;边框:1px 实心#ddd; }

第6列
第6栏
第3栏
第3栏
第三栏


P
Peter Mortensen

在 .row 或 .col 中附加以下代码段。这适用于 Bootstrap 4*。

d-flex justify-content-center

C
Community

我们可以通过使用表格布局机制来实现这一点:

机制是:

将所有列包装在一个 div 中。将该 div 设置为具有固定布局的表格。将每一列设为表格单元格。使用垂直对齐属性来控制内容位置。

示例演示在这里

https://i.stack.imgur.com/bxBZP.png


P
Peter Mortensen

正如 koala_dev 在他的方法 1 中使用的那样,我更喜欢 offset 方法而不是使用有限的 center-block 或 margins,但正如他所提到的:

现在,这种方法有一个明显的缺点,它只适用于偶数列,所以只有 .col-X-2、.col-X-4、col-X-6、col-X-8 和 col-X-支持 10 个。

这可以使用以下奇数列的方法来解决。

<div class="col-xs-offset-5 col-xs-2">
    <div class="col-xs-offset-3">
        // Your content here
    </div>
</div>

B
B-M

使用 Bootstrap 4 在您的 div 类中使用 mx-auto

<div class="container">
  <div class="row">
    <div class="mx-auto">
      You content here
    </div>
  </div>
</div>

A
Arsen Khachaturyan

引导程序 4 解决方案:

<div class="container">
  <div class="row">
    <div class="col align-self-center">
      Column in the middle, variable width
    </div>
  </div>
</div>

W
Walter Roman

因为我从不需要在 .row 中仅将单个 .col- 居中,所以我在目标列的包装 .row 上设置了以下类。

.col-center > [class*="col-"] {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

例子

<div class="full-container">
    <div class="row col-center">
        <div class="col-xs-11">
            Foo
        </div>
        <div class="col-xs-11">
            Bar
        </div>
    </div>
</div>

j
jsgoupil

对于那些在没有确切数字来填充网格时希望在屏幕上居中列元素的人,我编写了一小段 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 整除。


K
Kaka Ruto

要在 Bootstrap 行中居中多列 - 并且列数是奇数,只需将此 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>

J
JGallardo

尝试这个

<div class="row">
    <div class="col-xs-2 col-xs-offset-5"></div>
</div>

您可以使用其他 col 以及 col-md-2 等。


P
Peter Mortensen

我建议简单地使用类 text-center

<body class="container">
    <div class="col-md-12 text-center">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

P
Peter Mortensen

您可以在 Bootstrap 中使用非常灵活的解决方案 flexbox。

justify-content: center;

可以使您的列居中。

查看flex


P
Peter Mortensen

试试这个代码。

<body class="container">
    <div class="col-lg-1 col-lg-offset-10">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

这里我使用了 col-lg-1,偏移量应该为 10,以便在大型设备上正确居中 div。如果您需要它以中型到大型设备为中心,那么只需将 lg 更改为 md 等等。


I
Ishtiaq Ahmed
<div class="container">
    <div class="row row-centered">
        <div class="col-xs-6 col-centered">Column 6</div>
        <div class="col-xs-6 col-centered">Column 6</div>
        <div class="col-xs-3 col-centered">Column 3</div>
        <div class="col-xs-3 col-centered">Column 3</div>
        <div class="col-xs-3 col-centered">Column 3</div>
    </div>
</div>

CSS

/* centered columns styles */
.row-centered {
    text-align:center;
}
.col-centered {
    display:inline-block;
    float:none;
    /* reset the text-align */
    text-align:left;
    /* inline-block space fix */
    margin-right:-4px;
    text-align: center;
    background-color: #ccc;
    border: 1px solid #ddd;
}

https://i.stack.imgur.com/jZuRL.png