The Tilde is an Amazing CSS Selector
nicholsonws.com
nicholsonws.com
input:checked ~ #main > #findMe
… described thusly: “With the tilde character on #container input:checked would be able to target #findMe …”Please note the tilde has nothing to do with #findMe. The tilde only relates the input element and #main, which are in-order siblings. (Adjacent in-order siblings, in fact, so + would have worked just as well as ~ in this example.)
Please also note that ~ does not select siblings; it selects following siblings.
<i>italic</i> <a href="#">link</a> <b>bold</b>
With the above HTML, the following selectors are NOT equivalent: i ~ b {
/* this will match the bold tag above */
}
b ~ i {
/* this will NOT match any elements in this example */
}To illustrate:
<p>1</p>
<p class="two">2</p>
<p>3</p>
.two ~ p { color:red; }
// only "3" will be red
That prevents what would be the most useful cases, like unmarking sibling menu items, slides and the like.This post could be improved by using classes:
#container input:checked ~ .main > .findMe { ... }
But really, the sibling selector is powerful enough that you might not need classes at all. I think the following selector makes a much more powerful statement of the kind of thing you can do now that you couldn't before: input:checked ~ div span { ... }1. total lack of semantic value - you cannot possibly get more meaningless than “span inside a div” there. It makes for extremely brittle CSS.
2. You should be using classes rather than elements in your selectors when possible, not only to make the code more maintainable and flexible, but also because it’s more performant (if you care).
That selector is not to find it, it's to say #main IS a sibling. If #main exists but is not a sibling then apply different css to it.
These types of things are great, the more we move away from JS DOM hacks the better.
"The tilde (~) selector lets you target a sibling element. That is, an element that shares the same parent"
Could then explain how it's different than the + selector.
"This differs from the + selector which will only find an adjacent sibling (immediately following)."
I'd consider comparing it to the child and descendant selector, if I could word it properly. This is what I have which I'm not happy with:
"In some ways, the differences between + and ~ are like the differences between the child selector (>) and the descendant selector (a space), in that #header > a will only a elements directly under #header, while header a will target all a elements under #header, regardless of depth.
Unfortunately, that is not true. It only matches following siblings.
See my JSFiddle demo: http://jsfiddle.net/alanhogan/sSVCG/
(Also, HTML comments between elements apparently mess up IE7 and IE8.)
#container #findMe { /* ... */ }
#container input:checked ~ #main > #findMe { /* ... */ }
(or) #container > #findMe { /* ... */ }
#container > input:checked ~ #main > #findMe { /* ... */ }http://cssdeck.com/item/348/pure-css3-content-slider
http://cssdeck.com/item/308/awesome-rotating-css-image-slide...
http://cssdeck.com/item/153/solitary-css3-slider-rotation-tr...
http://cssdeck.com/item/363/simply-css-image-slide
http://cssdeck.com/item/364/pure-css3-slideshow-without-page...
Why do some people call these sliders?
Things that show a series of images are called carousels (because they rotate!). And what if your “slider” (carousel) fades instead of transitioning with a horizontal wipe? Not sliding then! Sliders are things you drag and drop to select a value within a range (like a volume slider).
Had not seen carousels called “sliders” until two days ago, but I hate this misnomer more than anything.
Please also note that both Bootstrap and YUI call this pattern a “carousel,” and some of the most popular jQuery plugins do, as well.
I don't think there is an accepted universal term. I try to stick to what it is actually doing...if it fades, it's a fader. If it slides it's a slider.
Why choose an ambiguous word when a specific one exists?
Keep in mind the point of calling it anything at all is communication, and communication is a lot harder if people don’t hear what you mean.
Call it carousel, and someone either gets it, or asks what a carousel is.
Call it a slider, and half of your audience assumes you meant something else entirely.
(Also, saying a term is not “universal” is pretty much a tautology in the real world, and it is not a valid argument. And a carousel that fades between items is still rotating, just as ads are “in rotation” on the radio even though nothing turns around: yes, rotation is a somewhat ambiguous word, too.)