VERY CHEEKY pure- css решение: заставить теги a
, а не li
отображать маркеры элемента списка. Затем просто примените display: none
ко всем пустым a
тегам! (Их содержащие li
элементы будут естественным образом сглаживаться до height: 0
, поскольку они будут display: block
и полностью без содержимого.)
li {
position: relative;
display: block;
}
a {
position: relative;
display: list-item;
}
a:empty {
display: none;
}
<ul class="parent">
<li>
<a href="">One</a>
</li>
<li>
<a href=""></a>
</li>
<li>
<a href=""></a>
</li>
<li>
<a href="">Two</a>
</li>
<li>
<a href="">Three</a>
</li>
</ul>
Обратите внимание, что решения css не всегда идеальны, потому что даже если визуально все выглядит хорошо, разметка страницы semanti c все еще может быть в нежелательном состоянии.