只是想看看我想出的这个想法是否有一个纯 CSS3 解决方案。
基本上,如果用户导航到http://example.com
,我想在我的页面上显示一个元素,比如<section id="main" />
。但是,如果访问http://example.com/#pics
,我想展示一个照片库。
我知道这可以用 JQuery 完成,但我正在尝试用 CSS3 做尽可能多的事情,这只是一个实验性网站,所以浏览器支持不是优先事项,但我对后备很感兴趣。
只是想看看我想出的这个想法是否有一个纯 CSS3 解决方案。
基本上,如果用户导航到http://example.com
,我想在我的页面上显示一个元素,比如<section id="main" />
。但是,如果访问http://example.com/#pics
,我想展示一个照片库。
我知道这可以用 JQuery 完成,但我正在尝试用 CSS3 做尽可能多的事情,这只是一个实验性网站,所以浏览器支持不是优先事项,但我对后备很感兴趣。
此答案假定您正在选择具有“hideme”类的元素。根据您的情况进行调整。
任何类型的“如果不是”都可以用:not()
伪类来完成。在这种情况下:
.hideme:not(:target) {display: none;}
但是,浏览器对此的支持非常低,因此您应该这样做:
selector {do something}
selector:target {cancel the something}
现在,这有点棘手,display
因为不同的元素有不同的默认值,但它visibility
是您的一个选项:
.hideme {visibility: hidden;}
.hideme:target {visibility: visible;}
或者或另外,您可能能够使用position:absolute
和position:static
从文档流中删除所选项目。
查看 :target 选择器和 :not 选择器
你可以做一些事情
div:not(:target){
display:none
}
#main:target {
display:block;
}
#pics:target {
display:block;
}
参考:
http ://www.w3.org/TR/selectors/第 6.6.7 节是 :not 选择器(他们的文件中没有目标)
和
您可以将代码包装在多个容器中,这样您就可以使用目标伪类来选择您需要的每个元素。
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100" version="1.1">
<style>
/* hide elements by default */
.hide {
display: none;
}
/* show the elements by target */
#one:target .one,
#two:target .two {
display: block;
}
/* BONUS: using this technique, you can select other elements */
#one:target .default,
#two:target .default {
display: none;
}
/* some colors... */
.one {
fill: red;
}
.two {
fill: yellow;
}
</style>
<g id="one">
<g id="two">
<rect width="200" height="100" stroke="black" stroke-width="2" fill="green"/>
<circle class="hide one" cx="50" cy="50" r="20"></circle>
<circle class="hide two" cx="100" cy="50" r="20"></circle>
<circle class="default" cx="150" cy="50" r="20"></circle>
</g>
</g>
</svg>
也许这不是一个优雅的解决方案,但它确实有效。