Как установить минимальную ширину ячеек таблицы, кроме последнего столбца?
у меня есть таблица с шириной 100%. Если я поставлю <td>s в нем, они получают распространение с равными столбцами длины. Тем не менее, я хочу, чтобы все столбцы, кроме последнего, имели как можно меньшую ширину, без переноса текста.
то, что я сделал сначала, было то, что я установил width="1px" во всех <td>s кроме последнего (хотя и устарел, но 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%.
Примечание: я нашел это, но он по-прежнему дает мне то же самое, что и последняя таблица.
6 ответов:
это работает в 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% }
td:not(:last-child){ white-space: nowrap; } td:last-child{ width: 100%; }используя приведенный выше код, последняя ячейка таблицы будет стараться быть как можно больше, и вы предотвратите обертывание тех, которые были до этого. Это делает то же самое, что и другие ответы, но более эффективно.
немного другая тема, но, возможно, это помогает кому-то, кто натыкается на этот вопрос, как я.
(Я только что видел комментарий Campbeln, который предлагает именно это после написания моего ответа ниже, так что это в основном подробное объяснение его комментария)у меня была проблема наоборот: я хотел установить один столбец таблицы на минимальную ширину, не разбивая его на пустое пространство (последний столбец в следующем примере), но ширина другого должна быть динамической (включая разрывы строк):
----------------------------------------------------------------------------------- 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>
вы можете установить фиксированную ширину, поместив
divбирка внутриtdtable { 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>
Если вам нужно несколько строк текста в ячейке таблицы.
не используйте
white-space: nowrapиспользоватьwhite-space: pre;вместо.в ячейке таблицы избегайте любого формата кода, такого как новые строки и отступы (пробел), и используйте
<br>для установки новой строки/строки текста. Вот так:<td>element1<br><strong>second row</strong></td>
Comments