7 CSS选择器

class 和 id 的使用场景?

class写专门的class通用和私有模块命名,id具有唯一性且优先级太高,用于操作唯一的元素,但是最好只作为js操作dom的挂钩,不添加样式

CSS选择器常见的有几种?

一、基本选择器
*:通用元素选择器,匹配任何元素
E:标签选择器,匹配所有使用E标签的元素
class选择器,匹配所有class属性中包含info的元素
id选择器,匹配所有id属性等于footer的元素
二、组合选择器

  • E,F:多元素选择器,用,分隔,同时匹配元素E或元素F
  • E F:后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
  • E>F:子元素选择器,匹配所有E元素的子元素F
  • E+F:毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
  • E~F:普通相邻选择器,匹配E元素之后的同级元素F(无论直接相邻与否)

三、属性选择器

  • [attr]
    表示带有以 attr 命名的属性的元素。
  • [attr=value]
    表示带有以 attr 命名的,且值为"value"的属性的元素。
  • [attr~=value]
    表示带有以 attr 命名的属性的元素,并且该属性是一个以空格作为分隔的值列表,其中至少一个值为"value"。
  • [attr|=value]
    表示带有以 attr 命名的属性的元素,属性值为“value”或是以“value-”为前缀("-"为连字符,Unicode编码为U+002D)开头。典型的应用场景是用来来匹配语言简写代码(如zh-CN,zh-TW可以用zh作为value)。
  • [attr^=value]
    表示带有以 attr 命名的,且值是以"value"开头的属性的元素。
  • [attr$=value]
    表示带有以 attr 命名的,且值是以"value"结尾的属性的元素。
  • [attr*=value]
    表示带有以 attr 命名的,且值包含有"value"的属性的元素。
  • [attr operator value i]
    在带有属性值的属性选型选择器表达式的右括号(]括号)前添加用空格间隔开的字母i(或I)可以忽略属性值的大小写(ASCII字符范围内的字母)

四、伪类
CSS伪类是添加到选择器的关键字,指定要选择的元素的特殊状态。例如,:hover 将在用户悬停在选择器指定的元素上时应用样式。

  • first-child:匹配元素E的第一个子元素
  • link :匹配素有未被点击的链接
  • visited :匹配所有已经被点击的链接
  • active :匹配鼠标已经在其上按下,但是还没有释放的E元素
  • root :匹配文档的根元素,对于HTML文档,就是HTML元素
  • nth-child(n) :匹配其父元素的第n个子元素,第一个编号为1
  • nth-last-child :匹配其父元素的第n个子元素,第一个编号为1
  • nth-of-type(n):与:nth-child作用类似,但是仅匹配使用同种标签的元素
  • hover :匹配鼠标悬停其上的元素
  • focus :匹配获得当前焦点的元素
  • lang(c) :匹配lang属性等于c的元素
  • enabled :匹配表单中可用的元素
  • disabled :匹配表单中禁用的元素
  • checked: 匹配表单中被选中的radio或checkbox元素
  • selection: 匹配用户当前选中的元素
  • nth-last-of-type(n) :与nth-last-child作用相似,但是仅匹配使用同种标签的元素
  • first-child:匹配父元素的第一个子元素
  • last-child :匹配父元素的最后一个子元素
  • first-of-type :即 nth-of-type(1)
  • last-of-type :即 nth-last-of-type(1)
  • only-child :匹配父元素下仅有的一个子元素
  • only-of-type :匹配父元素下使用同种标签的唯一一个子元素

选择器的优先级是怎样的?对于复杂场景如何计算优先级?

!important>内联>id>class>伪类>属性>元素>通配符>自定义
复杂场景优先级计算从最高权重开始比较,相同则比较下一个权重,权重高的优先级高于权重低的
优先级首先用权重量化,从0开始,一个行内样式+1000,一个id+100,一个属性选择器/class或者伪类+10,一个元素名,或者伪元素+1

  • 相同的权重:以后面出现的选择器为最后规则
  • 不同的权重,权重值高则生效
  • 包含更高权重选择器的一条规则拥有更高的权重
  • Id选择器的权重比属性选择器高,
  • 带有上下文关系的选择器比单纯的元素选择器权重要高
  • 与元素“挨得近”的规则生效
  • 最后定义的这条规则会覆盖上面与之冲突的规则
  • 无论多少个元素组成的选择器,都没有一个class选择器权重高
  • 通配符选择器也有权重,权重被认为是 0,0,0,0。比如 *, body * 被继承的css属性也带有权重,权重是0,0,0,0。

a:link, a:hover, a:active, a:visited 的顺序是怎样的? 为什么?

a:link>>a:visited>>a:hover>>a:active
visited写在active后面,当a标签被点击之后,visited的样式会覆盖其他样式,导致其他样式都不生效

以下选择器分别是什么意思?

  • header id为header的元素

  • .header class为header的元素
  • .header .logo logo是header的子元素
  • .header.mobile 并列关系,这个class有2个名字,1个是header,1个是mobile
  • .header p, .header h3 并列选择header下面的2个子元素p和h3
  • header .nav>li header的子元素nav的子元素li

  • header a:hover id为header的元素的子元素a链接的鼠标悬停状态

  • header .logo~p id为header的元素的子元素中class为logo的元素的普通相邻元素p

  • header input[type="text"] id为header的元素的子元素input且type必须是text

列出你知道的伪类选择器

  • first-child:匹配元素E的第一个子元素
  • link :匹配素有未被点击的链接
  • visited :匹配所有已经被点击的链接
  • active :匹配鼠标已经在其上按下,但是还没有释放的E元素
  • root :匹配文档的根元素,对于HTML文档,就是HTML元素
  • nth-child(n) :匹配其父元素的第n个子元素,第一个编号为1
  • nth-last-child :匹配其父元素的第n个子元素,第一个编号为1
  • nth-of-type(n):与:nth-child作用类似,但是仅匹配使用同种标签的元素
  • hover :匹配鼠标悬停其上的元素
  • focus :匹配获得当前焦点的元素
  • lang(c) :匹配lang属性等于c的元素
  • enabled :匹配表单中可用的元素
  • disabled :匹配表单中禁用的元素
  • checked: 匹配表单中被选中的radio或checkbox元素
  • selection: 匹配用户当前选中的元素
  • nth-last-of-type(n) :与nth-last-child作用相似,但是仅匹配使用同种标签的元素
  • first-child:匹配父元素的第一个子元素
  • last-child :匹配父元素的最后一个子元素
  • first-of-type :即 nth-of-type(1)
  • last-of-type :即 nth-last-of-type(1)
  • only-child :匹配父元素下仅有的一个子元素
  • only-of-type :匹配父元素下使用同种标签的唯一一个子元素

div:first-child、div:first-of-type、div :first-child和div :first-of-type的作用和区别 (注意空格的作用)

  • div:first-child 匹配父元素的第一个子元素
  • div:first-of-type 匹配父元素下有相同标签的第一个元素
  • div :first-child和div :first-of-type,div后面了空格之后,变成了匹配div下面的叫:first-child、:first-of-type的元素。

运行如下代码,解析下输出样式的原因。

<style> .item1:first-child{ color: red; } .item1:first-of-type{ background: blue; } </style> <div class="ct"> <p class="item1">aa</p> <h3 class="item1">bb</h3> <h3 class="item1">ccc</h3> </div>

.item1:first-child{ color: red;}

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

推荐阅读更多精彩内容