Рассмотрим следующий пример: ( живая демонстрация здесь )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
Вывод:, width = 139
и многоточие не появляется.
Что мне здесь не хватает?
width
иheight
на ячейках таблицы всегда используются минимальные ширина и высота. Ячейки таблицы разные!Ответы:
Видимо, добавив:
решает проблему также.
Другое возможное решение - установить
table-layout: fixed;
таблицу, а также установить ееwidth
. Например: http://jsfiddle.net/fd3Zx/5/источник
display: table-cell
(по умолчанию дляtd
элементов) не принимают ширину.display: block;
своего рода побеждает цель использования стола. Мне нравится этотtable-layout: fixed;
вариант, он хорошо сработал для меня.table-layout:fixed
распределяет ширину столбцов менее умным способом. Есть ли другая опция, которая будет назначать ширину столбца таким же образом,table-layout: normal
и при этом правильно отображать многоточие?Также важно поставить
Что касается таблицы, то она хорошо работает и в IE9 (если вы используете max-width).
источник
Как было сказано ранее, вы можете использовать,
td { display: block; }
но это побеждает цель использования таблицы.Вы можете использовать,
table { table-layout: fixed; }
но, возможно, вы хотите, чтобы он вел себя по-разному для некоторых столбцов.Таким образом, лучший способ добиться того, чего вы хотите, - это обернуть ваш текст в
<div>
и применить свой CSS к<div>
(а не к<td>
) следующим образом:источник
Попробуйте использовать
max-width
вместоwidth
, таблица будет по-прежнему рассчитывать ширину автоматически.Работает даже в
ie11
(с режимом совместимости ie8).jsfiddle .
источник
Демо-страница
Для таблиц с динамической шириной я нашел следующий способ получения удовлетворительных результатов. Каждый,
<th>
который должен иметь возможность обрезки текста, должен иметь внутренний элемент обертки, который обертывает содержимое<th>
разрешенияtext-overflow
на работу.Это эффективно приведет к тому, что ширина элемента будет «привязана» к ширине области просмотра (окно браузера) и приведет к отсечке адаптивного содержимого. Установите
vw
единицы к удовлетворительному необходимому значению.Минимальный CSS:
Вот работающая демонстрация:
источник
Просто предлагая альтернативу, так как у меня была эта проблема, и ни один из других ответов здесь не дал желаемого эффекта, которого я хотел. Поэтому вместо этого я использовал список. Теперь, с точки зрения семантики, информацию, которую я выводил, можно было рассматривать как в виде табличных данных, так и в виде перечисленных данных.
В итоге я сделал следующее:
Так что в основном
ul
естьtable
,li
естьtr
иspan
естьtd
.Затем в CSS я установил
span
элементы какdisplay:block;
иfloat:left;
(я предпочитаю, чтобы эта комбинацияinline-block
работала в более старых версиях IE, чтобы очистить эффект с плавающей запятой, см .: http://css-tricks.com/snippets/css/clear- исправить / ) и также иметь эллипсы:Затем все, что вам нужно сделать, это установить
max-widths
интервалы, и это придаст списку вид таблицы.источник
<td><ul>...</ul></td>
)? Кажется, это не работает для меня :(Вместо использования многоточия для решения проблемы переполнения текста, я обнаружил, что отключенный и стилизованный ввод выглядит лучше и все же позволяет пользователю просматривать и выбирать всю строку, если это необходимо.
Выглядит как текстовое поле, но выделяется цветом, поэтому удобнее для пользователя
источник
Проверьте
box-sizing
css свойство вашихtd
элементов. У меня была проблема с шаблоном CSS, который устанавливает егоborder-box
значение. Вам нужно установитьbox-sizing: content-box
.источник
Оставь свои столы такими, какие они есть. Просто оберните содержимое внутри TD с помощью span, к которому применено усечение CSS.
источник
Если вы не хотите устанавливать max-width в td (как в этом ответе ), вы можете установить max-width в div:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Примечание: 100% не работает, но 99% делает трюк в FF. Другие современные браузеры не нуждаются в глупых взломах div.
источник