CSS: line-clamp

Spread the love

Свойство line-clamp обрезает текст до определенного количества строк.

Спецификация для него в настоящее время находится в статусе Working Draft (WD) — рабочий черновик, так что это означает, что все еще здесь ничего не высечено на камне, потому что работа над ней до конца еще не завершена. Тем не менее, он определяется как сокращение для max-lines и block-overflow, первое из которых отмечено как находящееся под угрозой удаления в текущем рекомендации-кандидате (Candidate Recommendation).

Легко увидеть, как max-lines будет исключен, поскольку его функция (установка количества строк перед усечением) уже встроена в line-clamp, и дальнейшая абстракция может быть ненужной.

Syntax

.module {
  line-clamp: [none | <integer>];
}

line-clamp принимает следующие значения в текущем черновике спецификации:

  • none: не устанавливает максимальное количество строк, и в результате не происходит усечения.
  • <integer>: устанавливает максимальное количество строк перед усечением содержимого, а затем отображает многоточие (…) в конце последней строки.

Это многоточие должно отображаться как символ Юникода (U+2026), но его можно заменить эквивалентом в зависимости от языка содержимого и режима записи используемого User-Agent.

Эй, я могу сделать это с помощью text-overflow?

Справедливый вопрос, друг мой, и ответ такой: ну…

text-overflow действительно имеет значение ellipsis, которое обрезает текст:

.truncate {
  text-overflow: ellipsis;

  /* Needed to make it work */
  overflow: hidden;
  white-space: nowrap;
}

Красивая картинка, для хорошего старта. Но что, если мы хотим ввести многоточие не в первую строку, а где-то, скажем, в третью строку текста?

Вот где в игру вступает line-clamp. Просто обратите внимание, что для этого используется комбинация трех свойств:

.line-clamp {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;  
  overflow: hidden;
}

Firefox теперь поддерживает это именно таким образом (с префиксами -webkit- и всем остальным).

Итак, в чем подвох?

На данный момент это поддержка браузера. Line clamps являются частью CSS Overflow Module Level 3 , который в настоящее время находится в статусе Working Draft (WD) — рабочий черновик и в настоящее время может полностью не поддерживается в некоторых браузерах.

Мы можем получить этот эффект (line clamp) с помощью префикса -webkit- (который, как ни странно, работает во всех основных браузерах). Поэтому, именно так была сделана демонстрация выше.

Так же для этих целей можно пойти по пути JavaScript. Clamp.js старая но вполне рабочая библиотека:

Поддержка браузера

Это поддержка WebKit свойства и недокументированной реализации Line Clamp в WebKit.

Эти данные поддержки браузера получены от Caniuse, в котором есть более подробная информация. Число указывает, что браузер поддерживает эту функцию в этой версии и выше.

Desktop

ChromeFirefoxIEEdgeSafari
14*68*No175*

Mobile / Tablet

Android ChromeAndroid FirefoxAndroidiOS Safari
108*107*2.3*5.0-5.1*

Дополнительные ресурсы

Перевод статьи: line-clamp

Была ли вам полезна эта статья?
[1 / 5]

Spread the love
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments