为什么.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-type
select器只能在节点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器。 在你的例子中,你尝试匹配一个class
select器。 这就是为什么它不工作。
一个例子: 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)
就是做了什么