We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
css中有诸多选择器,运用得当的情况下,能让你少些不少的js,同时从容应对浏览器兼容的烦恼。
大家先看看 阮一峰 老师,在2009年总结的css选择器的文章:css选择器笔记
阮一峰
我们知道 基本选择器 包括:通用选择器、元素选择器、类选择器 和 ID选择器。
基本选择器
通用选择器
元素选择器
类选择器
ID选择器
这些这是概念,告诉你css有这些选择器,但是你知道他们在实际生产中如何使用,且有哪些规则吗?
1、通用选择器
//对所有元素都生效 *{ padding:0; margin:0; box-sizing:border-box; }
2、元素选择器
//仅对p元素生效 p{ margin: 5px 0; }
3、类选择器
//仅对某一类元素生效 //这个与【元素选择器】有点类似,只是【类选择器】中的【类class】是自己定义的,而【元素选择器】中的【元素element】是html自带的。 .demo{ color : blue; }
4、ID选择器
//仅对某一个元素生效 #demo1{ color : red; }
在面试的时候,面试官可能会问你选择器的优先级?为什么选择器还有优先级呢?因为css也是被顺序执行的,同时对某一个元素而言,它身上可能有多个选择器同时作用,那么自然而然就需要有个优先级来处理,这样我们最终看到的效果,就是这些共同作用的结果。
比如:
p{ color : red; } #p1{ color : blue; } .demo #p1{ color : green; }
看看以上的例子,你知道最终 #p1 这个元素会显示什么颜色吗?这里就涉及到选择器的组合使用和优先级的问题了。
#p1
单优先级
!important > ID选择器 > 类选择器 > 元素选择器 > 通用选择器
!important
组合优先级
如何通过权重来知道最终生效的样式呢?看看上面的示例。
p
.demo #p1
所以,最终的结果是:green
E F
E > F
这2个区别就在于,作用的程度不一样,你说儿子是不是后台呢?当然是,举个例子就明白了。
<ul class='list1'> <li>a1</li> <li> <ul class='list2'> <li>b1</li> </ul> </li> </ul>
以上代码,如果使用儿子选择器,则list2中的li不会生效。
.list > li{ color : red; }
但是,如果使用后台选择器,则代码中所有li生效,因为list2中的li相当于孙子,依然是后代嘛!
.list li{ color : red; }
有这样一个需求,下来菜单中,每个菜单之间有一条横线。怎么实现呢?
<ul class='nav'> <li>menu1</li> <li>menu2</li> <li>menu3</li> </ul>
你可能这么写:
.nav li{ border-bottom : 1px solid #ccc; }
这个问题在哪里呢?就是最后一个li底部也有一条线,这个是我们不想看到的。那你可能会用 border-top,那不一样么?第一个顶部也会有一条线。
border-top
好了,聪明一点的你,可能会用伪类:
.nav li{ border-bottom : 1px solid #ccc; } .nav li:last-child{ border-bottom:none; }
问题在chrome上解决了,但是到IE8以下的浏览器一看,没生效!肿么办?继续优化呗!
.nav li{ border-bottom : 1px solid #ccc; } .nav .last{ border-bottom:none; }
然后在最后一个li上增加一个class:
<ul class='nav'> <li>menu1</li> <li>menu2</li> <li class='last'>menu3</li> </ul>
好的,问题总算解决了,但是如果需求说还要在最后增加一个菜单,于是乎,又得增加一行li,同时把之前的class,挪到最后一个上写。
写了这么多,你知道我想表达什么意思么?这里就是 相邻选择器 的妙用的地方,以下这个写法,相当漂亮:
相邻选择器
//与li相邻的li .nav li+li{ border-top : 1px solid #ccc; }
以上代码就是除了第1个li元素外,其余li都顶部有border。因为相当于第1个li,第2个是它相邻的;相对于第2个li,第3个是它相邻的。
当然这种写法的含义就是:除第1个外其余的。
除第1个外其余的
The text was updated successfully, but these errors were encountered:
sunmaobin
No branches or pull requests
css中有诸多选择器,运用得当的情况下,能让你少些不少的js,同时从容应对浏览器兼容的烦恼。
手册
大家先看看
阮一峰
老师,在2009年总结的css选择器的文章:css选择器笔记解惑
一、CSS通用选择器及其优先级
我们知道
基本选择器
包括:通用选择器
、元素选择器
、类选择器
和ID选择器
。这些这是概念,告诉你css有这些选择器,但是你知道他们在实际生产中如何使用,且有哪些规则吗?
1.1 基本用法
1、通用选择器
2、元素选择器
3、类选择器
4、ID选择器
1.2 组合套路
在面试的时候,面试官可能会问你选择器的优先级?为什么选择器还有优先级呢?因为css也是被顺序执行的,同时对某一个元素而言,它身上可能有多个选择器同时作用,那么自然而然就需要有个优先级来处理,这样我们最终看到的效果,就是这些共同作用的结果。
比如:
看看以上的例子,你知道最终
#p1
这个元素会显示什么颜色吗?这里就涉及到选择器的组合使用和优先级的问题了。单优先级
!important
>ID选择器
>类选择器
>元素选择器
>通用选择器
组合优先级
!important
权重:1000ID选择器
权重:100类选择器
权重:10元素选择器
权重:1通用选择器
权重:0(就是最后被执行的,相当于没权重)如何通过权重来知道最终生效的样式呢?看看上面的示例。
p
元素选择器,结果是:1#p1
ID选择器,结果是:100.demo #p1
类选择器 + ID选择器,结果是:10 + 100 = 110所以,最终的结果是:green
二、组合选择器及其特殊技巧
2.1 两个易混淆的概念
E F
,后台选择器E > F
,儿子选择器这2个区别就在于,作用的程度不一样,你说儿子是不是后台呢?当然是,举个例子就明白了。
以上代码,如果使用儿子选择器,则list2中的li不会生效。
但是,如果使用后台选择器,则代码中所有li生效,因为list2中的li相当于孙子,依然是后代嘛!
2.2 相邻选择器的妙用
有这样一个需求,下来菜单中,每个菜单之间有一条横线。怎么实现呢?
你可能这么写:
这个问题在哪里呢?就是最后一个li底部也有一条线,这个是我们不想看到的。那你可能会用
border-top
,那不一样么?第一个顶部也会有一条线。好了,聪明一点的你,可能会用伪类:
问题在chrome上解决了,但是到IE8以下的浏览器一看,没生效!肿么办?继续优化呗!
然后在最后一个li上增加一个class:
好的,问题总算解决了,但是如果需求说还要在最后增加一个菜单,于是乎,又得增加一行li,同时把之前的class,挪到最后一个上写。
写了这么多,你知道我想表达什么意思么?这里就是
相邻选择器
的妙用的地方,以下这个写法,相当漂亮:以上代码就是除了第1个li元素外,其余li都顶部有border。因为相当于第1个li,第2个是它相邻的;相对于第2个li,第3个是它相邻的。
当然这种写法的含义就是:
除第1个外其余的
。The text was updated successfully, but these errors were encountered: