У меня есть такая HTML-таблица:
table { border-collapse: collapse; }
table thead th:nth-child(1) { width: 180px }
table thead th:nth-child(2) { width: 150px }
table thead th:nth-child(3) { width: 170px }
table thead tr { border-bottom:2px solid #222; }
table tbody tr { border-top:1px solid #ddd; }
table tbody tr:hover { background: #def; }
table tbody td { height: 40px; }
<div>
<table>
<thead>
<tr>
<th>Heading 1</th>
<th>Heading 2</th>
<th>Heading 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Content 1 1</td>
<td>Content 1 2</td>
<td>Content 1 3</td>
</tr>
<tr>
<td>Content 2 1</td>
<td>Content 2 2<br>Line 2<br>Line 3<br>Line 4</td>
<td>Content 2 3</td>
</tr>
<tr>
<td>Content 3 1</td>
<td>Content 3 2</td>
<td>Content 3 3</td>
</tr>
</tbody>
</table>
</div>
Столбцы будут иметь разные фиксированные значения ширины, указанные в CSS, которые будут определять размер таблицы. В приведенном выше примере столбцы имеют размер 180px, 150px и 170px соответственно, поэтому таблица будет иметь ширину 500px.
Из-за дизайна нам нужно, чтобы таблица занимала 100% контейнера без изменения размера столбцов . Это означает, что, например, если экран имеет размер 900px, столбцы по-прежнему занимают свои 500px, но таблица должна растягиваться до конца контейнера, чтобы занять оставшиеся 400px.
Установка ширины таблицы на 100% и добавление нового столбца, занимающего оставшееся пространство, автоматически решит проблему. Но нас попросили не добавлять такой столбец, поскольку средства чтения с экрана будут проходить по нему и читать его как пустую ячейку, что может ввести пользователей в замешательство.
Одной из опций hacky будет добавление псевдоэлемента, занимающего всю ширину страницы (с обтеканием div
, имеющим overflow: hidden
, как в демонстрационном примере ниже). Но проблема с этим решением заключается в том, что если в таблице есть столбцы, которые занимают больше ширины страницы, мы хотим, чтобы содержащая div
прокручивалась, но тогда мы увидим нечто, похожее на огромную пустую строку.
table { border-collapse: collapse; }
table thead th:nth-child(1),
table thead th:nth-child(1) { min-width: 180px }
table thead th:nth-child(2) { min-width: 150px }
table thead th:nth-child(3) { min-width: 170px }
table thead tr { border-bottom:2px solid #222; }
table tbody tr:not(:first-child) { border-top:1px solid #ddd; }
table tbody tr:hover { background: #def; }
table tbody td { height: 40px; }
div {
overflow: hidden;
}
table tr::after {
content: "";
display: block;
width: 100vw;
}
<div>
<table>
<thead>
<tr>
<th>Heading 1</th>
<th>Heading 2</th>
<th>Heading 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Content 1 1</td>
<td>Content 1 2</td>
<td>Content 1 3</td>
</tr>
<tr>
<td>Content 2 1</td>
<td>Content 2 2<br>Line 2<br>Line 3<br>Line 4</td>
<td>Content 2 3</td>
</tr>
<tr>
<td>Content 3 1</td>
<td>Content 3 2</td>
<td>Content 3 3</td>
</tr>
</tbody>
</table>
</div>
Есть ли доступный способ, чтобы таблица занимала всю ширину, а столбцы только их выделенную ширину?