случайно обнаружен вОпределенная страница горячего спискаТам очень интересная верстка, заголовок здесь будет ограничивать количество строк контента, поэтому текст превышает"неопределенная линия"из. Подробные правила заключаются в следующем:
- Вся высота контейнера фиксирована, всего 3 строки для заголовка и содержимого.
- Заголовок до 2-х строк, далее опускается
- Содержание определяется оставшимся пространством.Если заголовок занимает 2 строки, содержание превышает 1 строку и опускается, если заголовок занимает 1 строку, содержание превышает 2 строки и опускается.
Это очень духовное (отстраненное) живое (спектральное) взаимодействие? Вы можете полностью использовать пространство страницы, чтобы обеспечить отображение заголовка и содержимого, как показано ниже.
Глядя на реализацию исходного сайта, это достигается путем оценки высоты заголовка с помощью js, а затем динамического добавления имени класса. Однако, после некоторых размышлений, этого можно добиться и с помощью чистого CSS, давайте посмотрим
1. Название нельзя упустить
Предположим, есть такой кусок HTML
<div class="section">
<h3 class="title">LGD 在 TI10 放猛犸,RNG 在 S7 放加里奥最后都输了,哪个更让你愤怒失望?</h3>
<p class="excerpt">猛犸是对面的绝中绝,大家都知道,并且之前扳回两局已经证明了,当lgd选择ban掉猛犸,或者自己抢掉猛犸时,对面完全不是对手。</p>
</div>
Правило заголовка — опустить более 2 строк, это просто, используйте его напрямую-webkit-line-clampвыполнить
.title{
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
Более 2 строк будут автоматически пропущены
Во-вторых, количество адаптивных строк контента.
Поскольку вся высота фиксирована, можно ли сделать так, чтобы контентная часть адаптировалась к оставшемуся пространству? упомянуладаптивное остаточное пространство, сразу приходит на ум flex layout, поэтому реализовать его можно так:
.section{
display: flex;
overflow: hidden;
height: 72px;/*定一个高度*/
flex-direction: column;
}
.excerpt{
flex: 1; /*自适应剩余空间*/
overflow: hidden;
}
поэтому с помощьюflex: 1;overflow: hidden;
Почти добился желаемого эффекта, а именно
Это уже идеально, но теперь нет эллипса за пределы этого, а затем смотреть вниз
3. Неопределенная черта выходит за пропуск
в общем,-webkit-line-clamp
Подходит для случая, когда количество рядов определено, сейчас количество рядов не фиксировано, иногда 1 ряд, иногда 2 ряда, как с этим быть? Вот тут и нужна хитрость. Вы можете помнить эту статьюCSS реализует многострочный текст «развернуть и свернуть» — Nuggets (juejin.cn), в котором упоминается, как использовать float для достижения эффекта пропуска текста. Если вам интересно, вы можете обратиться к нему.
1. Эффект объемного звучания в правом нижнем углу
Сначала добавьте псевдоэлемент, установите правильный поплавок
.excerpt::before{
content: '...';
float: right;
}
Очевидно, многоточие в настоящее время находится вв правом верхнем углуДа, теперь его нужно перенести вНижний правыйДа ладно, предыдущая операция состоит в том, чтобы сжать многоточие вниз через плавающий элемент, но требуется дополнительный элемент-заполнитель.
Вот новый способ использованияКомпоновка фигур CSSвыполнить!
Сначала заполните высоту многоточия и выровняйте его по низу, вы можете использоватьflexвыполнить
.excerpt::before{
content: '...';
float: right;
height: 100%;
display: flex;
align-items: flex-end;
}
Таким образом, хотя многоточие доходит до нижнего правого угла, верхняя часть также сдавливается, и эффект заворачивания не достигается. В настоящее время вы можете использовать макет фигур.Если вы не понимаете этот макет, вы можете обратиться к этой статье Чжан Синьсюй:Учебник по компоновке форм CSS, написанный для меня « Zhang Xinxu-Xin Space-Xin Life (zhangxinxu.com)
Здесь просто используйтеshape-outside:inset()
Вот и все, это означает расстояние, на которое верхнее, правое, нижнее и левое направления отступают внутрь с самим собой в качестве границы. Например, он должен иметь отступ близко к положению многоточия, поэтому
.excerpt::before{
/*其他样式**/
shape-outside: inset(calc(100% - 1.5em) 0 0);
}
Эффект следующий
Удалите фон, и вы увидите, что многоточие идеально завернуто в правый нижний угол.
2. Автоматически скрывать многоточие
Теперь возникла проблема, как скрыть многоточие, когда текста меньше? Вы можете попробовать «CSS с завязанными глазами»
Проще говоря, это закрытие многоточия достаточно большим цветным блоком.После установки абсолютного позиционирования цветной блок следует за текстом содержимого, поэтому, когда слов много, цветной блок также сжимается вместе с текстом.Реализация такова следует
.excerpt::after{
content: '';
position: absolute;
width: 999vh;
height: 999vh;
background: #fff;
}
Принцип следующий
Отдельные крайние случаи не могут быть охвачены, например,
Это не имеет значения, вы можете просто найти что-то, чтобы компенсировать это, например,box-shadow
, просто сместите немного в левый нижний угол.
.excerpt::after{
content: '';
position: absolute;
width: 999vh;
height: 999vh;
background: #fff;
box-shadow: -2em 2em #fff; /*左下的阴影*/
}
После установки того же цвета, что и основной, окончательный эффект выглядит следующим образом.
Таким образом реализуется интерактивный эффект начала статьи, и можно получить доступ ко всему коду.auto-clamp (codepen.io)
4. Резюме и объяснение
Приведенное выше реализует эффект обрезания текста с неопределенным количеством строк и включает в себя множество советов по CSS.За исключением макета фигур (конечно, можно использовать и другие методы), не так уж много незнакомых свойств.Ниже приводится краткое резюме. :
- Многострочная упущение непосредственно -Webkit-Line-Clamp, поддержка современных браузеров
- гибкий макет может легко справиться с оставшимся пространством
- Макет float + shape также может обеспечить эффект обтекания в правом нижнем углу.
- box-shadow часто используется при завязывании глаз
- Уместное накопление некоторых CSS трюков и приемов, иногда это очень поможет
На мой взгляд, верстка лучше всего решается с помощью CSS, реализация более гибкая, рендеринг быстрее, нет ограничения по кадрам, нет необходимости ждать загрузки dom, нет необходимости в JS для расчета размер, и нет необходимости перемещаться по узлам.Есть много преимуществ. Если вы считаете, что это не плохо, если это полезно для вас, ставьте лайк, добавляйте в избранное и пересылайте ❤❤❤