Автоматическая ширина столбца таблицы 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;}

Ответы:


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;
}

1
Это не работает должным образом, когда у меня меньше контента, он все еще использует максимальную ширину.
marcovtwout

min-width не применяется к ячейке таблицы.
Ник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.