Как установить минимальную ширину ячейки таблицы, кроме последнего столбца? - PullRequest
100 голосов
/ 22 ноября 2011

У меня есть таблица с шириной 100%. Если я добавлю <td> s, они получат столбцы равной длины. Однако я хочу, чтобы все столбцы, кроме последнего, имели как можно меньшую ширину без переноса текста.

Сначала я установил width="1px" во всех <td> с, кроме последнего (хотя и устарел, но style="width:1px" не имел никакого эффекта), что работало нормально, пока я не получил многословные данные колонка. В этом случае, чтобы длина была как можно меньше, я завернул текст.

Позвольте мне продемонстрировать. Представьте себе эту таблицу:

---------------------------------------------------------------------------------
element1 | data      | junk here   | last column
---------------------------------------------------------------------------------
elem     | more data | other stuff | again, last column
---------------------------------------------------------------------------------
more     | of        | these       | rows
---------------------------------------------------------------------------------

Независимо от того, что я пытаюсь, я получаю следующее:

---------------------------------------------------------------------------------
element1         | data             | junk here        | last column
---------------------------------------------------------------------------------
elem             | more data        | other stuff      | again, last column
---------------------------------------------------------------------------------
more             | of               | these            | rows
---------------------------------------------------------------------------------

или (хотя я установил style="whitespace-wrap:nowrap") это:

---------------------------------------------------------------------------------
         |      | junk  | last
element1 | data |       | 
         |      | here  | column
---------------------------------------------------------------------------------
         | more | other | again,
elem     |      |       | last
         | data | stuff | column
---------------------------------------------------------------------------------
more     | of   | these | rows
---------------------------------------------------------------------------------

Я хочу получить таблицу, которую я представил первым. Как мне этого добиться? (Я бы предпочел придерживаться стандарта и использовать CSS. Честно говоря, мне все равно, если бы IE не реализовал часть стандарта) *

Дополнительные пояснения: мне нужно, чтобы столбцы были как можно короче, без переноса слов (последний столбец должен быть настолько большим, насколько это необходимо, чтобы ширина таблицы фактически достигала 100%). Если вы знаете LaTeX, то я хочу, чтобы таблицы в LaTeX естественным образом отображались при установке их ширины на 100%.

Примечание: я нашел это , но оно все равно дает мне то же, что и в предыдущей таблице.

Ответы [ 7 ]

87 голосов
/ 22 ноября 2011

Это работает в Google Chrome, по крайней мере.( jsFiddle )

HTML:

<table>
    <tr>
        <td class="shrink">element1</td>
        <td class="shrink">data</td>
        <td class="shrink">junk here</td>
        <td class="expand">last column</td>
    </tr>
    <tr>
        <td class="shrink">elem</td>
        <td class="shrink">more data</td>
        <td class="shrink">other stuff</td>
        <td class="expand">again, last column</td>
    </tr>
    <tr>
        <td class="shrink">more</td>
        <td class="shrink">of </td>
        <td class="shrink">these</td>
        <td class="expand">rows</td>
    </tr>
</table>

CSS:

table {
    border: 1px solid green;
    border-collapse: collapse;
    width:100%;
}

table td {
    border: 1px solid green;
}

table td.shrink {
    white-space:nowrap
}
table td.expand {
    width: 99%
}
48 голосов
/ 22 ноября 2011

whitespace-wrap: nowrap недействительно css. Это white-space: nowrap вы ищете.

33 голосов
/ 24 мая 2015
td:not(:last-child){
    white-space: nowrap;
}

td:last-child{
    width: 100%;
}

Используя приведенный выше код, последняя ячейка таблицы будет пытаться быть максимально большой, и вы предотвратите ее перенос из нее. Это делает то же самое, что и другие ответы, но гораздо эффективнее.

7 голосов
/ 11 ноября 2015

Немного другая тема, но, возможно, это поможет кому-то, кто наткнется на этот вопрос, как я.
(Я только что увидел комментарий Кэмпбелна, который предлагает именно это после написания моего ответа ниже, так что это в основномподробное объяснение его комментария)

У меня была проблема наоборот: я хотел установить один столбец таблицы на минимально возможную ширину, не разбивая его на пробел (последний столбец вследующий пример), но ширина другого должна быть динамической (включая разрывы строк):

-----------------------------------------------------------------------------------
element1 | data      | junk here which can   | last column, minimum width, one line
                       span multiple lines
-----------------------------------------------------------------------------------
elem     | more data | other stuff           | again, last column
-----------------------------------------------------------------------------------
more     | of        | these                 | rows
-----------------------------------------------------------------------------------

Простое решение:

HTML

<table>
  <tr>
    <td>element1</td>
    <td>data</td>
    <td>junk here which can span multiple lines</td>
    <td class="shrink">last column, minimum width, one line</td>
  </tr>
  <tr>
    <td>elem</td>
    <td>more data</td>
    <td>other stuff</td>
    <td class="shrink">again, last column</td>
  </tr>
  <tr>
    <td>more</td>
    <td>of</td>
    <td>these</td>
    <td class="shrink">rows</td>
  </tr>
</table>

CSS

td.shrink {
  white-space: nowrap;
  width: 1px;
}

Столбцы с классом shrink расширяются только до минимальной ширины, но другие остаются динамичными.Это работает, потому что width из td автоматически расширяется для размещения всего содержимого.

Пример фрагмента

table {
  width: 100%;
}

td {
  padding: 10px;
}

td.shrink {
  white-space: nowrap;
  width: 1px;
}
<table>
  <tr>
    <td>element1</td>
    <td>data</td>
    <td>junk here which can span multiple lines</td>
    <td class="shrink">last column, minimum width, one line</td>
  </tr>
  <tr>
    <td>elem</td>
    <td>more data</td>
    <td>other stuff</td>
    <td class="shrink">again, last column</td>
  </tr>
  <tr>
    <td>more</td>
    <td>of</td>
    <td>these</td>
    <td class="shrink">rows</td>
  </tr>
</table>
3 голосов
/ 31 июля 2017

Вы можете установить фиксированную ширину, поместив тег div внутри td

table {
    border: 1px solid green;
    border-collapse: collapse;
    width:100%;
}

table td {
    border: 1px solid green;
}

table td:nth-child(1) {
  width: 1%;
}

table td:nth-child(1) div {
  width: 300px;
}
<table>
    <tr>
        <td><div>element1 element1 element1 element1 element1 element1 </div></td>
        <td>data</td>
        <td>junk here</td>
        <td>last column</td>
    </tr>
    <tr>
        <td><div>element2</div></td>
        <td>data</td>
        <td>junk here</td>
        <td>last column</td>
    </tr>
    <tr>
        <td><div>element3</div></td>
        <td>data</td>
        <td>junk here</td>
        <td>last column</td>
    </tr>
</table>

https://jsfiddle.net/8bf17o1v/

1 голос
/ 22 июня 2016

Если вам нужно несколько строк текста в ячейке таблицы.

Не используйте white-space: nowrap, вместо этого используйте white-space: pre;.

В ячейке таблицы избегайте любого формата коданапример, новые строки и отступы (пробел) и используйте <br> для установки новой текстовой строки / строки.Как это:

<td>element1<br><strong>second row</strong></td>

Демонстрация на CodePen

0 голосов
/ 13 февраля 2019

Комбинация white-space: nowrap или white-space: pre с min-width: <size> сделает работу.width: <size> само по себе недостаточно, чтобы удержать стол от сжатия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...