- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Mon, 21 Jun 2010 10:04:28 -0700
- To: Eduard Pascual <herenvardo@gmail.com>
- Cc: Gabriele Romanato <gabriele.romanato@gmail.com>, www-style@w3.org
On Fri, Jun 18, 2010 at 9:26 AM, Eduard Pascual <herenvardo@gmail.com> wrote: >> I stumbled on this problem while viewing a demo on scrollable >> tables that made a large use of something like the following: >> >> span + span + span {} >> >> Actually, this may be rewritten using a :nth-child() combinator. > Can it? If you have a markup like this: > <div> > <span>...</span> > <span>...</span> > <span>...</span> > </div> > then either div>span+span+span or div>span:nth-child(3) would do. > However, what would happen if you had something like this? > <div> > <span>...</span> > <img ... alt="Now things are getting funnier!"> > <span>...</span> > </div> > Then we get a difference between what the selectors would match: > div>span+span+span matches nothing, while div>span:nth-child(3) > matches the <span> after the <img>. The actual equivalent of "span:nth-sibling(3)" is "* + * + span". Both of these would match the same things in both examples, and in your example below. > Now, let's take things even crazier: > <div> > <span>...</span> > <span>...</span> > <span>...</span> > <span>Which selectors shall match this?</span> > </div> > Now the fun really begins: obviously, div>span:nth-child(3) will match > the 3rd <span>, but not the fourth. Less obviously, div>span+span+span > will match *both* the third and the fourth <span>s! (Did you expect > it?). As a matter of fact, it's possible to match it with > div>span:nth-child(3+1n) or something like that (sorry, I'm unsure now > about the exact syntax). To match only the third <span> with a > '+'-based selector, the simplest way I can think of would be > div>span:first-child+span+span Right, that's the simplest way to match only the 3rd child using combinators. Also, correct, if you want to match from the 3rd child onward, use :nth-child(3+n). (When dealing with any of this family of pseudoclasses, the elements are numbered from 1 upwards, and "n" starts at 0 and goes upwards.) Overall, I believe that this selector is exactly equivalent in terms of power to the :nth-child() pseudoclass, but appears to be more confusing to use. ~TJ
Received on Monday, 21 June 2010 17:05:21 UTC