Эллипсис переполнения текста не отображается с помощью специального шрифта
В настоящее время я пытаюсь создать текстовое поле со скрытым переполняющим текстом. Он отлично работает, но для некоторой части. Я использую
text-overflow: ellipsis;
Это должно помещать три точки ("..."
) в место, где мой текст отключен, но он не помещает три точки, вместо этого он помещает символ, который выглядит как три точки (называемый "многоточие" ).
Шрифт, который я сейчас использую, не имеет этого символа, поэтому он показывает какой-то другой случайный символ вместо трех точек.
Есть ли у кого-нибудь простой способ обхода (без javascript, пожалуйста, только CSS), сохраняя мой шрифт для текста?
Ответы
Ответ 1
Чтобы полностью имитировать функциональность text-overflow: ellipsis
без использования JavaScript, но при этом поддерживая полную поддержку браузера (text-overflow: "..."
работает только в Firefox 9 во время этого сообщения и полностью недоступен в любом другом браузере) чрезвычайно сложно ( если не невозможно).
Единственное решение, о котором я могу думать без каких-либо "хаков", - это отредактировать ваш файл шрифта, создав символ Юникода для символа ...
с многоточием. У меня нет опыта в этой области, но здесь есть ссылка, которая кажется довольно хорошей: http://sourceforge.net/projects/ttfedit/
Вот код HTML, который у меня есть:
<div id="wrapoff">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vehicula, augue id pretium euismod, nisi dolor sodales orci, non porttitor ligula velit ac lorem.
</div>
И некоторые CSS:
#wrapoff {
width: 200px;
border: 2px solid blue;
white-space: nowrap;
overflow: hidden;
position: relative;
}
#wrapoff:after {
content: "...";
position: absolute;
right: 0;
top: 0;
background-color: white;
padding: 0 5px;
}
Это добавляет псевдоэлемент поверх div #wrapoff
в верхнем правом углу, позволяя содержимому работать как text-overflow: ellipsis
. Недостатком этого является то, что "эллипсис" всегда показывает, независимо от того, действительно ли контент распространяется и переполняется. Это не может быть исправлено, поскольку нет способа использовать CSS для определения того, переполняется ли текст с страницы.
Здесь JSFiddle:
http://jsfiddle.net/ysoxyuje/
Граница должна показать вам размер самого элемента.
Ответ 2
http://jsfiddle.net/cbppL/707/
HTML
<header>
<h1>Long text is so long oh my is long indeed</h1>
</header>
CSS
header {
border:1px solid red;
width:150px;
position:relative;
}
h1 {
overflow:hidden;
white-space:nowrap;
/* -ms-text-overflow:ellipsis; */
/* text-overflow:ellipsis; */
width:150px;
height:1.2em;
}
header:after{
content:"...";
position:absolute;
top:0;
right:0;
background:#fff;
}
h1:hover {
overflow:visible;
}
Не очень хорошее решение. Это будет зависеть от того, какой у вас фона. Надежда помогает!
Ответ 3
Вместо "эллипсиса" вы можете указать свой собственный набор символов для обозначения переполнения текста.
Если ваш пользовательский шрифт имеет определенный период, вы должны просто использовать три периода:
text-overflow: '...';
Здесь JSFiddle в действии: http://jsfiddle.net/x5e6yv21/
Ответ 4
Вам необходимо использовать следующее:
white-space: nowrap;
text-overflow: ellipsis;
Ответ 5
Из того, что я понимаю, вы проблема в том, что в используемом шрифте вам не хватает символа эллипсиса.
Чтобы быстро исправить это, вы можете выбрать эту последнюю букву с помощью селектора псевдоэлементов ::last-letter
и изменить свойство font-family
на другой шрифт, который поддерживает многоточие _
Ответ 6
Итак, я знаю, что это не идеально, но это обход. Спецификация CSS3 говорит о том, что эллипсис должен взять свой стиль из контейнера, в котором они находятся. Это работает правильно во всех браузерах, кроме IE8/9, который берет его с многоцветным стилем из первой буквы контейнера. Обходной подход, который я предлагаю, заключается в том, чтобы обернуть текст внутри ваших "переполненных" элементов встроенным элементом, предоставить внешнему контейнеру шрифт, в котором указан символ с <многоточий > , и предоставить встроенный элемент внутри пользовательского шрифт. Это будет выглядеть примерно так: http://jsfiddle.net/u9dudost/2/
Если вам нужно добавить поддержку IE8/9, добавьте следующее:
div {
white-space: nowrap;
}
div::before {
font-family: 'Helvetica', sans-serif; /* Your custom font here. */
content: ''; /* IE9 fix */
}
Ответ 7
Убедитесь, что у вас
white-space: nowrap;
overflow: hidden;
с помощью
text-overflow: ellipsis;