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

``` class值box设置盒子宽高背景,并将其隐藏,button:hover+.box 按钮的紧跟着的弟元素box,显示 ```html ``` *** ** * ** *** ##### 面试题: 超链接的4个伪类,设置时,有没有顺序要求? 遵循"lvha"的顺序 :link,:visited,:hover,:active ```css .a2:visited { color: blueviolet; } .a2:hover { color: green; } .a2:active { color: orange; } .a2:link { color: red; } ```

相关推荐
棒棒的唐2 小时前
Avue2图片上传使用object对象模式时,axios的请求模式用post还是get?
开发语言·前端·javascript·avue
OnlyEasyCode2 小时前
Linux部署Nginx前后端web教程
linux·前端·nginx
亮子AI2 小时前
【Typescript】未知类型如何处理?
linux·javascript·typescript
梵得儿SHI2 小时前
Vue Router 路由管理从入门到精通:基础、导航与参数传递实战(含避坑指南)
前端·javascript·vue.js·路由基础配置·版本适配·路由实例创建·路由规则定义
IT_陈寒2 小时前
JavaScript 性能优化实战:7 个让你的应用提速 50%+ 的 V8 引擎技巧
前端·人工智能·后端
Watermelo6172 小时前
【前端实战】Axios 错误处理的设计与进阶封装,实现网络层面的数据与状态解耦
前端·javascript·网络·vue.js·网络协议·性能优化·用户体验
不一样的少年_2 小时前
【性能监控】别只做工具人了!手把手带你写一个前端性能检测SDK
前端·javascript·监控
开发者小天2 小时前
react中使用复制的功能
前端·javascript·react.js
AI炼金师2 小时前
Chrome 中的 Claude 入门指南
前端·chrome