Как заставить ячейки таблицы отображать столько текста, сколько подходит в одной строке, например, GMail и Google Reader?

Каков наилучший способ сделать таблицу (не обязательно используя тег таблицы), где каждая строка имеет фиксированную высоту и заполняет все доступное горизонтальное пространство, а один из столбцов имеет динамическую ширину, которая показывает как можно больше текста без прерывания линии? Как Gmail и Google Reader.

Мне очень нравится этот способ представления информации. Расширяемая строка фиксированной высоты - это хороший способ сканирования списка данных, IMHO.

Ответ 1

Смотрите: http://jsfiddle.net/gtRnn/

<p>What is the best way *snip*</p>

p {
    border: 1px dashed #666;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis
}

Каждое свойство делает что-то полезное:

  • white-space: nowrap заставляет текст оставаться на одной строке.
  • overflow: hidden останавливает это.
  • text-overflow: ellipsis работает во всех браузерах, кроме Firefox (поддержка запланирована)
  • border нет ни в коем случае.

Ответ 2

Другие ответы не работают в таблице, как показано здесь: http://jsfiddle.net/gtRnn/8/ - ссылка также содержит правильный способ сделать это.

Решение состоит в том, чтобы установить стиль table-layout в таблице фиксированный и дать каждому столбцу процентную или абсолютную ширину. table-layout: fixed; указывает браузеру не вычислять ширину таблицы на основе содержимого, а из явной ширины, заданной каждой ячейке.

Рабочий пример: http://jsfiddle.net/gtRnn/8/

Код:

<style type="text/css">
    .my-table {
        /* This is important for ellipsis to work in tables.
           Don't forget to explicitly set the widths on all columns. */
        table-layout: fixed;
        width: 100%;              /* The table must be given a width. */
    }

    .overflow-ellipsis {
        overflow: hidden;        /* Ellipsis won't work without this. */
        text-overflow: ellipsis; /* The most important part */
    }
</style>

<table border="1" class="my-table">
    <tr>
        <td width="10%">1.</td>
        <td width="90%" class="overflow-ellipsis">
            In this TD, wrapping still occurs if there is white space.
            ButIfThereIsAReallyLongWordOrStringOfCharactersThenThisWillNotWrapButUseEllipsis
        </td>
    </tr>
    <tr>
        <td width="10%">2.</td>
        <td width="90%" class="overflow-ellipsis" style="white-space:nowrap;">
            In this TD, wrapping will not occur, even if there is white space.
        </td>
    </tr>
</table>

Процент ширины смешивания и абсолютная ширина не работают корректно (в Google Chrome по крайней мере).

Ответ 3

Ключ: overflow: hidden; и white-space: nowrap;

<div style="width: 200px; overflow: hidden; white-space: nowrap;">some long text.............asdfasdf........</div>