Định cỡ cột bảng


103

Trong Bootstrap 3, tôi có thể áp dụng col-sm-xxcho các ththẻ trong theadcột bảng và thay đổi kích thước theo ý muốn. Tuy nhiên điều này không hoạt động trong bootstrap 4. Làm thế nào tôi có thể đạt được thứ như thế này trong 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>

Nhìn vào codeply được cung cấp, nó không có kích thước đúng, đặc biệt nếu bạn thêm một số dữ liệu vào bảng. Xem cách này chạy:

<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
như một phụ lục cho câu hỏi này: nếu bạn có nội dung dài (chẳng hạn như URL rất dài) để hiển thị bảng bootstrap 4 thì không phải là một giải pháp tuyệt vời ngay cả với câu trả lời định cỡ bên dưới. hoặc sử dụng giải pháp flex-row hoặc row / col có xu hướng hoạt động tốt hơn với tính năng tràn và bọc văn bản
Killerpixler

Câu trả lời:


162

Cập nhật 2018

Đảm bảo rằng bảng của bạn bao gồm cả tablelớp. Điều này là do bảng Bootstrap 4 được "chọn tham gia" nên tablelớp phải được thêm vào bảng một cách có chủ ý.

http://codeply.com/go/zJLXypKZxL

Bootstrap 3.x cũng có một số CSS để đặt lại các ô trong bảng để chúng không nổi ..

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

Tôi không biết tại sao đây không phải là Bootstrap 4 alpha, nhưng nó có thể được thêm trở lại trong bản phát hành cuối cùng. Thêm CSS này sẽ giúp tất cả các cột sử dụng độ rộng được đặt trong thead..

Bản trình diễn Bootstrap 4 Alpha 2


CẬP NHẬT (kể từ Bootstrap 4.0.0)

Bây giờ Bootstrap 4 là flexbox, các ô trong bảng sẽ không có chiều rộng chính xác khi thêm col-*. Một cách giải quyết là sử dụng d-inline-blocklớp trên các ô của bảng để ngăn hiển thị mặc định: flex của các cột.

Một tùy chọn khác trong BS4 là sử dụng các lớp utils định cỡ cho chiều rộng ...

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

Bản trình diễn Bootstrap 4 Alpha 6

Cuối cùng, bạn có thể sử dụng d-flextrên các hàng của bảng (tr) và các col-*lớp lưới trên các cột (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>

Bản trình diễn Bootstrap 4.0.0 (ổn định)

Lưu ý: Thay đổi TR thành hiển thị: flex có thể thay đổi đường viền


Trên thực tế, kích thước đó không đúng. Hãy kiểm tra nếu bạn thêm một số đường viền để xem cách định cỡ và khi bạn thêm một hàng vào phần nội dung. Tôi đặt mã lên trong câu hỏi
Killerpixler

Trên thực tế, ví dụ BS4-A6 của bạn không hoạt động nếu bạn có nội dung tràn trong một cột vì các cột khác không được mở rộng. Hãy thử dán một số ipsum lorem vào một cột.
Killerpixler

1
Giải pháp của bạn đã hiệu quả. Trong trường hợp của tôi, tôi cần thêm không có máng xối vào tr để tránh đệm tiêu cực jsfiddle.net/Vimalan/xhvdcasn
Vimalan Jaya Ganesh

Có, w-25, w-50, và w-75các lớp làm việc với bootstrap 4. Cảm ơn!
olidem,

26

Một tùy chọn khác là áp dụng kiểu flex ở hàng bảng và thêm col-classesphần tử dữ liệu bảng / tiêu đề bảng vào:

<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
Hoạt động nhưng vertical-align: middlekhông hoạt động nữa với d-flexlớp.
Đêm

Căn chỉnh dọc thực sự không hoạt động trên bố cục flexbox. Sử dụng align-items: baseline. Để tìm hiểu thêm về flexbox, đọc hướng dẫn
Jacob van Lingen

12

Sử dụng d-flexlớp hoạt động tốt nhưng một số thuộc tính khác không hoạt động nữa nhưvertical-align: middle tính.

Cách tốt nhất mà tôi tìm thấy để định kích thước cột rất dễ dàng là sử dụng widththuộc tính chỉ có tỷ lệ phần trăm trong 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>

5
Đơn giản nhất và giải pháp tốt nhất, trung thực. Mọi thứ khác đều thất bại thảm hại đối với tôi.
Creature

3
Lưu ý Sử dụng thuộc tính chiều rộng cho <th> hiện không được hỗ trợ trong HTML5
StefanJM

10

Tôi đã hack cái này để phát hành Bootstrap 4.1.1 theo nhu cầu của mình trước khi tôi thấy bài đăng của @ florian_korner. Trông rất giống nhau.

Nếu bạn sử dụng sass, bạn có thể dán đoạn mã này vào cuối gói khởi động của bạn. Nó dường như khắc phục sự cố cho chrome, IE và edge. Dường như không phá vỡ bất cứ điều gì trong 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);
        }
    }
}

hoặc nếu bạn chỉ muốn tiện ích css đã biên dịch:

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

Tuyên bố từ chối trách nhiệm: Câu trả lời này có thể hơi cũ. Kể từ phiên bản beta bootstrap 4. Bootstrap đã thay đổi kể từ đó.

Loại kích thước cột bảng đã được thay đổi từ cái này

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

đến

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

Điều này dường như không hoạt động trong việc đặt độ rộng cột: codeply.com/go/Utyon2XEB6
Zim


1
Câu hỏi kia là không liên quan. Chiều rộng của cột không hoạt động trên các ô của bảng vì flexbox BS4 alpha 6 như được giải thích trong câu trả lời của tôi.
Zim

4

Tôi có thể giải quyết sự cố này bằng cách sử dụng mã sau bằng 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

Kể từ Alpha 6, bạn có thể tạo tệp sass sau:

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

mã này hoàn toàn không hoạt động - đã cố gắng gỡ lỗi nó trong 1,5 giờ nhưng kiến ​​thức của tôi về sass quá yếu để làm điều đó. Xin vui lòng đăng các ví dụ làm việc thời gian tới.
Slowwie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.