Фиксированная ширина ячейки таблицы

175

Многие люди до сих пор используют таблицы для разметки элементов управления, данных и т. Д. Одним из примеров этого является популярная jqGrid. Тем не менее, происходит какое-то волшебство, которое я не могу понять (его таблицы для громкого крика, сколько магии может быть?)

Как можно установить ширину столбца таблицы и подчиниться ей так, как это делает jqGrid !? Если я попытаюсь повторить это, даже если я установлю каждый <td style='width: 20px'>, как только содержимое одной из этих ячеек станет больше 20 пикселей, ячейка расширится!

Есть идеи или идеи?

Джимбо
источник

Ответы:

249

Вы можете попробовать использовать <col>теги управления стилем таблицы для всех строк, но вам нужно будет установить table-layout:fixedстиль для <table>класса css или таблиц и установить overflowстиль для ячеек.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

и это будет ваш CSS

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }
охотник
источник
15
col не будет работать в html5, вместо этого установите ширину отдельного td встроенными классами css или css
Pankaj Phartiyal
10
Принятый ответ не работает, если вы явно не примените ширину для желаемой таблицы. Работает отлично, используете ли вы единицу или процент. Подумал, что я укажу на это, поскольку ответ @ totymedli не набрал ни одного голоса, и я не хотел, чтобы пользователи игнорировали его. Тем не менее, предложение прерывания слова не является необходимым, если только это не то, к чему вы стремитесь.
thebdawk05
Что происходит, когда у вас есть строки только с одним элементом TD, который охватывает несколько столбцов? Используя ваш пример кода, если бы у вас было <TD colspan="3">подряд, было бы 90px?
sab669
Спасибо, это помогло. Для перекрытия данных добавьте это table.fixed td { word-wrap: break-word; }.
Параг Тяги
Предложение о разрыве слов не является обязательным, но оно полезно для остальных пользователей SO и весьма уместно для вопроса, поскольку переполнение содержимого в таблицах фиксированной ширины почти наверняка произойдет в большинстве сценариев.
Эми Пеллегрини
101

Теперь в HTML5 / CSS3 у нас есть лучшее решение проблемы. На мой взгляд, это чисто CSS решение рекомендуется:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

Вам нужно накрыть стол widthдаже в решении преследователя . Иначе это не сработает.
Кроме того, новая функция , которая CSS3 VSync предложил это: word-break:break-all;. Это также разбивает слова без пробелов на несколько строк. Просто измените код следующим образом:

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

Конечный результат

Представленный стол

totymedli
источник
Если вы добавите строку с colspan, это, кажется, нарушит это решение. Любые предложения о том, как использовать это решение с таблицей, которая содержит colspan> 1?
Эрик К
@QuantumDynamix Я исправил это, добавив в качестве первой строки строку без colspans, только все отдельные столбцы с шириной. Затем я спрятал эту строку с 0 высотой, границей: нет, видимостью: скрытой, отступами: 0px и т. Д., Затем вторая строка - первая, которую я хочу видеть, где есть colspans. Первый ряд с отдельными ячейками фиксированной ширины устанавливает ширину.
AaronLS
@totymedli Любые идеи, как заставить мою таблицу взять сумму всех моих столбцов ширины? Моя таблица генерируется динамически, и я не могу заранее рассчитать ширину таблицы, но я не хочу использовать 100%, потому что это растягивает некоторые элементы.
AaronLS
14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}
ajreal
источник
9
Вы уверены, что можете использовать table-layoutэлемент td?
Ник
@ Ник - все работает хорошо. Однако мне нужно добавить свойство min-width и max-width (то же значение, что и width), и тогда оно станет действительно фиксированной шириной.
Денис Хай
11

У меня была одна длинная таблица ячеек td, это заставило стол к краям браузера и выглядело ужасно. Я просто хотел, чтобы этот столбец был только фиксированного размера и разбивал слова, когда он достигал указанной ширины. Так что это хорошо сработало для меня:

<td><div style='width: 150px;'>Text to break here</div></td>

Вам не нужно указывать какой-либо стиль таблицы, tr элементов. Вы также можете использовать переполнение: скрытый; как подсказывают другие ответы, но это приводит к исчезновению лишнего текста.

Тарик
источник
2
Или вы можете использовать максимальную ширину вместо ширины, где это необходимо. Это позволит вам не нарушать текст, если вы не достигнете своего предела ширины. И ячейка таблицы не будет иметь пустого пространства, если ваш текст меньше указанной ширины. <td> <div style = 'max-width: 150px;'> Текст для разрыва здесь </ div> </ td>
Tarik
1
table { 
    table-layout:fixed; width:200px;
}
table tr {
    height: 20px;
}

10х10

user1993774
источник
0

для таблицы ширины FULLSCREEN:

  • ширина стола ДОЛЖНА быть 100%

  • если нужно N столбцов, то это должно быть N + 1

пример для 3 столбцов:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>

Рамиль Гильфанов
источник
-2
table
{
  table-layout:fixed;
}
td,th
{
  width:20px; 
  word-wrap:break-word;
}

: first-child ...: nth-child (1) или ...

xhdix
источник