Кратко
СкопированоПсевдокласс :empty используется для выбора пустых элементов. Пустыми считаются элементы без потомков и текста.
Пример
Скопировано
<div> <h6>Без :empty</h6> <p>Если человеку...</p> <footer class="reactions"><span>🤔</span></footer></div><div> <h6>С :empty</h6> <p>Если заменить...</p> <footer class="reactions with-empty"><span>😁</span></footer></div>
<div>
<h6>Без :empty</h6>
<p>Если человеку...</p>
<footer class="reactions"><span>🤔</span></footer>
</div>
<div>
<h6>С :empty</h6>
<p>Если заменить...</p>
<footer class="reactions with-empty"><span>😁</span></footer>
</div>
.reactions { border: 1px solid blue; border-radius: 16px; padding: 5px; background-color: #123E66;}.with-empty:empty { display: none;}
.reactions {
border: 1px solid blue;
border-radius: 16px;
padding: 5px;
background-color: #123E66;
}
.with-empty:empty {
display: none;
}
В примере выше реакции на сообщения будут вставлены в блок с классом reactions. Ему заданы внутренние отступы, фоновый цвет и рамка. Если реакций нет, то блок останется пустым и будет скрыт.
Без использования псевдокласса :empty на экране останется пустой элемент с внутренними отступами, фоном и рамкой.
Как понять
СкопированоНе будет пустым следующее содержимое:
- другие теги;
- текст, включая пробельные элементы (пробел, невидимый пробел, табуляция, переносы строк).
Будет пустым следующее содержимое:
- HTML-комментарии;
- текст, указанный с помощью CSS-атрибута
content; - псевдоэлементы.
Например, у этих элементов есть потомки:
<div> </div><div> <!-- test --></div><div></div>
<div> </div>
<div>
<!-- test -->
</div>
<div>
</div>
В первом случае потомком является пробел, во втором и третьем — символы переноса строк.
А вот следующие <div>-элементы браузер будет считать пустыми:
<style> .has-content { content: 'Есть атрибут content'; } .has-pseudo::before { content: 'Есть псевдоэлемент ::before'; }</style><div></div><div><!-- test --></div><div class="has-content"></div><div class="has-pseudo"></div>
<style>
.has-content {
content: 'Есть атрибут content';
}
.has-pseudo::before {
content: 'Есть псевдоэлемент ::before';
}
</style>
<div></div>
<div><!-- test --></div>
<div class="has-content"></div>
<div class="has-pseudo"></div>
В первом случае — внутри тега нет ничего.
Во втором случае — внутри тега присутствует только комментарий.
В третьем случае — имеется только CSS-атрибут content.
В четвёртом случае — имеется псевдоэлемент :.
На практике
Скопированосоветует
Скопировано🛠 В реальных проектах этот селектор сильно помогает, когда нет возможности управлять элементом, но точно знаешь, что иногда он может быть пустым. Использование псевдокласса :empty позволяет убрать лишние отступы или рамки, которые могут быть у пустого элемента.