ขนาดคอลัมน์ตาราง


104

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

ดูจาก codeply ที่มีขนาดไม่เหมาะสมโดยเฉพาะอย่างยิ่งถ้าคุณเพิ่มข้อมูลบางอย่างลงในตาราง ดูว่าสิ่งนี้ทำงานอย่างไร:

<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 มีแนวโน้มที่จะทำงานได้ดีขึ้นกับ overflow และ text-wrap
Killerpixler

คำตอบ:


164

อัปเดต 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 Demo


อัปเดต (ณ Bootstrap 4.0.0)

ตอนนี้เงินทุน 4 เป็น flexbox col-*เซลล์ตารางจะไม่ถือว่ามีความกว้างที่ถูกต้องเมื่อมีการเพิ่ม วิธีแก้ปัญหาคือการใช้ไฟล์d-inline-blockคลาสบนเซลล์ตารางเพื่อป้องกันการแสดงผลเริ่มต้น: ดิ้นของคอลัมน์

อีกทางเลือกหนึ่งใน BS4 คือการใช้คลาสการปรับขนาดสำหรับความกว้าง ...

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

สุดท้ายคุณสามารถใช้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 เป็นจอแสดงผล: flex สามารถเปลี่ยนเส้นขอบได้


ที่จริงขนาดไม่ถูกต้อง ตรวจสอบว่าคุณเพิ่มเส้นขอบเพื่อดูว่าการปรับขนาดเป็นอย่างไรและเมื่อคุณเพิ่มแถวลงในเนื้อหา ฉันใส่รหัสในคำถาม
Killerpixler

จริงๆแล้วตัวอย่าง BS4-A6 ของคุณใช้ไม่ได้หากคุณมีเนื้อหาล้นในคอลัมน์เนื่องจากคอลัมน์อื่น ๆ ไม่ได้ขยายออกไป ลองวาง lorem ipsum ลงในคอลัมน์เดียว
Killerpixler

1
โซลูชันของคุณได้ผล ในกรณีของฉันฉันจำเป็นต้องเพิ่ม no-gutters ใน tr เพื่อหลีกเลี่ยงช่องว่างเชิงลบjsfiddle.net/Vimalan/xhvdcasn
Vimalan Jaya Ganesh

ใช่w-25, w-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คลาสอีกต่อไป
อีฟ

การจัดตำแหน่งแนวตั้งใช้ไม่ได้กับเค้าโครง Flexbox ใช้align-items: baseline. หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ flexbox โปรดอ่านคู่มือ
Jacob van Lingen

13

การใช้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>

5
ทางออกที่ง่ายที่สุดและดีที่สุดโดยสุจริต ทุกสิ่งทุกอย่างล้มเหลวอย่างน่าสังเวชสำหรับฉัน
สิ่งมีชีวิต

3
หมายเหตุขณะนี้ไม่รองรับการใช้แอตทริบิวต์ width สำหรับ <th> ในHTML5
StefanJM

11

ฉันแฮ็คสิ่งนี้เพื่อปล่อย Bootstrap 4.1.1 ตามความต้องการของฉันก่อนที่ฉันจะเห็นโพสต์ของ @ florian_korner หน้าตาคล้ายกันมาก

หากคุณใช้ 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%; }

5

คำเตือน: คำตอบนี้อาจจะเก่าไปหน่อย ตั้งแต่ bootstrap 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.