Part 2-2 CSS选择器

CSS选择器概况

选择器{
  属性: 值; 
}
  • CSS选择器类似于地址,通过选择器的地址作用到标签里.

基础选择器

元素选择器
元素名{
    属性:值;
}
  • 根据指定的元素, 在当前界面中找到所有的该元素, 然后设置属性.
  • 因为选中的是所有的该元素,所以会在相同元素不同属性的时候显示出弱势.

Id选择器
#id名称{
    属性:值;
}
------------------------
<p id="id名称">......</p>
  • 根据指定的id名称找到对应的标签, 然后设置属性.
  • 在一个HTML文档中的id是不可以重复的.
  • Id的值只能由字母数字下划线,并且不能由数字开头.
  • Id的值不能是HTML标签的名称.

类选择器
.类名{
    属性:值;
}
------------------------
<p class="类名 类名">......</p>
  • 根据指定的类名称找到对应的元素, 然后设置属性.
  • 在一个HTML文档中的class的值是可以重复的.
  • 在编写class选择器时一定要在class名称前面加上点.
  • Class的值只能由字母数字下划线,并且不能由数字开头.
  • Class的值不能是HTML标签的名称.

通配符选择器
*{
    属性:值;
}
  • 给当前界面上所有的标签设置属性.

关系选择器

后代选择器
选择器1 选择器2{
  属性: 值;
}
  • 找到所有选择器1, 然后在选择器1下面去查找选择器2选中的元素, 设置属性.
  • 放进选择器1中的所有选择器2都是后代.
  • 后代选择器可以通过空格一直延续下去.

子元素选择器
选择器1 > 选择器2{
    属性: 值;
}
  • 先找到所有选择器1, 然后在选择器1中查找所有直接关系的选择器2,设置属性.
  • 子元素选择器选中父子关系的元素,不会选中被其他元素嵌套的元素.
  • 子元素选择器可以通过 > 符号一直延续下去.

相邻兄弟选择器
选择器1 + 选择器2{
    属性:值;
}
  • 选择器1后面紧跟的那个选择器2设置属性.

通用兄弟选择器
选择器1 ~ 选择器2{
    属性:值;
}
  • 选中选择器1后面的所有选择器2选中的所有元素,设置属性.

伪类选择器

普通伪类选择器
选择器:关键字{
  属性: 值;
}
--------------------------------
<a href="#">内容......</a>
常用伪类关键字 作用
link a元素在未被访问前的CSS样式
visited a元素在被访问过后的CSS样式
hover 鼠标停浮在选择器上的CSS样式
active a元素在被激活时的CSS样式

结构性伪类选择器

E:first-child和E:last-child
  • first-childlast-child选择器用来定位第一个和最后一个特定的子元素【每个结构会重新计算】.
  • 例如以下代码,会选中p1p3p4p6.
<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p4</p>
<p>p5</p>
<p>p6</p>
</div>
E:nth-child(n)和E:nth-last-child(n)
    <style>
        p,h1{
            height:30px;
            width:300px;
            border:1px solid #00A2E9;
        }
        p:nth-child(2n){
            background-color: #64b0ff;
        }
    </style>
-------------------------------------------
<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p1</p>
<h1>h1</h1>
<p>p2</p>
<p>p3</p>
</div>
运行效果
  • nth-child(n) 选择器用来定位某个父元素一个或多个特定的子元素【每个父元素下的选择器会重新计算参数n】. 其中n是其参数,取值是整数值表达式(2n+1、-n+5)关键词(odd、even).

  • 但是这种方法有很大的缺陷,渲染的原理是选中该父元素下的第n个子元素,然后核对选中的是否是特定的子元素,再进行渲染.但如果不是特定的子元素,那么该元素不会被渲染,并且参数n会直接跳到下一个取值.【如图h1没有被渲染,但是p2也没有被渲染】

  • nth-last-child(n) 选择器和前面的nth-child(n)选择器一样,不同点只是从某父元素的最后一个子元素开始计算,这里的使用就不举例说明了.

E:nth-of-type(n) 和E:nth-last-of-type(n)
  • E:nth-of-type(n)E:nth-child(n)很相似,参数n 的取值规律一样.

  • 这个方法正好弥补了E:nth-child(n)的缺陷,用E:nth-of-type(n)来定位于父元素中某种类型的子元素是非常好用的.

  • E:nth-last-of-type(n) 选择器和前面的E:nth-of-type(n)选择器一样,不同点只是从某父元素的最后一个子元素开始计算,这里的使用就不举例说明了.


伪元素选择器

<style>
  选择器::伪元素{
    content:" "
</style>
常用伪元素选择器 作用
::after 在选中的元素的后面创建一个子元素
::before 在选中的元素的前面创建一个子元素
::first-letter 在选中的元素的第一个字
::first-line 在选中的元素的第一行

属性选择器

<style>
  E[attribute]{
    属性:值
}
</style>
所有元素选择器 作用 出自
[attribute] 选中有该属性的该元素 CSS2
[attribute=value] 选中有该属性且属性的值等于Value的元素 CSS2
[attribute^=value] 选中有该属性且属性的值以Value开头的元素 CSS3
[attribute|=value] 选中有该属性且属性的值以Value开头的元素,但值必须是整个单词 CSS2
[attribute$=value] 选中有该属性且属性的值以Value结尾的元素 CSS3
[attribute*=value] 选中有该属性且属性的值包含Value CSS3
[attribute~=value] 选中有该属性且属性的值包含Value,但值必须是独立的 CSS2
  • [attribute|=value][attribute^=value]的区别在于[attribute|=value]中的只能找到value开头,并且value是被-和其它内容隔开的.
  • [attribute*=value][attribute~=value]的区别在于[attribute~=value]中的value必须被空格隔开的.

选择器优化

对于浏览器来说,解析每种选择器所耗费的时间并不是一样的。所以当我们使用选择器的时候也有必要了解如何才能写出最优选择器.

选择器效率

根据网站效率专家 Steve Souders 指出,各种 CSS 选择器的效率由高至低排序如下

*   id选择器(#myid)
*   类选择器(.myclassname)
*   标签选择器(div,h1,p)
*   相邻选择器(h1 + p)
*   子选择器(ul > li)
*   后代选择器(li a)
*   通配符选择器(*)
*   属性选择器(a[rel="external"])
*   伪类选择器(a:hover,li:nth-child)

在以下代码中我们可以通过很多种方法去选中它,如p.red#test[class="red"]等等. 但如按照执行效率来,id选择器是最佳的,其次是类选择器,然后是元素选择,最后才是属性选择器.

<p id="test" class="red">我用来测试选择器的优化</p>

选择器解读顺序

浏览器解读选择器,遵循的原则是从选择器的右边到左边读取.
**例如

<style>
  .list .item .item-tt{
    color:"blue";
  }
</style>

这个选择器中,浏览器先找的是.item-tt,然后继续向父级元素寻找.item,再找.list,这样才完成了最终的选择器匹配.
所以如果路径链越短,效率也就相应有所提高.


选择器参考手册

首先是W3school的选择器参考,归类很详细,非常适合入门学习:

或者直接参考选择器手册:


参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容