Reputation: 463
i used :empty
selector in .error
class. the problem is that even when there is no content inside the div with class of error, the error class is not removed completely.
when i tested in firebug, i found that the div still has some whitespace and when i remove that extra spaces, the div then disappears.
.error{ border:solid 1px #ff0000; color:#ff0000;}
.error:empty{ display:none;}
the div shows like this on debugging:
<div class="error"> </div>
that extra spaces you see is the problem.
Is there any way i can show
in css to display:none ? pls help.
Upvotes: 22
Views: 27801
Reputation: 381
If you only have specific elements as children you could try this:
.error:not(:has(yourChildElements)) {
display: none;
}
Upvotes: 7
Reputation: 113
Here's an alternative:
.error:not(:has(*)) {
display: none;
}
This will select a class if it has nothing inside.
Upvotes: 2
Reputation: 928
The :empty
pseudo-class doesn't select elements, containing elements or text (and white space is text).
However, there is now the experimental :blank
pseudo-class which selects elements, containing nothing or just white space, and .error:blank
would select that <div>
element. You should avoid using experimental features in your production code, though.
Upvotes: 2
Reputation: 388446
it is because <div class="error"> </div>
(demo) is not empty, it has a text node as the child.
The :empty pseudo-class represents any element that has no children at all. Only element nodes and text (including whitespace) are considered. Comments or processing instructions do not affect whether an element is considered empty or not.
Try
<div class="error"></div>
Demo: Fiddle
Upvotes: 25