Подтвердить что ты не робот

Text-overflow: многоточие в таблице-ячейке без ширины

Я пытаюсь достичь гибкой ширины таблицы text-overflow: ellipsis; в средней ячейке, которая выглядит так:

| Button 1 | A one-lined text that is too long and has to be... | Button 2 |

Вся таблица должна иметь width: 100%;, чтобы она была такой же большой, как и устройство. Я не могу установить фиксированную ширину на Button 1 и Button 2, поскольку приложение является многоязычным (a max-width должно быть возможно).

Я могу попробовать все, что захочу, ... появляется только при установке фиксированной ширины. Как я могу сказать средней ячейке "использовать доступное пространство" без помощи JavaScript?

4b9b3361

Ответ 1

Это не очень чистое решение, но оно не использует JS и работает в каждом браузере, который я тестировал.

Мое решение состоит в том, чтобы обернуть содержимое ячейки внутри таблицы с помощью table-layout: fixed и width: 100%.

Смотрите демонстрацию .

Здесь полное решение:

<table class="main-table">
    <tr>
        <td class="nowrap">Button 1</td>
        <td>
            <table class="fixed-table">
                <tr>
                    <td>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus doloremque magni illo reprehenderit consequuntur quia dicta labore veniam distinctio quod iure vitae porro nesciunt. Minus ipsam facilis! Velit sapiente numquam.</td>
                </tr>
            </table>
        </td>
        <td class="nowrap">Button 2</td>
    </tr>
</table>

.main-table {
    width: 100%;
}

.fixed-table {
    /* magic */
    width: 100%;
    table-layout: fixed;

    /*not really necessary, removes extra white space */
    border-collapse: collapse;
    border-spacing: 0;
    border: 0;
}
.fixed-table td {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.nowrap {
    /* used to keep buttons' text in a single line,
     * remove this class to allow natural line-breaking.
     */
    white-space: nowrap;
}

Не совсем понятно, какие намерения для боковых кнопок, поэтому я использовал white-space: nowrap, чтобы держать их в одной строке. В зависимости от варианта использования вы можете предпочесть применить min-width и дать им естественный отрыв.

Ответ 2

Установите 100% -ную ширину в таблице и укажите таблицу fixed table-layout:

table {
    width: 100%;
    table-layout: fixed;
}

Затем задайте следующее для каждой ячейки таблицы, которая должна иметь многоточие:

td:nth-child(2) {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

Voila! Отзывчивая таблица с переполнением многоточия!

Демо: http://jsfiddle.net/VyxES/

Ответ 3

HTML

<tr>
    <td>
        <span class="ellipsis"> A very looooooooooooooooooooooooooooooong string</span>
    </td>
</tr>

CSS

td {
    position: relative;
}

.ellipsis {
    /*Here is the trick:*/
    position: absolute;
    width: 100%;
    /*End of the trick*/

    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

Ответ 4

Чистым способом было бы просто установить максимальную ширину на td.

Основываясь на ответе @Fabrício Matté,

http://jsfiddle.net/V83Ae/89/

<table class="main-table">
<tr>
    <td class="nowrap">Button 1</td>
    <td class="truncate">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus doloremque magni illo reprehenderit consequuntur quia dicta labore veniam distinctio quod iure vitae porro nesciunt. Minus ipsam facilis! Velit sapiente numquam.</td>
    <td class="nowrap">Button 2</td>
</tr>

и

body { margin: 0; }

.main-table {
    width: 100%;
}

.truncate {
    text-overflow: ellipsis;
    white-space  : nowrap;
    overflow     : hidden;
    max-width    : 100px; /* Can be any size, just small enough */
}

.nowrap {
    white-space: nowrap;
}

Я понятия не имею, почему это работает, но это так, поэтому, если кто-то может понять, почему использование макс-ширины работает, пожалуйста, сообщите мне, как я сделал это случайно.

Ответ 5

После того, как я ударил головой по часам, без решения, которое сработало, наконец нашел его.

Элемент, который вы хотите для основания переполнения, имеет минимальную/максимальную ширину, где max меньше минимальной ширины. Затем вы можете переполнить lement или его дочерний элемент, где вы можете установить его любым способом:%, px, auto.

Я попробовал его в более чем одной сложной ситуации, и он работает на всех.

Я попытаюсь опубликовать чарт с моими примерами, но это должно помочь вам.

/* Apply on base element for proper overflow */
max-width: 1px;
min-width: 10000px;

/* Apply on self or child, according to need */
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

Ответ 6

[обновление] Мои извинения, похоже, не работают "просто так": http://jsfiddle.net/kQKfc/1/

Оставь его здесь, потому что в некоторых ситуациях он делает трюк для нас.
[/Обновление]

У нас есть этот css в нашем проекте, сделайте снимок:

.nowr
{
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

Ответ 7

Здесь вы переходите

<div class="container">
  <div>
    Button 1
  </div>
  <div class="fill">
    <div class="lockText">
      A one-lined text that is too long and has to be...
    </div>
  </div>
  <div>
    Button 2
  </div>
</div>

Трюк заключается в том, чтобы настроить макет таблицы с ячейкой, которая сначала занимает оставшееся пространство (таблицы css, заметьте!).

.container {
  display: table;
  width: 100%;
}

.container > div {
  display: table-cell;
  white-space: nowrap;
  position : relative;
  width : auto;

  /*make it easier to see what going on*/
  padding : 2px;
  border : 1px solid gray;
}

.container > .fill {
  width : 100%;
}

Затем добавьте свой текст, который сдерживает себя.

.lockText {
  position : absolute;
  left : 0;
  right : 0;
  overflow: hidden;
  text-overflow: ellipsis;
}