任务7——CSS选择器小记

1.class与id的使用场景

  • id是对标签的标识,页面内唯一,对应CSS的选择符是“#”;
  • class是对一类元素的标识,多个元素可具有相同的class,对应CSS的选择符是“.” ;
  • id用来识别标识元素,class用来设置样式;

2.CSS常见的选择器

  • 基础选择器
Paste_Image.png
  • 组合选择器
Paste_Image.png
  • 伪类选择器
Paste_Image.png
Paste_Image.png
  • 属性选择器
Paste_Image.png
  • 伪元素选择器
Paste_Image.png

3.选择器优先级排列(由高到低)

  1. 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式
  2. 作为style属性写在元素标签上的内联样式
  3. id选择器
  4. 类选择器
  5. 伪类选择器
  6. 属性选择器
  7. 标签选择器
  8. 通配符选择器
  9. 浏览器自定义

4.复杂场景如何计算选择器优先级

对于复杂场景,例如选择器组合使用的情况,可以先按照下列四个分级对该元素上应用的选择器进行分类,计算各自类别中的值

  • 行内样式 <div style="xxx"></div> ——level a
  • ID 选择器 ——level b
  • 类,属性选择器和伪类选择器 ——level c
  • 标签选择器、伪元素 ——level d

例如:

ul ol li.active{}    /*a=0 b=0 c=1 d=3   0+0+1+3*/

上述例子中使用了1个类选择器,3个标签选择器
计算出各自level的选择器值后,就可以比较了,按照level由a到d,先比较a,如果a相等,比较b,以此类推,数值大的优先级高

5.下列标签在应用时的顺序,为什么?

a:link, a:hover, a:active, a:visited
首先,我们要明确想达到的一个效果:
链接本身一个样式,鼠标悬停一个样式,点击一个样式,访问之后一个样式,同时访问后,鼠标再悬停和点击也会有相应的样式。
因为选择器之间有覆盖原则,同优先级的,后定义的会覆盖先定义的。
所以,顺序如下:

a:link
a:visited
a:hover
a:active

首先,规定链接的常规样式,放在最前面,其他场景样式在触发时,才能覆盖得以生效;
其次,visited要在点击和悬停之前,这样后面两个效果才会生效;
最后,active是要在hover之后的,否则当你点击时实际上同时也触发了悬停的样式,定义在后面的hover就会覆盖前面的active,所以为了让active生效,要在hover后面。

6.以下选择器含义

#header{/*id选择器,选择id=“header”的元素*/
}
.header{/*类选择器,选择class=“header”的元素*/
}
.header .logo{/*后代选择器,选择class=“header”header的所有class=“logo”的后代元素,不只是子元素*/
}
.header.mobile{/*选择同时具有header和mobile两个class的元素*/
}
.header p, .header h3{/*选择class="header*的元素的后代元素中的p元素和h3元素/
}
#header .nav>li{ /*选择id="header*的元素的后代元素中class=“nav”的元素的所有直接子元素li*/
}
#header a:hover{/*选择id="header*的后代元素中的a链接悬停时的效果/
}
#header .logo~p{/*选择id="header*的后代元素中,class=“logo”的同级p元素,即具有相同父元素/
}
#header input[type="text"]{/*选择id="header*的后代元素中,type="text*的文本输入框/
}

7.伪类选择器

Paste_Image.png
Paste_Image.png

8.div:first-child、div:first-of-type、div :first-child和div :first-of-type的作用和区别

实践是检验真理的唯一标准,对比了一下两种用法的代码效果

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

效果:


Paste_Image.png
  • div :first-child(有个空格)
  <style>
   div :first-child{
      color: red;
    }
    /*div :first-of-type{
      background: blue;
    }*/
</style>
</head>
<body>
 <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>
  <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

效果:


Paste_Image.png

从以上对比我们可以看出,div:first-child选中的是div的父元素的第一个子元素,所以第一个div下字体颜色都红了;而div :first-child(有个空格),选中的是div后代中的第一个子元素,所以两个div中只有第一个子元素p的字体颜色变红了

  • div:first-of-type
  <style>
   div:first-of-type{
      color: red;
    }
    /*div :first-of-type{
      background: blue;
    }*/
</style>
</head>
<body>
  <p>test1</p>
  <p>test2</p>
 <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

 <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

效果:


Paste_Image.png
  • div :first-of-type(有个空格)
  <style>
   div :first-of-type{
      color: red;
    }
    /*div :first-of-type{
      background: blue;
    }*/
</style>
</head>
<body>
  <p>test1</p>
  <p>test2</p>
 <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

 <div class="ct">
   <p class="item1">aa</p>
   <p class="item1">dd</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

效果:


Paste_Image.png

从上述对比可以看出,div:first-of-type选中的是div的父元素的类型中第一次出现的div标签,所以第一个div的字体都为红色;而div :first-of-type(有个空格),选择对象变为了div的后代,在后代中,选中第一次出现的各种类型标签,所以两个div中,第一次出现的p和h3字体变为红色。

8.解释下列代码效果的原因

<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>

首先,选中class="item1"的父元素的第一个子元素,使其字体颜色为红色,所以aa是红色;
其次,选中class="item1"的父元素中,第一次出现的各类型标签,使其背景为蓝色,所以aa和bb是背景蓝色,ccc是第二个出现的h3,背景不变蓝色。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • class 和 id 的使用场景? class写专门的class通用和私有模块命名,id具有唯一性且优先级太高,用...
    好好顽阅读 3,169评论 0 0
  • 一,class 和 id 的使用场景? id选择器,匹配特定id的元素。class是类选择器,匹配class包含(...
    DeeJay_Y阅读 2,967评论 0 0
  • 1、class和id的使用场景分别是什么? 首先,一个HTML文件中class名字可以有多个相同的,但是id的名字...
    李博洋li阅读 4,485评论 0 1
  • 1.class 和 id 的使用场景? class:类选择器,一个标签可以有多个类且同一个类可以用到不同的标签上,...
    饥人谷_兔子君阅读 4,940评论 0 0
  • id与class的使用场景 id选择器,匹配特定id的元素类选择器,匹配class包含(不是等于)特定类的元素id...
    姚小帅阅读 2,773评论 0 0

友情链接更多精彩内容