Автоматическая ширина столбца таблицы CSS - PullRequest
88 голосов
/ 21 января 2011

Учитывая следующее, как мне сделать мой последний столбец автоматически изменяющим размер к его содержимому? (В последнем столбце должен быть указан autosize-width для содержимого. Предположим, у меня есть только 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;}

Ответы [ 4 ]

199 голосов
/ 01 июня 2012

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

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>
24 голосов
/ 21 января 2011

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

td {
 white-space: nowrap;
}
1 голос
/ 21 января 2011

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

Можно установить

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

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

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

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

Так что я думаю это невозможно без наличия элемента в последнем TD с определенной шириной.

0 голосов
/ 24 января 2011

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

td {
max-width:50px;
width:auto;
min-width:10px;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...