Как скрыть переполнение строки таблицы?
у меня есть некоторые таблицы html, где текстовые данные слишком велики, чтобы соответствовать. Таким образом, он расширяет ячейку вертикально, чтобы приспособиться к этому. Таким образом, теперь строки с переполнением в два раза выше строк с меньшим объемом данных. Это недопустимо. Как я могу заставить таблицу иметь одинаковую высоту строки 1em
?
вот некоторая разметка, которая воспроизводит проблему. Таблица должна быть высотой только в одну строку, при этом переполненный Текст скрыт.
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
table { width:250px; }
table tr { height:1em; overflow:hidden; }
</style>
</head>
<body>
<table border="1">
<tr>
<td>This is a test.</td>
<td>Do you see what I mean?</td>
<td>I hate this overflow.</td>
</tr>
</table>
</body>
</html>
7 ответов:
необходимо указать два атрибута,
table-layout:fixed
ontable
иwhite-space:nowrap;
на клетки. Вам также нужно переместитьoverflow:hidden;
в клетки тожеtable { width:250px;table-layout:fixed; } table tr { height:1em; } td { overflow:hidden;white-space:nowrap; }
вот демо . Протестировано в Firefox 3.5.3 и IE 7
В общем, если вы используете
white-space: nowrap;
это, вероятно, потому, что вы знаете, какие столбцы будут содержать содержимое, которое обертывает (или растягивает ячейку). Для этих столбцов я обычно обертываю содержимое ячейки вspan
конкретнойclass
атрибут и применить конкретныеwidth
.пример:
HTML:
<td><span class="description">My really long description</span></td>
CSS:
span.description { display: inline-block; overflow: hidden; white-space: nowrap; width: 150px; }
в большинстве современных браузеров теперь можно указать:
<table> <colgroup> <col width="100px" /> <col width="200px" /> <col width="145px" /> </colgroup> <thead> <tr> <th>My 100px header</th> <th>My 200px header</th> <th>My 145px header</th> </tr> </thead> <tbody> <td>100px is all you get - anything more hides due to overflow.</td> <td>200px is all you get - anything more hides due to overflow.</td> <td>100px is all you get - anything more hides due to overflow.</td> </tbody> </table>
затем, если вы применяете стили из сообщений выше, следующим образом:
table { table-layout: fixed; /* This enforces the "col" widths. */ } table th, table td { overflow: hidden; white-space: nowrap; }
результат дает вам красиво скрытое переполнение по всей таблице. Работает в последних Chrome, Safari, Firefox и IE. Я не тестировал в IE до 9 - но я предполагаю, что он будет работать до 7, и вам может даже повезти увидеть поддержку 5.5 или 6. ;)
вот что я пробовал. В принципе, я помещаю "гибкий" контент (td, который содержит слишком длинные строки) в контейнер div высотой в одну строку со скрытым переполнением. Затем я позволил тексту обернуться в невидимое. Однако вы получаете перерывы на разрывы слов, а не просто плавное отключение.
table { width: 100%; } .hideend { white-space: normal; overflow: hidden; max-height: 1.2em; min-width: 50px; } .showall { white-space:nowrap; } <table> <tr> <td><div class="showall">Show all</div></td> <td> <div class="hideend">Be a bit flexible about hiding stuff in a long sentence</div> </td> <td> <div class="showall">Show all this too</div> </td> </tr> </table>
только недостатком (кажется), является то, что ширина ячеек таблицы одинакова. Любой как обойти это? - Джош Стодола 12 октября в 15:53
просто задать ширину таблицы и ширину для каждой ячейки таблицы
что-то вроде
table {border-collapse:collapse; table-layout:fixed; width:900px;} th {background: yellow; } td {overflow:hidden;white-space:nowrap; } .cells1{width:300px;} .cells2{width:500px;} .cells3{width:200px;}
это работает как шарм: o)
Если javascript принимается в качестве ответа, я сделал плагин jQuery для решения этой проблемы (для получения дополнительной информации о проблеме см. CSS: усечь ячейки таблицы, но соответствовать как можно больше).
чтобы использовать плагин просто введите
$('selector').tableoverflow();
плагин: https://github.com/marcogrcr/jquery-tableoverflow
полный пример: http://jsfiddle.net/Cw7TD/3/embedded/result/