Choose <li> which does not have
Bonjour
I would always like to have the same complement in <li>
, but when is the link that is in <a>
(for a large selection area).
li a {
padding: 1rem;
}
li:not(a) {
padding: 1rem;
}
<ul>
<li><a href='#'>Text</a></li>
<li>Text</li>
<li><a href='#'>Text</a></li>
</ul>
- I want to fill in
<a>
when it exists, and no more in<li>
- And when not
<a>
, the gasket is in<li>
+4
3 answers
, - , , , .
CSS ( ):
li, <a>
. calc, , <li>
.
CSS, , .
:root {
--li-padding: 1em;
}
li {
height: calc(100% + (var(--li-padding) * 2));
line-height: calc(100% + (var(--li-padding) * 2));
background: tomato;
}
li>* {
padding: 0 var(--li-padding);
}
li a {
display: inline-block;
background: rgba(255, 255, 255, 0.6);
}
<ul>
<li><a href="#">Line 1</a></li>
<li><span>Line 2</span></li>
<li><a href="#">Line 3</a></li>
</ul>
CSS ( ):
CSS 4, - , , .
li:not(::has(> a)) {
padding: 1em;
}
li>a {
padding: 1em;
}
<ul>
<li><a href="#">Line 1</a></li>
<li>Line 2</li>
<li><a href="#">Line 3</a></li>
</ul>
Javascript:
javascript, <li>
, , , , ( , , <a>
).
let liSelector = document.querySelectorAll('li');
for (let i = 0; i < liSelector.length; i++) {
let str = liSelector[i].innerHTML;
if (str.includes("</a>")) {
liSelector[i].querySelector('a').style.padding = "1em";
liSelector[i].querySelector('a').style.display = "inline-block";
} else {
liSelector[i].style.padding = "1em";
}
}
li {
background: tomato;
}
li a {
background: rgba(255, 255, 255, 0.6);
}
<ul>
<li><a href="#">Line 1</a></li>
<li>Line 2</li>
<li><a href="#">Line 3</a></li>
</ul>
: - , , , , , , 🙂
+2
Here you are in jQuery:
$('li').each(function() {
if($(this).find('a').length) {
$(this).addClass('extrapadding');
}
});
.extrapadding a {
padding: 1rem;
}
li:not(.extrapadding) {
padding: 1rem;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><a href='#'>Text</a></li>
<li>Text</li>
<li><a href='#'>Text</a></li>
</ul>
0