Автоматическая ширина столбца таблицы CSS

100

Учитывая следующее, как сделать мой последний столбец автоматическим размером с его содержимым? (Последний столбец должен автоматически изменять размер по ширине содержимого. Предположим, у меня есть только 1 элемент li, он должен сжиматься по сравнению с 3 элементами li и т. Д.):

            <table cellspacing="0" cellpadding="0" border="0">
            <thead><!-- universal table heading -->
                <tr>
                    <td class="tc first"><input type="checkbox" value="true" name="data-1-check-all" id="data-1-check-all"></td>
                    <td class="tc">Type</td>
                    <th>File</th>
                    <th>Sample</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td>Division 5</td>
                </tr>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td class="last">
                        <ul class="actions">
                            <li><a class="iconStats" href="#">Statystyki</a></li>
                            <li><a class="iconEdit" href="#">Edytuj</a></li>
                            <li><a class="iconDelete" href="#">Usuń</a></li>

                        </ul>
                    </td>
                </tr>
            </tbody>
        </table>

CSS:

table { table-layout: fixed; width: 100%; }
table tr { border-bottom:1px solid #e9e9e9; }
table thead td, th {border-left: 1px solid #f2f2f2; border-right: 1px solid #d5d5d5; background: #ddd url("../images/sprites4.png") repeat-x scroll 0 100% ; font-weight: bold; text-align:left;}
table tr td, th { border:1px solid #D5D5D5; padding:15px;}
table tr:hover { background:#fcfcfc;}
table tr ul.actions {margin: 0;}
table tr ul.actions li {display: inline; margin-right: 5px;}
ShaneKm
источник

Ответы:

218

Следующее поможет решить вашу проблему:

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

Гибкое решение на основе классов

И более гибкое решение - создать .fitwidthкласс и применить его к любым столбцам, которые вы хотите, чтобы их содержимое умещалось в одной строке:

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

А затем в вашем HTML:

<tr>
    <td class="fitwidth">ID</td>
    <td>Description</td>
    <td class="fitwidth">Status</td>
    <td>Notes</td>
</tr>
Дуг Амос
источник
3
Прекрасно работает! (в моем случае ширина таблицы составляет 100%, и никакие другие столбцы не имеют ширины. Применил это к одному столбцу). Протестировано в IE7 /
8/9
вау, никогда не думал, что это возможно с таблицами html. Спасибо!
kulpae
14
Вместо того, чтобы вручную добавлять класс .last, вы можете просто использовать «td: last-child» в качестве селектора.
T.Ho
3
Это решение хорошо работает, table-layout: fixedесли оно не задано в css в вопросе jsfiddle.net/hCkch/1
Дэвид Шеррет 08
1
Молодец, дружище! Действительно умный трюк, позволяющий «расставить приоритеты» для определенных столбцов, чтобы убедиться, что они не сжимаются на несколько строк большими «текстовыми» столбцами, такими как «Описание» или «Примечания». Хороший! Чтобы сделать его еще более полезным, я бы вызвал класс, .fitwidthа затем просто установил класс для столбцов, которые вы не хотите использовать в нескольких строках. Я отредактирую ваш ответ, чтобы добавить это.
Джошуа Пинтер
25

Если вы хотите убедиться, что последняя строка не переносится и, таким образом, размер соответствует вашему желанию, взгляните на

td {
 white-space: nowrap;
}
шлифовальный
источник
1

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

Вы можете установить

table tr ul.actions {margin: 0; white-space:nowrap;}

(или установите это для последнего TD, как предложил Сандер).

Это заставляет встроенные LI не ломаться. К сожалению, это не приводит к новому вычислению ширины в содержащем UL (и в этом родительском TD) и, следовательно, не изменяет размер последнего TD автоматически.

Это означает: если встроенный элемент не имеет заданной ширины, ширина TD всегда сначала вычисляется автоматически (если не указано). Затем его встроенное содержимое с этой рассчитанной шириной визуализируется, и применяется white-spaceсвойство -property, растягивая его содержимое за пределы вычисленных границ.

Я думаю, это невозможно без элемента в последнем TD с определенной шириной.

акме
источник
не хорошо. это именно то, что я пытаюсь избежать. Я не хочу указывать ширину столбцов. столбцы должны иметь автоматический размер, а размер последнего столбца должен быть уменьшен до содержимого внутри него.
ShaneKm
Можете ли вы предоставить CSS-определения для используемых классов?
acme
-2

используйте авто и минимальную или максимальную ширину следующим образом:

td {
max-width:50px;
width:auto;
min-width:10px;
}
Abudayah
источник
1
Это не работает должным образом, когда у меня меньше контента, он все еще использует максимальную ширину.
marcovtwout
min-width не применяется к ячейке таблицы.
Ник