1. 复杂选择器
- 选择器作用: 匹配 页面的元素
1.1. 兄弟选择器
- 兄弟: 具备 同一 父元素的 平级元素 称之兄弟元素
1.1.1. 相邻兄弟选择器
-
相邻: 挨着的
<div id="d1"></div> <div id="d2"></div> <div id="d3"></div> -
语法:
选择器1 + 选择器2 -
div+div{ color:red; } /* d2, d3 的颜色为 red 色 */
1.1.2. 通用兄弟选择器
- 通用: 后面所有
- 语法:
selector1 ~ selector2
注意: 只能向后找兄弟, 不能向前找兄弟
1.2. 属性选择器
1.2.1. 什么是属性选择器
- 允许通过 元素所附带的属性 及其 值来匹配页面元素
1.2.2. 语法
- 基础语法规范:
[]
-
[attr]: 匹配页面中附带attr属性的所有元素- EX: 1.
[id]: 匹配页面中所有 有id属性的元素 2.[type]: 匹配页面中所有 有type属性的元素 3.[disabled]: 匹配页面中所有被禁用的元素
- EX: 1.
-
elem[attr]: 匹配 具备attr属性的elem元素elem: 表示 任意 元素attr: 表示 任意 属性- EX:
div[id]: 匹配页面中所有 附带id属性的div元素
-
[attr1][attr2]: 匹配 同时具备attr1以及attr2属性的元素- EX:
input[class][type]: 匹配页面中所有 有class的文本框元素
- EX:
-
[attr=value]: 匹配页面中所有attr属性值为value的元素- EX: 1.
[id='parent']: 等同于#parent2.[class="container"]: 等同于.container3.[type='text']: 匹配页面中所有的文本框 4.[type='submit']: 匹配页面中所有的提交按钮
- EX: 1.
-
[class~=value]: 匹配的元素的class属性值是由多个类选择器组成的列表,value是该列表中的一个独立选择器 -> 即: 匹配选择器列表中包含value选择器的元素 -
[attr ^= value]: 匹配attr属性值 是以value字符作为开始的元素-
^=: 以 ... 作为开始 -
EX:
<div class="col-sm-3"></div> <div class="col-md-6"></div>div[class^=col]: 匹配class属性值中 是以col作为开始的div元素 -> 上面的两个选择器都会被匹配上
-
-
[attr *= value]: 匹配attr属性值中 包含value字符的元素-
*=: 包含...字符 -
EX:
<div class="col-md-1"></div> <div class="col-md-12"></div> <div class="col-sm-12"></div> <div class="col-sm-1"></div>div[class*=md]{}: 匹配class属性值中 包含md的所有div元素 -> 上面的元素只有第一个和第二个被匹配上
-
-
[attr $= value]: 匹配attr属性值 是以value字符作为结尾的元素$=: 以 ... 作为结束
1.3. 伪类选择器
1.3.1. 目标伪类
- 作用: 突出显示 被激活的
HTML锚点 元素 - 语法:
:target / elem:target
1.3.2. 结构伪类
通过元素间的结构关系来匹配页面元素
-
语法: 1.
:first-child: 匹配 属于其 父元素中的 首个子元素-
:last-child: 匹配 属于其 父元素中的 最后一个子元素 -
:nth-child(n): 匹配 属于其 父元素中的 第n个子元素- EX: 获取表格 第二行 里的 第三列, 背景颜色改为 红色
- 第二行:
tr:nth-child(2) - 第三列:
td:nth-child(3) - 第二行 第三列:
tr:nth-child(2) td:nth-child(3)
- 第二行:
- EX: 获取表格 第二行 里的 第三列, 背景颜色改为 红色
-
:empty: 匹配每个没有子元素( 包含文本 )的元素-
EX: 1.
<div><p></p></div>: 非empty的div-
<div>Hello World</div>: 非empty的div -
<div></div>非 empty 的div
-
<div id=""></div>: 纯empty元素
-
-
-
:only-child: 匹配 属于其父元素中的 唯一子元素
-
1.3.3. 否定伪类
- 作用: 将 指定选择器匹配的元素 排除出去
- 语法:
:not(selector)- EX:
#tbl tr:not(:first-child){}: 获取 除第一行以外的 所有行
- EX:
1.4. 伪元素选择器
1.4.1. 伪类 和 伪元素的区别
- 伪类: 匹配的是元素( 不同状态或结构的 )
- 伪元素: 匹配的是元素中的一部分内容( 首字符、首行文本 )
1.4.2. 语法
:first-letter 或 ::first-letter: 匹配 某元素的 首字符:first-line 或 ::first-line: 匹配 某元素的 首行文本::selection: 匹配 被用户选取的 部分
1.4.3. : VS ::
- 在
CSS3之前, 伪元素 使用的是::first-letter、:hover
- 在
CSS3之后, 伪元素 一律使用::::first-letter、::focus
2. 内容生成
- 什么是内容生成
通过
CSS的属性和选择器, 向某元素内增加一部分内容
- 伪元素选择器
:before 或 ::before: 匹配 某元素的内容区域之前<div>(内容区域之前) 这是一个div</div>
:after 或 ::after: 匹配 某元素的内容区域之后<div>这是一个div (内容区域之后) </div>
-
语法:
- 属性:
content - 取值: 1. 字符串: 一系列的文本字符, 用 "" 或 '' 引起来
2. 图像: 提供图像地址 ->
url(路径)3. 计数器
- 属性:
-
解决问题:
-
浮动元素父元素高度
.clear:after{ content: ""; /*生成空内容(元素)*/ display: block; /*变为块级*/ clear: both; /*清除浮动影响*/ } -
上外边距溢出
div:before{ content: ''; /*生成空元素*/ dispay: table; /*表现形式为 table*/ }
-
-
计数器:
-
什么是计数器
使用
CSS动态生成一组 有序的数组并插入到元素中 -
语法:
-
属性:
-
counter-reset-
作用: 声明或重置计数器
-
语法: 1. 声明一个计数器:
counter-reset: 名 初始值;- 声明多个计数器:
counter-reset: 名1 值1 名2 值2 ......;
- 声明多个计数器:
-
注意: 1. 初始值可以省略不写 默认为 0
counter-reset不能放在使用的元素中声明 大部分情况下, 可以将计数器声明在使用元素的父元素上( 结合实际情况考虑 )
-
-
counter-increment-
作用: 指定计数器每次出现的增量 -> 每次出现的计数器值的变化范围
-
语法: 1. 指定一个计数器:
counter-increment: 名 增量;- 指定多个计数器:
counter-increment: 名1 增量1 名2 增量2 ......;
- 指定多个计数器:
-
注意:
- 增量值可以为正, 也可以为负, 可以省略
- 为正: 递增
- 为负: 递减
- 省略: 默认增量为1
- 哪个元素使用计数器, 就在哪个元素中设置计数器增量
- 增量值可以为正, 也可以为负, 可以省略
-
-
函数:
counter()-
作用: 1. 在指定元素中, 使用计数器的值
- 必须要配合
countent属性一起使用 countent要配合这:before或:after一起使用
- 必须要配合
-
语法:
selector:before{ countent: counter(名 增量); } /* 或者 */ selector:after{ countent: counter(名 增量); }
-
-
-
-
EX:
-
HTML代码<h1>Web 基础知识</h1> <h1>HTML 快速入门</h1> <h1>网页中的文本</h1> -
CSS代码body{ counter-reset: chapter; } h1:before{ content: '第' counter(chapter) '章' } h1{ counter-increment: chaper; } -
显示效果
-
-