Введение
В этой части мы рассмотрим типовые ситуации, в которых возникает проблема со слишком длинным или слишком коротким контентом.
Примеры
1) Карточка профиля
Простой пример, в котором мы не можем заранее предсказать длину имени. Как же нам тогда поступить?
/* Решение 1 */
.card__title {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
/* Решение 2 */
.card__title {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
Можно обрезать текст еще в первой строке, а можно растянуть его на несколько и только потом усечь.
2) Навигационные элементы
Частая проблема, если делать многоязычный сайт. Иногда возникает ситуация, что какое-то слово (в нашем случае это "About") значительно длиннее при раскладке LTR (left-to-right) чем RTL (right-to-left). Тогда мы получаем слишком маленькую интерактивную зону клика, что не есть хорошо.
Для решения данной ситуации достаточно не забывать использовать min-width.
.nav__item {
min-width: 50px;
}
3) Продукты в корзине покупателя
Названия продуктов могут варьироваться от одной до нескольких строк. В примере ниже название продукта слишком близко к кнопке "закрыть" из-за недостаточного размера отступов между ними.
Такое обычно решается добавлением margin к внутреннему блоку с текстом или добавлением padding к блоку-обложке.
.product__name {
margin-right: 1rem;
}
4) Flexbox и длинный контент
Если пример из прошлого пункта показался вам слишком простым, то сейчас вы поймете, что не все вещи бывают такими очевидными. Рассмотрим следующий пример:
HTML:
Ahmad Shadeed
Follow
CSS:
.user {
display: flex;
align-items: flex-start;
}
.user__name {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
Вот что произойдет, если имя станет слишком длинным:
Казалось бы: почему так? Мы ведь сделали все, о чем говорили в первой части данного топика, но получилось совсем не то, чего мы ожидали.
Все дело в том, что по умолчанию флекс-элементы не могут сжиматься меньше длины своего контента. Для решения этой проблемы нужно установить min-width:
.user__meta {
/* other styles */
min-width: 0;
}
Онлайн-пример (классы немного отличаются, но суть та же): https://codepen.io/kava13/pen/YzpqLoG
Заключение
Надеюсь, что вы узнали о некоторых методах работы с длинным и коротким контентом. Вы сможете подглядывать сюда и находить какие-то похожие аналоги, когда у вас возникнет неявная ситуация в верстке! :)