Reputation: 324620
Suppose I have the following:
<div data-pid="">Unknown</div>
<div data-pid="123">Known 123</div>
Is there a way in CSS to select only elements where the data-pid
attribute is non-empty?
Upvotes: 29
Views: 23210
Reputation: 7372
Directly answering the OP's notes: div[data-pid]:not([data-pid=""]) { ... }
will work cleanly as @kapa shared.
But thoroughly addressing the title question, and addressing another common use case:
HTML:
<a>Should NOT have cursor pointer. NOT linkable.</a>
<a href>Should NOT have cursor pointer. NOT linkable.</a>
<a href="">Should NOT have cursor pointer. NOT linkable.</a>
<a href="https://stackoverflow.com/">SHOULD have cursor pointer.</a>
CSS:
a {
cursor: pointer;
}
a:not([href]), /* Accounts for <a> */
a[href=""] /* Accounts for <a href> and <a href=""> */
{
cursor: default;
}
MDN Attribute Selectors is a great resource for a ton of other similar attribute selectors when concerned with their values.
Upvotes: 2
Reputation: 490173
/* Normal styles */
[data-pid] {}
/* Differences */
[data-pid=""] {}
This will have much better browser support. Instead of selecting the ones you want, style all of them and then place the differences in the second selector.
Upvotes: 8
Reputation: 281415
This works, if you don't mind doing things slightly backwards and you need it to work in browsers that don't support :not
:
div[data-pid] {
color: green;
}
div[data-pid=""] {
color: inherit;
}
That will make all the div
s with non-empty data-pid
s green.
Fiddle here: http://jsfiddle.net/ZuSRM/
Upvotes: 44
Reputation: 78671
Looks ugly, but something like this should do it:
[data-pid]:not([data-pid=""])
With a little Javascript you could also add classes, if you need to support older browsers.
Upvotes: 46