CSS选择器、优先级以及!important知识总结

html-css026

CSS选择器、优先级以及!important知识总结,第1张

关于CSS选择器,首先请看这里: CSS 选择器参考手册

通过以上,我们可以将CSS选择器分为以下几种:

<script async src="//jsfiddle.net/hysunny/3gwbeu3v/embed/html,css,result/"></script>

示例:

说明:以下E表示元素,attr表示属性,val表示属性的值。

说明:以下E表示元素

示例:

示例:

示例:

示例:

E:not(s) ,匹配不符合当前选择器的任何元素

示例:

E:target ,匹配文档中特定"id"点击后的效果

示例:

这里我们简单讨论下后代元素选择器和子元素选择器的区别

示例

CSS优先级是指CSS样式在浏览器中被解析的 先后顺序 。

多重样式(Mutiple Styles):如果外部样式、内部样式和内联样式同时应用于同一个元素,就是多重样式的使用情况。

一般情况下,( 外部 样式)External style sheet <( 内部 样式)Internal style sheet <( 内联 样式)Inline style

例外 :如果外部样式放在内部样式的后面,则外部样式将会覆盖内部样式。

示例:

给不同的选择器分配不同的权值

解释:

示例

结果:标签内的数据显示为蓝色。

比较样式的优先级是,只需统计不同选择器的个数,然后与对应的权值相乘即可。根据结果便可得出优先级。

看到这里,有些同学是不是对!important有点迷惑呀 为什么有了它,就优先级最高呐 下面我们再来详细讲一讲!important~

!important 是CSS1就定义的语法,作用是提高指定样式的应用优先权。

语法格式: {cssRule !important} ,即写在定义的最后面,例如: box { color: red !important}

声明了 !important 的样式,具有最高的优先级,相当于写在最下面(最后定义)

IE 6.0 不完全 支持!important

IE支持重定义中的!important,例如:

你将会发现定义了样式 class="yuanxin" 时,在IE下,字体显示为红色(#e00)。

但不支持同一定义中的 !important 。例如:

此时在IE6下不支持,你将会发现定义了样式 class="yuanxin" 时,字体显示为黑色(#000)。

解释

important的样式属性和覆盖它的样式属性单独使用时(不在一个{}里),IE 6.0认为!important优先级较高,否则当含!important的样式属性被同一个{}里的样式覆盖时,IE 6.0认为!important较低!

再举一个例子:

因为IE 6.0一直都不完全支持这个语法,而其他的浏览器都支持。因此我们就可以利用这一点来分别利用!important,我们可以针对IE和非IE浏览器设置不同的样式,只要在非IE浏览器样式的后面加上!important。

完。

总结内容参考以下:

w3school_CSS 选择器参考手册

阮一峰_CSS选择器笔记

css选择器优先级深入理解

CSS 的优先级机制[总结]

十分感谢你们的分享 n(*≧▽≦*)n

注:原文章首发于: CSS选择器、优先级以及!important知识总结 ,现迁移至此。

<script async src="//jsfiddle.net/hysunny/3gwbeu3v/embed/html,css,result/"></script>

1、类型选择器

CSS中的一种选择器是元素类型的名称。使用这种选择器(称为类型选择器),可以向这种元素类型的每个实例上应用声明。例如,以下简单规则的选择器是H1,因此规则作用于文档中所有的H1元素。

2、简单属性选择器

CLASS属性

CLASS属性允许向一组在CLASS属性上具有相同值的元素应用声明。BODY内的所有元素都有CLASS属性。从本质上讲,可以使用CLASS属性来分类元素,在样式表中创建规则来引用CLASS属性的值,然后浏览器自动将这些属性应用到该组元素。

类选择器以标志符(句点)开头,用于指示后面是哪种类型的选择器。对于类选择器,之所以选择句点是因为在很多编程语言中它与术语"类"相关联。翻译成英语,标志符表示"带有类名的元素"。

ID属性

ID属性的操作类似于CLASS属性,但有一点重要的不同之处:ID属性的值在整篇文档中必须是唯一的。这使得ID属性可用于设置单个元素的样式规则。包含ID属性的选择器称为ID选择器。

需要注意的是,ID选择器的标志符是散列符号(#)。标志符用来提醒浏览器接下来出现的是ID值。

STYLE属性

尽管在选择器中可以使用CLASS和ID属性值,STYLE属性实际上可以替代整个选择器机制。不是只具有一个能够在选择器中引用的值(这正是ID和CLASS具有的值),STYLE属性的值实际上是一个或多个CSS声明。

通常情况下,使用CSS,设计者将把所有的样式规则置于一个样式表中,该样式表位于文档顶部的STYLE元素内(或在外部进行链接)。但是,使用STYLE属性能够绕过样式表将声明直接放置到文档的开始标记中。

3、组合选择器类型

可以将类型选择器、ID选择器和类选择器组合成不同的选择器类型来构成更复杂的选择器。通过组合选择器,可以更加精确地处理希望赋予某种表示的元素。例如,要组合类型选择器和类选择器,一个元素必须满足两个要求:它必须是正确的类型和正确的类以便使样式规则可以作用于它。

外部信息:伪类和伪元素

在CSS1中,样式通常是基于在HTML源代码中出现的标记和属性。对于很多设计情景而言这种做法完全可行,但是它无法实现设计者希望获得的一些常见的设计效果。

设计伪类和伪元素可以实现其中的一些效果。这两种机制扩充了CSS的表现能力。在CSS1中,使用伪类可以根据一些情况改变文档中链接的样式,如根据链接是否被访问,何时被访问以及用户和文档的交互方式来应用改变。借助于伪元素,可以更改元素的第一个字母和第一行的样式,或者添加源文档中没有出现过的元素。

伪类和伪元素都不存在于HTML也就是说,它们在HTML代码中是不可见的。这两种机制都得到了精心设计以便能够在CSS以后的版本中做进一步地扩充也就是说实现更多的效果。

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。

name和id

name原来是为了标识之用,但是现在根据规范,都建议用id来标识元素。

以下只能用name: 1.表单(form)的控件名,提交的数据都用控件的name而不是id来控制。因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文档中唯一的。此外浏览器会根据name来设定发送到服务器的request。因此如果用id,服务器是无法得到数据的。 2.frame和window的名字,用于在其他frame或window指定target。 以下只能用id: 1.label与form控件的关联, <label for="MyInput">MyInput</label> <input id="MyInput"type="text"> for属性指定与label关联的元素的id,不可用name替代。 2.CSS的元素选择机制,以#MyId的方式指定应用样式的元素,不能用name替代。 3.脚本中获得对象: IE支持在脚本中直接以id(而不是name)引用该id标识的对象。例如上面的input,要在脚本中获得输入的内容,可以直接以MyInput.value来获得。 如果用DOM的话,则用document.getElementById("MyInput").value,如果要用name的话,通常先得到包含控件的form,例如document.forms[0],然后从form再引用name,注意这样得到的是经过计算后将发送给服务器的值。 name与id的其他区别是: id要符合标识的要求,比如大小写敏感,最好不要包含下划线(因为不兼容CSS)。而name基本上没有什么要求,甚至可以用数字。

class和id

在一个HTML网页中,id是唯一的,即只有某一个标签,或某一个块的标识符是这个id。class可重复使用,用来根据用户定义的标准对一个或多个元素进行标记和定义。

实际使用中,class可能对文字的排版等比较有用,而id则对宏观布局和设计放置各种元素较有用。

综合例子:网页代码有<div id=m_blog> <div class=opt> <a id=myLink href="xxx"> </div></div>

用CSS控制这个链接的停留样式,可以这样写 #m_blog div.opt a:hover{color:#D57813} 或 #myLink:hover{color:#D57813}