Ответ 1
Чтобы добиться этого, вы должны обернуть длинный текст в два div. Внешняя получает position: relative
и содержит только внутреннюю. Внутренний получает position: absolute
, overflow: hidden
и width: 100%
(это ограничивает его размер ячейки таблицы).
Теперь алгоритм табличной компоновки считает, что эти ячейки таблицы пусты (потому что абсолютно позиционированные элементы исключены из расчетов макета). Поэтому мы должны сказать, что это будет расти, несмотря на это. Интересно отметить, что установка width: 100%
в соответствующем элементе <col>
работает в том смысле, что он фактически не заполняет 100% ширины, а 100% минус ширину всех остальных столбцов (которые имеют размер автоматически). Он также нуждается в vertical-align: top
, так как в противном случае (пустой) внешний div выравнивается в середине, поэтому элемент с абсолютно позиционированием будет отключен на половину строки.
Вот полный пример с трехколоночной, двухстрочной таблицей, показывающей это на работе:
CSS
div.outer {
position: relative;
}
div.inner {
overflow: hidden;
white-space: nowrap;
position: absolute;
width: 100%;
}
table {
width: 100%;
border-collapse: collapse;
}
td {
border: 1px dotted black;
vertical-align: top;
}
col.fill-the-rest { width: 100%; }
HTML:
<table>
<col><col><col class="fill-the-rest">
<tr>
<td>foo</td>
<td>fooofooooofooooo</td>
<td>
<div class='outer'>
<div class='inner'>
Long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text
</div>
</div>
</td>
</tr>
<tr>
<td>barbarbarbarbar</td>
<td>bar</td>
<td>
<div class='outer'>
<div class='inner'>
Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text Some more long text
</div>
</div>
</td>
</tr>
</table>
В этом примере первые два столбца будут иметь минимально возможный размер (т.е. пространства заставят их обернуть много, если вы также не добавите к ним white-space: nowrap
).
jsFiddle: http://jsfiddle.net/jLX4q/