Ever had a case where you want to separate some test with a special character. But maybe some content is dynamic. And if not the first is visible - then the separator would be out of place - right?
This is a little solution I came up with in css using data attributes, empty selector and sibling selectors.
*:not(:empty) + [data-before]:before {
content: " " attr(data-before) " ";
}
Use like this
Use it like this with some conditional JSX syntax.
<p>
{tags && <span>{tags}</span>}
{date && <span data-before="-">{date}</span>}
</p>
This would output Tagname - May 4:th 2023 if tags
is available. And May 4:th 2023 when no tags
are available.
How it works
From left to right top to bottom. The star *
selector looks at every element. And then the :not(:empty)
will take any element that has content inside. That is not empty! Then we have the +
that will select the very next element after that. That element must have a data-before
attribute. And then we add the :before
pseudo element. In that before element we add content with spaces before and after and the content from the data attribute data-before
.
Hope this was useful or educational or something like that.
Until next time, Cheers!
Top comments (0)