В этой статье мы рассмотрим три отличных трюка с CSS, которые вы можете использовать вместо JavaScript в своих проектах.
-
:active
Отчеты о псевдоклассах и данных CSS - Очень практичный для использования в диапазоне УВЧ
:empty
псевдокласс - использовать это хорошо
:only-child
псевдокласс
1. :активный псевдокласс и отчеты о данных CSS
Если вы хотите узнать кликабельность двух кнопок, разработчики CSS могут сделать это сами, не утруждая разработчиков JavaScript их похоронить:
.button-1:active::after {
content: url(./pixel.gif?action=click&id=button1);
display: none;
}
.button-2:active::after {
content: url(./pixel.gif?action=click&id=button2);
display: none;
}
В это время при нажатии кнопки соответствующие данные о поведении будут переданы на сервер. Этот вид отчетов нельзя остановить, даже если JavaScript отключен. Это удобно и быстро, и особенно подходит для A/B-тестирования.
2. Ультрапрактичное и сверхвысокочастотное использование: пустой псевдокласс
:empty
Псевдоклассы используются для сопоставления с пустыми элементами тега, например:
<div class="cs-empty"></div>
.cs-empty:empty{
width: 120px;
padding: 20px;
border: 10px dashed;
}
В этот момент элемент div будет соответствовать:empty
Псевдокласс, показывающий пунктирную рамку, как показано ниже
2.1 Скрыть пустые элементы
Например, содержимое модуля является динамическим, это может быть список или кнопка.Эти контейнеры модулей часто содержат свойства CSS, влияющие на макет, такие как поля и свойства отступов. Конечно, когда в этих модулях есть контент, эффект отображения макета очень хороший, но как только контент в этих модулях будет пустым, на странице будет большой и очевидный пробел, и эффект не очень хороший. случай использования под:empty
Управление псевдоклассом было бы лучше:
.cs-module:empty {
display: none;
}
Без дополнительной логической оценки JavaScript вы можете напрямую использовать CSS для достижения эффектов динамического стиля.Единственное, на что вам нужно обратить внимание, это то, что когда содержимое списка отсутствует, вы также должны удалить пробелы, иначе:empty
Псевдоклассы не будут совпадать.
2.2 Умные подсказки для отсутствующих полей
Например, следующий HTML
<dl>
<dt>姓名:</dt>
<dd>张三</dd>
<dt>性别:</dt>
<dd></dd>
<dt>手机:</dt>
<dd></dd>
<dt>邮箱:</dt>
<dd></dd>
</dl>
Некоторые информационные поля пользователя отсутствуют.В настоящее время разработчику следует использовать другие символы-заполнители, чтобы указать, что здесь нет содержимого, например, тире (-) или напрямую использовать текстовые подсказки. Но многолетний опыт разработки научил меня тому, что разработчикам очень легко забыть об особой обработке здесь, что в конечном итоге приводит к загромождению макета и трудной для понимания информации.
dt {
float: left;
}
Но теперь нам не нужно беспокоиться о таких проблемах сотрудничества, мы можем справиться с этой ситуацией напрямую с помощью CSS, код очень прост:
dd:empty::before {
content: '暂无';
color: gray;
}
В настоящее время эффект макета после отсутствия поля выглядит следующим образом:
2.3 Данные пусты
Есть много подобных сценариев в реальной разработке. Например, примечания в таблице часто пусты, и это можно обработать так:
td:empty::before{
content: '-';
color: gray;
}
Кроме того, есть еще и типовой сценарий, который нужно использовать:empty
Псевдокласс, то есть данные динамической загрузки Ajax пусты. Когда новый пользователь вводит продукт, содержимое многих модулей становится недоступным. В прошлом нам нужно было выполнить оценку if в коде Javascript, и если значения не было, мы выдавали сообщение «нет результата» или «нет данных». Но теперь есть:empty
Псевдокласс, просто оставьте эту работу CSS. Например:
.cs-search-module:empty::before{
content: '没有搜索结果';
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
Другой пример:
.cs-article-module:empty::before{
content: '您还没有发布任何文章';
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
Короче говоря, этот метод очень прост в использовании, он может сэкономить много времени на разработку, и в то же время, опыт лучше, а обслуживание более удобно, потому что одно и то же имя класса может использоваться для хранения оперативной информации о весь сайт соответствует:
.cs-article-module:empty::before{
content: '暂无数据;
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
3. Использование: единственный дочерний псевдокласс
:only-child
Это очень мощный псевдокласс, особенно при работе с динамическими данными, он может значительно сэкономить на написании логики JavaScript.
:only-child
Означает сопоставление элементов без каких-либо родственных элементов. Например, следующие элементы p могут соответствовать:only-child
Псевдокласс, потому что до него или после него нет других родственных элементов:
<div class="cs-confirm">
<!-- 可以匹配:only-child伪类 -->
<p class="cs-confirm-p">确定删除该内容?</p>
</div>
Несмотря на то что.icon
После элемента есть текст для удаления, но поскольку нет вложения меток, это анонимный текст, поэтому он не влияет.icon
совпадение элемента:only-child
Псевдокласс.
особенно нужно использовать:only-child
Сцена псевдокласса-это динамическая сцена, то есть фиксированный небольшой модуль.В зависимости от использования сцены может быть подэлемент или несколько подэлементов.Количество элементов отличается, и метод компоновки также отличается.:only-child
Когда сияют псевдоклассы. Например, загрузочный элемент (загрузочный модуль) может иметь только одно загрузочное изображение, либо только текст описания загрузки, либо загрузочное изображение и загрузочный текст могут появляться одновременно.:only-child
Псевдоклассы очень полезны.
HTML выглядит следующим образом:
<!-- 1. 只有加载图片 -->
<div class="cs-loading">
<img src="./loading.png" class="cs-loading-img">
</div>
<!-- 2. 只有加载文字 -->
<div class="cs-loading">
<p class="cs-loading-p">正在加载中...</p>
</div>
<!-- 3. 加载图片和加载文字同时存在 -->
<div class="cs-loading">
<img src="./loading.png" class="cs-loading-img">
<p class="cs-loading-p">正在加载中...</p>
</div>
Нам не нужно указывать дополнительные имена классов на родительском элементе для управления стилями разных состояний, мы можем использовать его напрямую:only-child
Псевдоклассы могут сделать макет хорошо во всех состояниях.
.cs-loading {
height: 150px;
position: relative;
text-align: center;
/* 与截图无关,截图示意用 */
border: 1px dotted;
}
/* 图片和文字同时存在时在中间留点间距 */
.cs-loading-img {
width: 32px; height: 32px;
margin-top: 45px;
vertical-align: bottom;
}
.cs-loading-p {
margin: .5em 0 0;
color: gray;
}
/* 只有图片的时候居中绝对定位 */
.cs-loading-img:only-child {
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
margin: auto;
}
/* 只有文字的时候行号近似垂直居中 */
.cs-loading-p:only-child {
margin: 0;
line-height: 150px;
}
Эффект следующий
Эта статья была впервые опубликована в публичном аккаунте"Fullstack-разработчик фронтенда"ID: by-zhangbing-dev, прочитайте последние статьи в первый раз и отдайте приоритет публикации новых статей через два дня. Обратив внимание, ответьте, пожалуйста, личным письмом: Большая подарочная упаковка, отправка по сети качественных видеокурсов онлайн с информацией о дисках, безусловно, сэкономит вам много денег!