曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3495|回复: 0
打印 上一主题 下一主题

[CSS] 关于选择器的一些小结

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2016-12-13 00:04:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各种选择器的使用场合

1. 类选择器一般是提供给一类具有相同特性的元素来使用,这些元素数量一般比较多,在一个页面或整个站点中多处都会出现且要求具有同一风格的。

2. id 选择器往往提供给某一个元素来使用,而不是像类那样要提供给多人使用。

3. 在不清楚将来有多少个 html 元素要使用该样式时,建议使用类选择器,而不是 id选择器。这是因为,如果在网页中有使用 javascript ,它会通过 id 来获取元素,而如果多个元素共用同一个 id 时,javascript 就会无法工作。

4. 类选择器的优先级要高于 HTML 标签选择器。

5. 父元素的一些样式会被子元素继承,如果子元素已经有同样的样式定义,那么以子元素的为准。

6. 对于同一个 html 标签,如何进行不同的 CSS 样式指定?方法是:
html 标签.类选择器 {
   属性名:属性值;
}

7. 伪类选择器一般用来控制超链接相关样式。

8.  希望针对不同的超链接指定不同的样式怎么办?方法是在超链接标签里再加一个 class ,示例如下:
a.lingyige-a:link {
   color:red;
}
<a class="lingyige-a" href="http://www.groad.net">曲径通幽</a>

如果只是 a:link { } ,这是一种伪类选择器的写法,描述的是所有 <a> 标签下的普通超链接样式。由于要单独指定某个 <a> 标签,那么必须要有个名称将其区分,而增加一个类名是个比较好的选择,因此就写成: a.lingyige-a:link ,表示描述 “名字为 lingyige-a” 的<a> 标签下的普通链接样式。

9. 如果希望所有的元素都符合某一种样式,可以使用通配符选择器。
比如 * { margin:0; padding:0} 可以让所有 html 元素的外边距和内边距都默认为0,有时会特别有用(不同浏览器默认的边距并不一定相同,如此清零设置后,以后再以该绝对值来算其它元素的距离就不会出现偏差)。纵观许多大网站,都会用如此设置。

10. 多元素选择器 --- 组合选择器的语法:
.ad1, .ad2, .ad3 {
.....
}

将 .ad1, .ad2, .ad3 3个元素的共同描述部分放到一起。注意,上面示例中的 3 个元素是类选择器,但组合选择器并非只能对类选择管用,组合到一块的元素还可以是 id 选择器,标签选择器等。此外,如果样式定义发生冲突,比如 A 和 B 同时有定义相同的样式,以后面定义的为准。

11. 类选择器的优先级要高于标签选择器。
12. 在使用后代选择器时,应尽量使用标签选择器,或者类选择器和标签选择器的组合。

13. 一个元素最多有一个 id 选择器,但可以有多个类选择器,比如:

<ul class="class-1 class-2">

为什么这么做?比如一个互联网门户公司,一帮员工写了一堆代码,过了几年后离职,接着又一帮员工进来,他们不敢改原来的代码(大网站改代码牵一发而动全身),因此自己又写了一套代码对之前的进行约束,这样一个元素日积月累的,就会看到有许多个类在描述。需要注意一点的是,当两个类选择器的优先级相同时,且描述发生了冲突,以写在 style 内容中的后面那个为准。
14. 当一个元素被多个选择器同时限定时,优先级是
!important设置 > 行内样式设定 > id 选择器 > 类(伪类)选择器 > html 选择器 > 通配符选择器 > html 属性设置 > 继承的样式属性(所谓“层叠”,就是体现在一层一层的属性继承上,不过层叠的样式是文本/字体的属性) 。比如下面代码:
<style type=text/css">
   .span1 {
        color:red;
}
</style>
... ...
<body>
<span class="span1"  style="color:blue;">什么颜色</span>
</body>

上面的代码使得 “什么颜色” 4 个字呈蓝色显示。这是因为,行内样式的优先级高于类选择器。如果在上面代码的 color:red; 改为 color:red !important; ,那么结构是那几个字呈现红色。
15. 组合选择器的优先级

(1)对组合选择器的每一个单项选择器从大到小的一次比较,谁的更高一级的单项选择器的数量多,谁的优先级高。如果数量相等,则继续比较下一级的单项选择器的数量多少,依此类推。

(2)如果最终比较的结果优先级方面完全一样,则后面的设定会覆盖前面的设定。

(3)简单公式,假定 id 的优先级值为 1000; class 的优先级值为 100; html 标签的优先级值为 10 。进行求和比较,值越大,那么该组合选择器的优先级就越高。但是一定要注意,要求组合层级不能过多,否则这个公式就是错误的,因此该公式并不是一个严谨的公式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 10:42 , Processed in 0.076042 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表