当:target等于元素的id(简单)或:target
为空(不可能?)时,我需要 css3 选择器来定位元素。这很难解释,所以让我举一个简单的例子。
div {
background: blue;
}
div:target, div:no-target {
background: red;
}
但当然:no-target
伪类不存在;)。如果没有使用 Javascript ,有没有办法解决这个问题?提前谢谢!
答案 0 :(得分:27)
叹息。我觉得我正在复活一个死的话题,但它需要一个真正的答案。
仅使用CSS即可,只需使用:last-child
和general sibling combinator,:target ~ :last-child
形式:
.pages > .page:target ~ .page:last-child,
.pages > .page {
display: none;
}
/* :last-child works, but for some reason .page:last-child will not */
.pages > :last-child,
.pages > .page:target {
display: block;
}
修改:显然这与an older, previously mentioned, related post中接受的答案非常相似。
答案 1 :(得分:2)
它围绕着似乎在iOS中存在问题的this trick。它已在Safari中修复,所以也许它会在iOS 5中?
答案 2 :(得分:1)
我能想到的是,你有一些javascript可以检查哈希值是否为空。如果是这样,它会在body标签中添加一个名为“noHash”的类。然后,您可以使用CSS规则中提供noHash类的事实。
if (window.location.hash.length <= 1) {
document.body.className += " noHash";
}
然后,您的CSS可能是这样的:
div {
background: blue;
}
div:target, body.noHash div {
background: red;
}
如果在任何情况下用户可能会在事后添加哈希值,那么您可能需要注意这一点,以确保正确删除noHash类。
注意:您不必将类名添加到body标记中。您可以将其添加到涵盖您希望影响的所有对象的任何父对象。
答案 3 :(得分:1)
为什么不使用div:not(:target)
或div:target:empty
?
答案 4 :(得分:-1)
您可以使用选择器:not(:target)
。