テーブルの列のサイズ


103

ではBootstrap 3、テーブル列のタグに適用col-sm-xxしてサイズを変更できます。ただし、これはブートストラップ4では機能しません。ブートストラップ4でこのようなことを実現するにはどうすればよいですか?ththead

<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など)がある場合、以下のサイズの回答があっても、4つのテーブルは優れたソリューションではありません。flex-rowまたはrow / colソリューションのいずれかを使用すると、オーバーフローとテキストラップでより適切に機能する傾向があります
Killerpixler 2017年

回答:


162

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

これがBootstrap4 alphaでない理由はわかりませんが、最終リリースで追加される可能性があります。このCSSを追加すると、すべての列がthead。で設定された幅を使用できるようになります。

Bootstrap 4 Alpha2デモ


更新(Bootstrap 4.0.0以降)

Bootstrap 4がflexboxになったので、を追加するときにテーブルセルは正しい幅を想定しませんcol-*。回避策はd-inline-block、テーブルセルでクラスを使用して、デフォルトのdisplay:flex ofcolumnsを防ぐことです。

BS4のもう1つのオプションは、幅にサイズ設定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 Alpha6デモ

最後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(安定版)デモ

注:TRをdisplay:flexに変更すると、境界線が変更される可能性があります


実際、それは適切なサイズではありません。いくつかの境界線を追加してサイズ設定がどのようになっているのか、またいつ本文に行を追加するのかを確認してください。私は質問にコードを載せました
Killerpixler 2016年

実際、BS4-A6の例は、他の列が拡張されていないため、列にコンテンツがオーバーフローしている場合は機能しません。1つの列にいくつかのloremipsumを貼り付けてみてください。
Killerpixler 2017

1
あなたの解決策はうまくいきました。私の場合、ネガティブパディングを回避するためにtrにガター
Vimalan Jaya Ganesh

はい、w-25w-50、およびw-75クラスがブートストラップで4おかげで仕事します!
olidem

26

別のオプションは、テーブル行にフレックススタイルを適用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>

1
作品しかしvertical-align: middleでもう動作しないd-flexクラス。
前夜

垂直方向の配置は、フレックスボックスのレイアウトでは実際には機能しません。を使用しalign-items: baselineます。フレックスボックスの詳細については、このガイドをお
Jacob

11

d-flexクラスの使用はうまく機能しますが、他のいくつかの属性はvertical-align: middleプロパティのように機能しなくなります。

列のサイズを非常に簡単に設定するための最良の方法はwidththeadセル内でのみパーセンテージで属性を使用することです。

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

5
正直なところ、最も単純で最良の解決策です。他のすべては私にとって惨めに失敗しました。
クリーチャー

3
<th>にwidth属性を使用することはHTML5では
StefanJM

10

@florian_kornerの投稿を見る前に、必要に応じてBootstrap4.1.1をリリースするためにこれをハックしました。非常によく似ています。

sassを使用する場合は、このスニペットをブートストラップインクルードの最後に貼り付けることができます。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%; }

5

免責事項:この回答は少し古い可能性があります。ブートストラップ4ベータ以降。それ以来、ブートストラップは変更されました。

テーブルの列サイズクラスがこれから変更されました

<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が原因で、列の幅はテーブルセルでは機能しません。
ジンバブエ2017

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に関する私の知識は弱すぎてそれを行うことができません。Plzは次回作業例を投稿します。
Slowwie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.