Tablo sütun boyutlandırma


104

In Bootstrap 3ben geçerli olabilir, col-sm-xxhiç thde etiketleri theadve istediği anda tablo sütunları yeniden boyutlandırma. Ancak bu bootstrap 4'te çalışmaz. Bootstrap 4'te böyle bir şeyi nasıl başarabilirim?

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

Sağlanan kod tabakasına bakıldığında, özellikle tabloya bazı veriler eklerseniz, düzgün boyutlandırılamaz. Bunun nasıl çalıştığını görün:

<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
bu soruya ek olarak: önyükleme 4 tablolarını görüntülemek için uzun içeriğiniz (çok uzun URL'ler gibi) varsa, aşağıdaki boyutlandırma yanıtıyla bile harika bir çözüm değildir. flex-row veya row / col çözümü kullanmak, taşma ve metin sarma ile daha iyi çalışma eğilimindedir
Killerpixler

Yanıtlar:


162

Güncellenmiş 2018

Masanızın tablesınıfı içerdiğinden emin olun . Bunun nedeni, Bootstrap 4 tablolarının "dahil" olması ve dolayısıyla tablesınıfın tabloya kasıtlı olarak eklenmesi gerektiğidir.

http://codeply.com/go/zJLXypKZxL

Bootstrap 3.x ayrıca tablo hücrelerini yüzmemeleri için sıfırlamak için biraz CSS'ye sahipti.

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

Bunun neden Bootstrap 4 alpha olmadığını bilmiyorum, ancak son sürümde geri eklenebilir. Bu CSS'yi eklemek, tüm sütunların thead.. içinde ayarlanan genişlikleri kullanmasına yardımcı olacaktır .

Bootstrap 4 Alpha 2 Demosu


GÜNCELLEME (Bootstrap 4.0.0 itibariyle)

Artık Bootstrap 4 flexbox olduğuna göre, tablo hücreleri eklerken doğru genişliği almayacaktır col-*. Geçici bir çözüm, d-inline-blockvarsayılan görüntü olan sütunların esnekliğini önlemek için tablo hücrelerinde sınıfı kullanmaktır .

BS4'teki diğer bir seçenek, genişlik için boyutlandırma araçları sınıflarını kullanmaktır ...

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

Son olarak, d-flextablo satırlarında (tr) ve col-*sütunlarda (th, td) grid sınıflarını kullanabilirsiniz ...

<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 (kararlı) Demosu

Not: TR'yi görüntülenecek şekilde değiştirme : flex , sınırları değiştirebilir


Aslında bu doğru boyutta değil. Boyutlandırmanın nasıl olduğunu ve gövdeye bir satır eklediğinizde görmek için bazı kenarlıklar ekleyip eklemediğinizi kontrol edin. Kodu soruya
ekledim

Aslında BS4-A6 örneğiniz, diğer sütunlar genişletilmediğinden bir sütunda taşan içeriğiniz varsa çalışmaz. Bir sütuna biraz lorem ipsum yapıştırmayı deneyin.
Killerpixler

1
Çözümünüz işe yaradı. Benim durumumda, negatif dolgudan
Vimalan Jaya Ganesh

Evet, w-25, w-50, ve w-75sınıflar bootstrap ile 4. teşekkürler çalışır!
olidem

26

Diğer bir seçenek de tablo satırına esnek stil uygulamak ve col-classesbunu tablo başlığına / tablo veri öğelerine eklemektir :

<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
Çalışıyor ama vertical-align: middleartık d-flexsınıfla çalışmıyor .
Eve

Dikey hizalama aslında flexbox düzeninde çalışmaz. Kullanın align-items: baseline. Flexbox hakkında daha fazla bilgi edinmek için bu kılavuzu
Jacob van Lingen

13

d-flexSınıfı kullanmak iyi çalışıyor ancak diğer bazı özellikler artık vertical-align: middleözellik gibi çalışmıyor .

Sütunları çok kolay bir şekilde boyutlandırmanın en iyi yolu, widthözniteliği yalnızca theadhücrelerde yüzde ile kullanmaktır .

<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
Dürüst olmak gerekirse, en basit ve en iyi çözüm. Diğer her şey benim için sefil bir şekilde başarısız oldu.
Yaratık

3
Not için genişlik özelliğini kullanarak <th> Şimdi olduğu desteklenmeyen içinde HTML5
StefanJM

10

@ Florian_korner'in gönderisini görmeden önce ihtiyaçlarıma göre Bootstrap 4.1.1'i yayınlamak için bunu hackledim. Çok benzer görünüyor.

Sass kullanıyorsanız, bu pasajı önyükleme içeriğinizin sonuna yapıştırabilirsiniz. Chrome, IE ve edge için sorunu çözüyor gibi görünüyor. Firefox'ta hiçbir şey kırılmıyor gibi görünüyor.

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

veya sadece derlenmiş css yardımcı programını istiyorsanız:

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

Sorumluluk reddi: Bu cevap biraz eski olabilir. Bootstrap 4 beta sürümünden beri. Bootstrap o zamandan beri değişti.

Tablo sütun boyutu sınıfı bundan değiştirildi

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

-e

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

Bu, sütun genişliklerinin ayarlanmasında işe yaramıyor gibi görünüyor: codeply.com/go/Utyon2XEB6
Zim


1
Diğer soru alakasız. Cevabımda açıklandığı gibi BS4 alpha 6 flexbox nedeniyle sütun genişlikleri tablo hücrelerinde çalışmıyor.
Zim

4

Bu sorunu Bootstrap 4 kullanarak aşağıdaki kodu kullanarak çözebilirim:

<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'dan itibaren aşağıdaki sass dosyasını oluşturabilirsiniz:

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

bu kod hiç çalışmıyor - 1.5 saat boyunca hata ayıklamaya çalıştım ama sass bilgim bunu yapmak için çok zayıf. Plz bir dahaki sefere çalışma örneklerini gönderin.
Slowwie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.