CSS复合、关系、属性、伪类选择器

目录

一、复合选择器:

1.交集选择器:

2.并集选择器(群组选择器):

二、关系选择器

1、子选择器:

2、后代选择器:

3、下一个兄弟选择器:

4、选择下面所有的兄弟选择器:

例题:

三、属性选择器:

四、伪类选择器:

1、顺序伪类

2、not()否定伪类

3、元素的伪类

4、鼠标移入

5、鼠标点击

6、按钮隐藏显示元素

面试题:


一、复合选择器:

复合选择器分为两类,交集选择器和并集选择器(群组选择器)

1.交集选择器:

语法:选择器1选择器2选择器3····{}

作用:选中同时符合选择器1及选择器2···的结构

注意:1、如果选择器中有标签选择器,标签选择器必须放第一位

2、选择器的优先级是合并计算

2.并集选择器(群组选择器):

语法:选择器1,选择器2,选择器3,····{}

作用:同时选中选择器1和选择器2···对应的结构

注意:选择器的优先级是分别计算的

例1:选择器匹配所有class为red的<div>元素

css 复制代码
div.red {
  font-size: 24px;
}
 

例2:选择器匹配id为title1和class为title2的所有元素

css 复制代码
#title1,
.title2 {
  color: orange;
}
 

二、关系选择器

关系选择器包括:子选择器、后代选择器、和下一个兄弟选择器,下面所有兄弟选择器四种

1、子选择器:

语法:父元素>子元素{}

作用:通过父元素选中直接子元素(嵌套在别的块标签里的就不选)

注意:原则上,结构可以一层层限制,但不宜太深(一般最多三层即可)

一则:可读性太差 二则:修改维护也不方便

2、后代选择器:

语法:祖先元素 后代元素{} -- 注意元素中间是有一个空格的

作用:通过祖先元素选中所有后代元素(会检索嵌套在别的标签里的后代元素)

注意:1、祖先关系包含父子关系

2、能用子选择器就不用后代选择器,子选择器的效率比后代要高

3、下一个兄弟选择器:

语法:兄+弟{}

作用:选中紧跟其后的一个弟弟(弟元素)

注意:写的时候注意要匹配的弟元素一定紧跟兄元素其后,不要中间有<br>之类

4、选择下面所有的兄弟选择器:

语法:兄~弟{}

作用:选中紧跟其后的所有弟弟(弟元素)

注意:前面的元素不选,从选中的弟元素往下开始匹配


例题:
html 复制代码
<div id="cs">
    我是超市<br />
    <span>我是零食区</span>
    <p>
      我是生鲜区
      <span>肉类 </span>
    </p>
    <span>姑临一我就清,颜不。</span>
    <p>太判笔下尹呼中来皇。</p>
    <br />
    <br />
    <span class="s2">我是鞋包区</span><br />
    <strong>言揽使上便措,白千。</strong>
    <span>订瞠训,挟的感,国。</span>
    <em>不文见,几一家,一。</em>
    <span class="s2">我是洗护区</span>
</div>
 

根据如上div内容回答下面的四个例题

例一:选中id为cs的元素内直接子段落<p>标签的直接子<span>元素

css 复制代码
#cs > p > span {
  color: red;
}
 

例二:选中id为cs的元素内所有<span>元素

css 复制代码
#cs span {
  color: red;
}
 

例三:选中id为cs的直接子元素p紧跟其后的类名为s2的兄弟标签

css 复制代码
#cs > p + .s2 {
  background-color: red;
}
 

中间有两个换行,紧跟在p后面的是<br>,把这两换行删掉就可以选中了


例四:选中id为cs的直接子元素span后面的所有p标签

css 复制代码
#cs>span~p {
  background-color: red;
}
 

三、属性选择器:

语法:属性名{} 选择含有指定属性的元素

属性名=属性值{} 选择含有指定属性和属性值的元素

属性名\^=属性值{} 选择属性值以指定值开头的元素

属性名$=属性值{} 选择属性值以指定值结尾的元素

属性名\*=属性值{} 选择属性值含有某值的元素


1.选择含有id属性的元素

css 复制代码
[id] {
  color: red;
}
 

2.选择含有title属性且属性值等于ab的元素

css 复制代码
[title=ab]{
  background-color: pink;
}
 

3.选择含有title属性且属性值是由ab开头的元素

css 复制代码
[title^="ab"] {
  background-color: pink;
}
 

4.选择含有title属性且属性值是由ab结尾的元素

css 复制代码
[title$="ab"] {
    background-color: pink;
}
 

5.选择title属性且属性值含有da的元素

css 复制代码
[title*="da"] {
  background-color: pink;
}
 

四、伪类选择器:

伪类选择器:不是固定的类,可变化的,可以根据情况,应用在不同的结构上

常用的伪类选择器:顺序类的,鼠标移入,鼠标点击,否定伪类·······

语法: :伪类选择器名{}

1、顺序伪类

特点:一般请情况下,使用:开头

(1):first-child 第一个子元素

(2):last-child 最后一个子元素

(3):nth-child() 选中第n个子元素

特殊值: n 所有的

2n或even 选中偶数

2n+1或odd 选中奇数

以上这些伪类都是根据所有的子元素进行排序

(1):first-of-type

(2):last-of-type

(3):nth-of-type()

功能跟上面相似, 不同的是,这是在同类型的子元素中去选择


需求一:将ul里的第一个li自动一直设置为红色

匹配列表与第一个元素的交集

css 复制代码
li:first-of-type {
  color: red;
}
 

2、not()否定伪类

作用:将符合条件的元素从选择器中去除

匹配将列表中class为l1的从选择器中去除

css 复制代码
li:not(.l1) {
  color: red;
}
 
3、元素的伪类

超链接a标签是一个特殊的标签它有独有2个伪类选择器,:link&:visited

1、:link 用来表示未访问过的链接(正常链接)

2、:visited 用来表示访问过的链接( 由于隐私的原因,所以visited只能改字体颜色)

css 复制代码
a:link {
  color: red;
  background-color: aqua;
  font-size: 12px;
}

a:visited {
  color: green;
  background-color: blueviolet;
  font-size: 30px;
}
 

:visited伪类选择器的font-size不会生效


4、鼠标移入

:hover 用来表示鼠标移入的状态

css 复制代码
h2:hover {
  color: red;
  font-size: 40px;
  background-color: green;
  text-decoration: underline;
}
 
5、鼠标点击

:active 鼠标点击后的状态

.title的默认背景色为粉色,.title:active伪类在激活时将文字变成白色,.a1:hover伪类在悬停时文字变为黑色,.a1:active伪类在激活时背景变成粉色。

css 复制代码
.title {
  background-color: pink;
}
.title:active {
  color: white;
}
.a1:hover {
  color: black;
}
.a1:active {
  background-color: pink;
}
 
6、按钮隐藏显示元素
html 复制代码
<button>按钮</button>
<div class="box"></div>
 

class值box设置盒子宽高背景,并将其隐藏,button:hover+.box 按钮的紧跟着的弟元素box,显示

html 复制代码
<style>
.box {
  width: 100px;
  height: 100px;
  background-color: pink;
  display: none;
}

.box:hover {
  width: 200px;
  height: 200px;
}

button:hover + .box {
  width: 200px;
  height: 200px;
  display: block;
}
</style>
 

面试题:

超链接的4个伪类,设置时,有没有顺序要求?

遵循"lvha"的顺序

:link,:visited,:hover,:active

css 复制代码
.a2:visited {
  color: blueviolet;
}
.a2:hover {
  color: green;
}
.a2:active {
  color: orange;
}
.a2:link {
  color: red;
}
 
相关推荐
Aphasia31111 分钟前
https连接传输流程
前端·面试
徐小夕11 分钟前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
threelab22 分钟前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
武器大师7224 分钟前
lv_binding_js 代码解读
开发语言·javascript·ecmascript
kyriewen32 分钟前
CSS Container Queries:彻底告别 @media 写到手软,附 5 个真实布局案例
前端·css·面试
Patrick_Wilson2 小时前
router.replace 之后紧跟 reload,页面为什么无限刷新?
javascript·react.js·浏览器
小小小小宇2 小时前
OpenMemory MCP
前端
和平宇宙3 小时前
AI笔记005. hermes-DeepSeek V4 Pro, 128K上下文引发的探索
前端·人工智能·笔记
IT_陈寒3 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
naildingding3 小时前
3-ts接口 Interface
前端·typescript