Как установить фиксированную ширину для <td>?

514

Простая схема:

  <tr class="something">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>

Мне нужно установить фиксированную ширину для <td>. Я пробовал:

tr.something {
  td {
    width: 90px;
  }
}

Также

td.something {
  width: 90px;
}

за

<td class="something">B</td>

И даже

<td style="width: 90px;">B</td>

Но ширина <td>все та же.

user984621
источник
1
Я только что попробовал, и это работает - возможно, проблема в другом. Что Firebug говорит вам об элементе?
Rockbot
На этом сайте мужчина рассказывает об этой теме с помощью видео. Это так ясно.
egemen
используйте, style="width: 1% !important;"чтобы сделать ширину такой же длинной, как самое длинное слово в столбце, это полезно для первого столбца ID / #. Протестировано в Chrome (для настольных и мобильных), Opera (для настольных компьютеров), IE (для настольных компьютеров), Edge (для настольных компьютеров), Firefox (для настольных компьютеров)
Винса

Ответы:

1085

Для Bootstrap 4.0:

В Bootstrap 4.0.0 вы не можете использовать col-*классы надежно (работает в Firefox, но не в Chrome). Вам нужно использовать ответ OhadR :

<tr>
  <th style="width: 16.66%">Col 1</th>
  <th style="width: 25%">Col 2</th>
  <th style="width: 50%">Col 4</th>
  <th style="width:  8.33%">Col 5</th>
</tr>

Для Bootstrap 3.0:

С помощью Twitter начальной загрузки 3 используйте: class="col-md-*"где * - количество столбцов ширины.

<tr class="something">
    <td class="col-md-2">A</td>
    <td class="col-md-3">B</td>
    <td class="col-md-6">C</td>
    <td class="col-md-1">D</td>
</tr>

Для Bootstrap 2.0:

С помощью Twitter начальной загрузки 2 используйте: class="span*"где * - количество столбцов ширины.

<tr class="something">
    <td class="span2">A</td>
    <td class="span3">B</td>
    <td class="span6">C</td>
    <td class="span1">D</td>
</tr>

** Если у вас есть <th>элементы, установите ширину там, а не на <td>элементы.

Пауло
источник
79
Что произойдет, если у вас более 12 столбцов?
ClearCloud8
33
Вы можете применить это только в <head> в каждом теге <th>, и все строки будут совпадать
Диего Фернандо Мурильо Валенси
7
Есть ли документация по этому поводу на сайте Bootstrap?
Луис Перес
26
Это работает, но его нет на сайте начальной загрузки, потому что эти классы col- * не предназначены для такого использования. Они предназначены для использования в адаптивных загрузочных сетках. Если вам нравится то, что они делают, подумайте о том, чтобы посмотреть на них и скопировать их, чтобы создать свой собственный CSS.
DustinA
1
Кроме того, вместо того, чтобы устанавливать класс для строки доступа, мы можем просто установить его один раз для заголовка <th>, а остальное позаботится автоматически!
Dopplesoldner
133

У меня возникла та же проблема, я исправил таблицу, а затем указал ширину ТД. Если у вас есть то, что вы можете сделать это.

table {
    table-layout: fixed;
    word-wrap: break-word;
}

Шаблон:

<td style="width:10%">content</td>

Пожалуйста, используйте CSS для структурирования любых макетов.

DDDD
источник
Это замечательно, но в качестве дополнения используйте тег classв tdтеге вместо непосредственного применения стиля
Рамзес
1
Это работает, спасибо лучше всего лишь для того, чтобы увеличить ширину th<th style="width: 25%;"></th>
лайка
Спасибо! Я установил класс col-md-x для Bootstrap 3, но он не сработал. Установка макета таблицы на «фиксированный» решает мою проблему.
Maurisrx
Это работает. Ключ является table-layout: fixed. Это необходимо, потому что многие шаблоны, созданные с помощью BS4, применяют flex ко всему, включая таблицы.
Иван
73

Вместо применения col-md-*классов к каждому tdв строке вы можете создать colgroupи применить классы к colтегу.

    <table class="table table-striped">
        <colgroup>
            <col class="col-md-4">
            <col class="col-md-7">
        </colgroup>
        <tbody>
        <tr>
            <td>Title</td>
            <td>Long Value</td>
        </tr>
        </tbody>
    </table>

Демо здесь

stormwild
источник
1
Я предпочитаю это, но, похоже, это не влияет на мой случай, ширина столбца не увеличивается на col-md- *
Osify
Кстати, мне нравится это решение, почему кто-то вынужден использовать классы col-md- *, а не col-lg- *, col-sm- * или col-xs- *?
LucioB
1
@LucioB вы можете использовать все, что захотите, и даже использовать несколько из них по столбцам (например <col class="col-md-4 col-sm-6">, ширина экрана будет 33%, для экрана среднего размера - 50%)
VDarricau
1
Colgroup не работает в Chrome. (Bootstrap v4.1). Для единообразия между браузерами используйте% width для элементов <td>.
AnkitK
57

Надеюсь, этот поможет кому-то:

<table class="table">
  <thead>
    <tr>
      <th style="width: 30%">Col 1</th>
      <th style="width: 20%">Col 2</th>
      <th style="width: 10%">Col 3</th>
      <th style="width: 30%">Col 4</th>
      <th style="width: 10%">Col 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Val 1</td>
      <td>Val 2</td>
      <td>Val 3</td>
      <td>Val 4</td>
      <td>Val 5</td>
    </tr>
  </tbody>
</table>

https://github.com/twbs/bootstrap/issues/863

OhadR
источник
1
Самый простой ответ для использования
GavinBelson
54

Если вы используете <table class="table">на своей таблице, класс таблицы Bootstrap добавляет ширину таблицы 100%. Вам нужно изменить ширину на авто.

Кроме того, если первая строка вашей таблицы является строкой заголовка, вам может потребоваться добавить ширину к th, а не к td.

meobyte
источник
1
В качестве дополнения к Bootstrap 3 вам также необходимо установить для свойства пробела значение « thnormal», так как оно в настоящее время является переносом, поскольку такие заголовки не будут ломаться.
Саммайе
41

В моем случае я смог решить эту проблему, используя min-width: 100pxвместо width: 100pxячеек thили td.

.table td, .table th {
    min-width: 100px;
}
ThiagoPXP
источник
13
Это, возможно, сохранило то, что осталось от моего здравомыслия.
Джоэл
Да! это устанавливает, ну, минимальную ширину для столбца в адаптивной таблице. Спасибо.
О. Джонс
1
это сработало лучше, чем ответ на вопрос, спасибо!
Израиль
38

Для Bootstrap 4 вы можете просто использовать помощник класса:

<table class="table">
  <thead>
    <tr>
      <td class="w-25">Col 1</td>
      <td class="w-25">Col 2</td>
      <td class="w-25">Col 3</td>
      <td class="w-25">Col 4</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      ...
ЧАН
источник
5
Это подходит для моего случая использования. Спасибо!
Тонни
16
Важно отметить, что единственными параметрами w- * являются: .w-25, .w-50, .w-75, .w-100, .w-autoтак что, если вы хотите что-то еще, скажем, w-10вам нужно будет добавить .w-10 { width: 10% !important; }в ваш локализованный файл CSS.
Абела
10

Попробуй это -

<style>
 table { table-layout: fixed; }
 table th, table td { overflow: hidden; }
</style>
Рохит Сутар
источник
3
Это единственный, который работает из всех других ответов.
0bserver07
Я также добавил, text-overflow: ellipsisчтобы убедиться, что обрезанный текст очевиден
daysdev
@ Observer07 Действительно
TheRandomGuy
9

Bootstrap 4.0

На Bootstrap 4.0 мы должны объявить строки таблицы как flex-box, добавив класс d-flex, а также отбросить суффиксы xs, md, чтобы Bootstrap автоматически выводил их из области просмотра.

Так будет выглядеть следующее:

<table class="table">
    <thead>
        <tr class="d-flex">
            <th class="col-2"> Student No. </th>
            <th class="col-7"> Description </th>
            <th class="col-3"> Amount </th>
        </tr>
    </thead>

    <tbody>
        <tr class="d-flex">
            <td class="col-2">test</td>
            <td class="col-7">Name here</td>
            <td class="col-3">Amount Here </td>
        </tr>
</table>

Надеюсь, что это будет полезно для кого-то еще там!

Ура!

Рандика Вишман
источник
7

Это комбинированное решение работало для меня, я хотел, чтобы столбцы равной ширины

<style type="text/css">

    table {
        table-layout: fixed;
        word-wrap: break-word;
    }

        table th, table td {
            overflow: hidden;
        }

</style>

Результат: -

введите описание изображения здесь

Хите саху
источник
3

Хорошо, я только что выяснил, в чем проблема - в Bootstrap widthдля selectэлемента задано значение по умолчанию , поэтому решение таково:

tr. something {
  td {
    select {
      width: 90px;
    }
  }
}

Все остальное не работает у меня.

user984621
источник
2

Трудно судить без контекста страницы HTML или остальной части вашего CSS. Может быть множество причин, по которым ваше правило CSS не влияет на элемент td.

Вы пробовали более конкретные селекторы CSS, такие как

tr.somethingontrlevel td.something {
  width: 90px;
}

Это позволяет избежать переопределения вашего CSS более конкретным правилом из начальной загрузки CSS.

(кстати, в вашем встроенном образце css с атрибутом style вы указали ширину с ошибкой - это может объяснить, почему эта попытка не удалась!)

Дэвид Хейл
источник
2

Некоторое время я боролся с этой проблемой, так что на всякий случай, когда кто-то совершает ту же глупую ошибку, что и я ... Внутри у <td>меня был элемент со white-space:preстилем. Это отбросило все мои трюки с таблицами / tr / td. Когда я удалил этот стиль, внезапно весь мой текст был красиво отформатирован внутри td.

Таким образом, всегда проверяйте основной контейнер (например, tableили td), но также всегда проверяйте, не отменяете ли вы свой красивый код где-то глубже :)

Микк
источник
1

Используйте d-flex вместо строки для "tr" в Bootstrap 4

Дело в том, что класс "row" занимает больше ширины, чем родительский контейнер, что создает проблемы.

<table class="table">
  <tbody>
    <tr class="d-flex">
      <td class="col-sm-8">Hello</td>
      <td class="col-sm-4">World</td>
    </tr>
    <tr class="d-flex">
      <td class="col-sm-8">8 columns</td>
      <td class="col-sm-4">4 columns</td>
    </tr>
  </tbody>
</table>

Усман Анвар
источник
Я имел в виду «ряд» вместо «tr». Как класс строки идет с желобами на обоих концах. Или, если вы не хотите использовать класс row, просто добавьте класс no-gutters.
Усман Анвар
1

В bootstarp 4 вы можете использовать rowи col-*в таблице, я использую его, как показано ниже

<table class="table">
    <thead>
        <tr class="row">
            <th class="col-sm-3">3 row</th>
            <th class="col-sm-4">4 row</th>
            <th class="col-sm-5">5 row</th>
        </tr>
    </thead>
    <tbody>
        <tr class="row">
            <td class="col-sm-3">some text</td>
            <td class="col-sm-4">some text</td>
            <td class="col-sm-5">some text</td>
        </tr>
    </tbody>
</table>
Liam
источник
1

Вот как я часто это делаю, когда мне не приходится иметь дело с IE

    <tr>
      <th scope="col" style="width: calc(1 * 100% / 12)">#</th>
      <th scope="col" style="width: calc(4 * 100% / 12)">Website</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Username</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Password</th>
      <th scope="col" style="width: calc(1 * 100% / 12)">Action</th>
    </tr>

Таким образом, вы можете иметь знакомую сетку из 12 столбцов.

vothaison
источник
0

Ничто из этого не работает для меня, и у меня есть много столбцов в datatable, чтобы класс% или sm равнялся разметке 12 элементов при начальной загрузке.

Я работал с таблицами данных Angular 5 и Bootstrap 4, и у меня в таблице много столбцов. Решение для меня было в том, THчтобы добавить DIVэлемент с определенной шириной. Например, для столбцов «Имя человека» и «Дата события» мне нужна конкретная ширина, затем поместите divв заголовок столбца, вся ширина столбца затем изменится на ширину, указанную в div на TH:

<table datatable [dtOptions]="dtOptions" *ngIf="listData" class="table table-hover table-sm table-bordered text-center display" width="100%">
    <thead class="thead-dark">
        <tr>
            <th scope="col">ID </th>
            <th scope="col">Value</th>
            <th scope="col"><div style="width: 600px;">Person Name</div></th>
            <th scope="col"><div style="width: 800px;">Event date</div></th> ...
Аксель Осорио
источник
-1

использовать. что- то без тд или й

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title> 
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">  
  <style>
    .something {
      width: 90px;
      background: red;
    }
  </style>
</head>
<body>

<div class="container">
  <h2>Fixed width column</h2>            
  <table class="table table-bordered">
    <thead>
      <tr>
        <th class="something">Firstname</th>
        <th>Lastname</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>john@example.com</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@example.com</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@example.com</td>
      </tr>
    </tbody>
  </table>
</div>

</body>
</html>

геккон
источник
-2

<div class="row" id="divcashgap" style="display:none">
                <div class="col-md-12">
                    <div class="table-responsive">
                        <table class="table table-default" id="gvcashgapp">
                            <thead>
                                <tr>
                                    <th class="1">BranchCode</th>
                                    <th class="2"><a>TC</a></th>
                                    <th class="3">VourNo</th>
                                    <th class="4"  style="min-width:120px;">VourDate</th>
                                    <th class="5" style="min-width:120px;">RCPT Date</th>
                                    <th class="6">RCPT No</th>
                                    <th class="7"><a>PIS No</a></th>
                                    <th class="8" style="min-width:160px;">RCPT Ammount</th>
                                    <th class="9">Agging</th>
                                    <th class="10" style="min-width:160px;">DesPosition Days</th>
                                    <th class="11" style="min-width:150px;">Bank Credit Date</th>
                                    <th class="12">Comments</th>
                                    <th class="13" style="min-width:150px;">BAC Comment</th>
                                    <th class="14">BAC Ramark</th>
                                    <th class="15" style="min-width:150px;">RAC Comment</th>
                                    <th class="16">RAC Ramark</th>
                                    <th class="17" style="min-width:120px;">Update Status</th>
                                </tr>
                            </thead>
                            <tbody id="tbdCashGapp"></tbody>
                        </table>
                    </div>
                </div>
            </div>

user10861319
источник
Добавьте немного объяснения тоже.
Акаш Дубей
Этот ответ в лучшем случае сбивает с толку. Классы странные, необязательные идентификаторы, без объяснения причин.
GotBatteries