表列大小


102

在中Bootstrap 3,我可以随意col-sm-xx将其应用于和调整大小表列中的th标签thead。但是,这在Bootstrap 4中不起作用。如何在Bootstrap 4中实现类似的功能?

<thead>
<th class="col-sm-3">3 columns wide</th>
<th class="col-sm-5">5 columns wide</th>
<th class="col-sm-4">4 columns wide</th>
</thead>

查看提供的编解码器大小不正确,特别是如果您向表中添加一些数据。查看运行方式:

<div class="container" style="border: 1px solid black;">
    <table class="table table-bordered">
    <thead>
        <tr class="row">
            <th class="col-sm-3">3 columns wide</th>
            <th class="col-sm-5">5 columns wide</th>
            <th class="col-sm-4">4 columns wide</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>123</td>
            <td>456</td>
            <td>789</td>
        </tr>
    </tbody>
</table>
</div>

1
作为此问题的附录:如果您有很长的内容(例如很长的URL)来显示bootstrap 4表,即使使用下面的调整大小的答案也不是一个好的解决方案。使用flex-row或row / col解决方案时,使用溢出和文本换行效果更好
Killerpixler

Answers:


161

更新于2018

确保您的表包含table该类。这是因为Bootstrap 4表是“选择加入”的,因此table必须有意将类添加到表中。

http://codeply.com/go/zJLXypKZxL

Bootstrap 3.x还具有一些CSS来重置表单元,以使它们不会浮动。

table td[class*=col-], table th[class*=col-] {
    position: static;
    display: table-cell;
    float: none;
}

我不知道为什么Bootstrap 4 Alpha并非如此,但是它可能会在最终版本中重新添加。添加此CSS将有助于所有列使用thead..中设置的宽度。

Bootstrap 4 Alpha 2演示


UPDATE(自Bootstrap 4.0.0起)

现在,Bootstrap 4是flexbox,添加时,表格单元将不会采用正确的宽度col-*。一种解决方法是d-inline-block在表格单元格上使用该类,以防止默认的display:flex列。

BS4中的另一个选项是使用sizing utils类来确定宽度...

<thead>
     <tr>
           <th class="w-25">25</th>
           <th class="w-50">50</th>
           <th class="w-25">25</th>
     </tr>
</thead>

Bootstrap 4 Alpha 6演示

最后,您可以d-flex在表格行(tr)和col-*列的网格类别(th,td)上使用...

<table class="table table-bordered">
        <thead>
            <tr class="d-flex">
                <th class="col-3">25%</th>
                <th class="col-3">25%</th>
                <th class="col-6">50%</th>
            </tr>
        </thead>
        <tbody>
            <tr class="d-flex">
                <td class="col-sm-3">..</td>
                <td class="col-sm-3">..</td>
                <td class="col-sm-6">..</td>
            </tr>
        </tbody>
    </table>

Bootstrap 4.0.0(stable)演示

注意:将TR更改为display:flex可以更改边框


实际上,大小不正确。检查一下是否添加了边框,以查看尺寸大小以及在正文中添加行的时间。我把代码放在了问题中
Killerpixler '16

实际上,如果一列中的内容溢出,则您的BS4-A6示例将不起作用,因为其他列未扩展。尝试将一些lorem ipsum粘贴到一列中。
Killerpixler '17

1
您的解决方案有效。就我而言,我需要在tr中添加无
Vimalan Jaya Ganesh

是的w-25,,w-50w-75类可与引导程序4一起使用。谢谢!
olidem '19

26

另一种选择是在表格行上应用flex样式,然后将样式添加col-classes到表格标题/表格数据元素中:

<table>
  <thead>
    <tr class="d-flex">
      <th class="col-3">3 columns wide header</th>
      <th class="col-sm-5">5 columns wide header</th>
      <th class="col-sm-4">4 columns wide header</th>
    </tr>
  </thead>
  <tbody>
    <tr class="d-flex">
      <td class="col-3">3 columns wide content</th>
      <td class="col-sm-5">5 columns wide content</th>
      <td class="col-sm-4">4 columns wide content</th>
    </tr>
  </tbody>
</table>

有效,但vertical-align: middled-flex类上不再起作用。
前夕

垂直对齐确实不适用于flexbox布局。使用align-items: baseline。要了解更多关于Flexbox的,阅读本指南
雅各布面包车林根

10

在看到@florian_korner的帖子之前,我根据自己的需要将其发布了Bootstrap 4.1.1。看起来很相似。

如果您使用sass,则可以将此代码段粘贴到bootstrap包含文件的末尾。看来可以解决Chrome,IE和Edge的问题。似乎并没有破坏Firefox的任何东西。

@mixin make-td-col($size, $columns: $grid-columns) {
    width: percentage($size / $columns);
}

@each $breakpoint in map-keys($grid-breakpoints) {
    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

    @for $i from 1 through $grid-columns {
        td.col#{$infix}-#{$i}, th.col#{$infix}-#{$i} {
            @include make-td-col($i, $grid-columns);
        }
    }
}

或者,如果您只想要编译的CSS实用程序:

td.col-1, th.col-1 {
  width: 8.33333%; }

td.col-2, th.col-2 {
  width: 16.66667%; }

td.col-3, th.col-3 {
  width: 25%; }

td.col-4, th.col-4 {
  width: 33.33333%; }

td.col-5, th.col-5 {
  width: 41.66667%; }

td.col-6, th.col-6 {
  width: 50%; }

td.col-7, th.col-7 {
  width: 58.33333%; }

td.col-8, th.col-8 {
  width: 66.66667%; }

td.col-9, th.col-9 {
  width: 75%; }

td.col-10, th.col-10 {
  width: 83.33333%; }

td.col-11, th.col-11 {
  width: 91.66667%; }

td.col-12, th.col-12 {
  width: 100%; }

td.col-sm-1, th.col-sm-1 {
  width: 8.33333%; }

td.col-sm-2, th.col-sm-2 {
  width: 16.66667%; }

td.col-sm-3, th.col-sm-3 {
  width: 25%; }

td.col-sm-4, th.col-sm-4 {
  width: 33.33333%; }

td.col-sm-5, th.col-sm-5 {
  width: 41.66667%; }

td.col-sm-6, th.col-sm-6 {
  width: 50%; }

td.col-sm-7, th.col-sm-7 {
  width: 58.33333%; }

td.col-sm-8, th.col-sm-8 {
  width: 66.66667%; }

td.col-sm-9, th.col-sm-9 {
  width: 75%; }

td.col-sm-10, th.col-sm-10 {
  width: 83.33333%; }

td.col-sm-11, th.col-sm-11 {
  width: 91.66667%; }

td.col-sm-12, th.col-sm-12 {
  width: 100%; }

td.col-md-1, th.col-md-1 {
  width: 8.33333%; }

td.col-md-2, th.col-md-2 {
  width: 16.66667%; }

td.col-md-3, th.col-md-3 {
  width: 25%; }

td.col-md-4, th.col-md-4 {
  width: 33.33333%; }

td.col-md-5, th.col-md-5 {
  width: 41.66667%; }

td.col-md-6, th.col-md-6 {
  width: 50%; }

td.col-md-7, th.col-md-7 {
  width: 58.33333%; }

td.col-md-8, th.col-md-8 {
  width: 66.66667%; }

td.col-md-9, th.col-md-9 {
  width: 75%; }

td.col-md-10, th.col-md-10 {
  width: 83.33333%; }

td.col-md-11, th.col-md-11 {
  width: 91.66667%; }

td.col-md-12, th.col-md-12 {
  width: 100%; }

td.col-lg-1, th.col-lg-1 {
  width: 8.33333%; }

td.col-lg-2, th.col-lg-2 {
  width: 16.66667%; }

td.col-lg-3, th.col-lg-3 {
  width: 25%; }

td.col-lg-4, th.col-lg-4 {
  width: 33.33333%; }

td.col-lg-5, th.col-lg-5 {
  width: 41.66667%; }

td.col-lg-6, th.col-lg-6 {
  width: 50%; }

td.col-lg-7, th.col-lg-7 {
  width: 58.33333%; }

td.col-lg-8, th.col-lg-8 {
  width: 66.66667%; }

td.col-lg-9, th.col-lg-9 {
  width: 75%; }

td.col-lg-10, th.col-lg-10 {
  width: 83.33333%; }

td.col-lg-11, th.col-lg-11 {
  width: 91.66667%; }

td.col-lg-12, th.col-lg-12 {
  width: 100%; }

td.col-xl-1, th.col-xl-1 {
  width: 8.33333%; }

td.col-xl-2, th.col-xl-2 {
  width: 16.66667%; }

td.col-xl-3, th.col-xl-3 {
  width: 25%; }

td.col-xl-4, th.col-xl-4 {
  width: 33.33333%; }

td.col-xl-5, th.col-xl-5 {
  width: 41.66667%; }

td.col-xl-6, th.col-xl-6 {
  width: 50%; }

td.col-xl-7, th.col-xl-7 {
  width: 58.33333%; }

td.col-xl-8, th.col-xl-8 {
  width: 66.66667%; }

td.col-xl-9, th.col-xl-9 {
  width: 75%; }

td.col-xl-10, th.col-xl-10 {
  width: 83.33333%; }

td.col-xl-11, th.col-xl-11 {
  width: 91.66667%; }

td.col-xl-12, th.col-xl-12 {
  width: 100%; }

10

使用d-flex类效果很好,但是其他一些属性(如vertical-align: middle属性)不再起作用。

我发现很容易确定列大小的最佳方法是width仅在thead单元格中使用带有百分比的属性。

<table class="table">
    <thead>
        <tr>
            <th width="25%">25%</th>
            <th width="25%">25%</th>
            <th width="50%">50%</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>25%</td>
            <td>25%</td>
            <td>50%</td>
        </tr>
    </tbody>
</table>

4
老实说,最简单,最好的解决方案。其他一切对我来说都是惨败。
生物

3
注意使用宽度为属性<TH>现在不支持HTML5
StefanJM

5

免责声明:这个答案可能有点老了。自引导4测试版以来。从那时起,Bootstrap发生了变化。

表列大小类已从此更改

<th class="col-sm-3">3 columns wide</th>

<th class="col-3">3 columns wide</th>

这似乎不适用于设置列宽:codeply.com/go/Utyon2XEB6
Zim


1
另一个问题无关。如我的答案所述,由于BS4 alpha 6 flexbox,列宽无法在表格单元格上使用。
Zim

4

我可以使用Bootstrap 4使用以下代码解决此问题:

<table class="table">
  <tbody>
    <tr class="d-flex">
      <th class="col-3" scope="row">Indicador:</th>
      <td class="col-9">this is my indicator</td>
    </tr>

    <tr class="d-flex">
      <th class="col-3" scope="row">Definición:</th>
      <td class="col-9">This is my definition</td>
    </tr>

  </tbody>
</table>

1

从Alpha 6开始,您可以创建以下sass文件:

@each $breakpoint in map-keys($grid-breakpoints) {
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

  col, td, th {
    @for $i from 1 through $grid-columns {
        &.col#{$infix}-#{$i} {
          flex: none;
          position: initial;
        }
    }

    @include media-breakpoint-up($breakpoint, $grid-breakpoints) {
      @for $i from 1 through $grid-columns {
        &.col#{$infix}-#{$i} {
          width: 100% / $grid-columns * $i;
        }
      }
    }
  }
}

该代码根本不起作用-尝试对其进行调试1.5个小时,但我对sass的了解太弱,无法做到这一点。请下次发布工作示例。
Slowwie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.