Приміряйте ширину комірки до вмісту


265

З огляду на наступну розмітку, як я можу використовувати CSS, щоб змусити одну клітинку (всі комірки в стовпці) підходити до ширини вмісту всередині неї, а не розтягувати (що є поведінкою за замовчуванням)?

<style type="text/css">
td.block
{
border: 1px solid black;
}
</style>
<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

EDIT: Я розумію, що міг би важко зашифрувати ширину, але я б краще цього не зробив, оскільки вміст, який міститиметься в цьому стовпці, динамічний.

Дивлячись на зображення нижче, перше зображення - це те, що створює розмітка. Другий образ - це те, що я хочу.

введіть тут опис зображення


Я не розумію вашого запитання. Ви хочете обмежити останній стовпець якоюсь конкретною шириною?
MetalFrog

8
@diEcho Я вважав, що це досить зрозуміло. Я додам картинку чи дві.
Менсфілд

Можливий дублікат автоматичної ширини стовпців таблиці CSS
Вадим

Відповіді:


449

Я не впевнений, чи я розумію ваше запитання, але я поцікавлюся. JSfiddle з прикладу .

HTML:

<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

CSS:

td{
    border:1px solid #000;
}

tr td:last-child{
    width:1%;
    white-space:nowrap;
}

3
чому ви пишете <table style="width:100%">замість<table width="100%" >
diEcho

17
@diEcho Я не написав цю частину, це було з прикладу коду. Незалежно від цього, неправильно використовувати атрибут width на елементах. У цьому швидкому прикладі вбудований CSS чудово, але його слід абстрагувати у файл, якщо це був код рівня виробництва.
MetalFrog

45
Більш чистим способом зробити це IMO було б визначити стиль, який називається "nostretch" (або щось подібне), а потім просто визначити nostretch у CSS, щоб мати ширину: 1% та норап. Тоді останній TD мав би "class =" блок ностратів ". Таким чином ви зможете "натягнути" будь-яку клітинку, яку хочете.
Тім Холт

3
Це хороше рішення, але, на жаль, у Bootstrap 3 мої групи кнопок будуть завершені: jsfiddle.net/wexdX/326 Будь-які ідеї, як я можу його придушити?
Мартін Браун

5
Це працює лише тоді, коли вміст ширший за ширину: 1% - правильно? Тому що якщо вміст менший, то ширина: 1%, комірка буде більшою.
Адам


8

Для мене це найкраще автоматичне налаштування та автоматичне розмір таблиці та його стовпців (використовуйте css! Важливо ... лише якщо ви не можете без цього)

.myclass table {
    table-layout: auto !important;
}

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th {
    width: auto !important;
}

Не вказуйте ширину css для таблиці або для стовпців таблиці. Якщо вміст таблиці більший, він перейде на розмір екрана.


3

Встановлення ширини CSS до 1% або 100% елемента відповідно до всіх специфікацій, за якими я міг з’ясувати, пов'язане з батьківським. Хоча Blink Rendering Engine (Chrome) і Gecko (Firefox) на момент написання, здається, справляються з цим 1% або 100% (зробіть скорочення стовпців або стовпець, щоб заповнити доступний простір) добре, це не гарантується відповідно до всіх специфікацій CSS Я міг би знайти його належним чином.

Один із варіантів - замінити таблицю на розширення CSS4:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Це працює в нових браузерах, тобто IE11 + див. Таблицю внизу статті.


1

Є багато способів зробити це!

виправте мене, якщо я помиляюся, але питання шукає такого результату.

<table style="white-space:nowrap;width:100%;">
<tr>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:auto">this should be the content width</td>
</tr>
</table>

Перші 2 поля будуть "ділити" рештою сторінки (ПРИМІТКА. Якщо ви додасте більше тексту до 50% полів, це займе більше місця), а останнє поле буде постійно домінувати над таблицею.

Якщо ви раді дозволити обгортання тексту, ви можете перемістити пробіл: nowrap; до стилю 3-го поля
буде єдиним способом розпочати новий рядок у цьому полі.

альтернативно, ви можете встановити довжину на останньому полі, тобто. ширина: 150 пікс., а залишок у перших двох полях залишити.

Сподіваюсь, це допомагає!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.