为什么.class:最后一个types不工作?

为什么这不起作用? http://jsfiddle.net/84C5W/1/

<style> p{ display : none; } p.visible:last-of-type { display : block; }​ </style> <div> <p class="visible">This should be hidden</p> <p class="visible">This should be displayed</p> <p class="">This should be hidden</p> </div> 

事实上,我的<p>中没有一个是可见的。 如果我在样式表中删除对“.visible”的引用,这会显示div中的最后一个<p>,但这不是我想要的。

当然,我一直只能保留一个“.visible”,但这是为了揭示.js的演示文稿,我没有控制javascript。 只有样式表…

编辑 :好的,很明显.class:最后types不起作用。 正如@Justus Romijn所说:最后一类伪类只是为了select元素而devise的(在我看来这是非常有限的,并且把这个特定的伪类放在一个或多或less的无用状态)。

无论如何,我想在这一点上重申我的问题:如何selectdiv中的最后一个元素与类“.visible”? 我不想为此使用Javascript。

我做了一些testing,但是last-of-typeselect器只能在节点select器上工作,而不是在类名上工作。

HTML:

 <p class="visible">First paragraph.</p> <p class="visible">Second paragraph.</p> <p>Third paragraph.</p> 

CSS:

 p:last-of-type{ /* this will be applied in the third paragraph bacause the pseudo-selector is applied to nodes only */ font-weight: bold; } p.visible:last-of-type { /* this does not get applied, because you are using the pseudo-selector with a class. */ display: block; } 

从W3C :

The last-of-type伪类表示一个元素,它是其父类的子元素列表中的types的最后一个兄弟元素。

因为它必须是兄弟姐妹,所以它可能会忽略类名,因为那样你就可以将其与其他元素混合在一起。

为什么没有后面父母select器 这可能会通过在页面上dynamic更改一个类名来潜在地locking大量网页。 大量使用CSS3select器在浏览器中已经很重,不推荐使用。

Dave Hyatt在2008年从事WebKit实现的同时, 提到了为什么要避免这些实现的一些原因 :

通过父母select器,意外地导致文档广泛的卑躬屈膝变得非常容易。 人们可以并将滥用这个select器。 支持它是给人们一大堆绳子,

关于CSS3select器的可悲的事实是,如果你关心页面性能,他们真的不应该被使用。 用类和id来装饰你的标记,并且单纯地匹配这些标记,同时避免所有兄弟姐妹,后代和子select器的使用,实际上会使页面在所有浏览器中performance得更好。

问题是:last-of-type只匹配元素select器。 在你的例子中,你尝试匹配一个classselect器。 这就是为什么它不工作。

一个例子: http : //dabblet.com/gist/4144885

定位倒数第二个标记。

 .visible:nth-last-of-type(2); 

为了将来的参考,这将包括在CSS级别4中: https : //www.w3.org/TR/selectors4/#the-nth-last-match-pseudo

浏览器支持在写作的时刻是不存在的: http : //css4-selectors.com/selector/css4/structural-pseudo-class/

当这个准备就绪时,这应该是解决scheme:

 p { display : none; } p.visible:nth-last-match(0) { display : block; } 
 <div> <p class="visible">This should be hidden</p> <p class="visible">This should be displayed</p> <p class="">This should be hidden</p> </div> 

在我的情况下,我犯了一个错误。

 p.visible : last-of-type (x) p.visible:last-of-type (o) 

就是做了什么