今天学习了css的一些选择器,做了些总结
选择器及其优先级
一、常用选择器
我们常用的选择器有标签选择器、id选择器、class选择器,其对应的语法分别为标签名{}、#id
属性值{}、.class属性值{}。
二、组合选择器
组合选择器: 两个或两个以上的选择器配合使用
后代选择器: 选择器1 选择器2{} .item span{} 选中类名为item的标签的后代span标签 (组 合选择器 确定通过什么选择器去限定范围)
子代选择器: 选择器1 > 选择器2{} .item > span{} 选中类名为item的标签的子标签span标签
毗邻选择器: 选择器1 + 选择器2{} .text + p{} 选中类名为text的标签的下一个标签p标签
兄弟选择器: 选择器1 ~ 选择器2{} .text ~ p{} 选中类名为text的标签的下面的所有兄弟标签中 的p标签
多元素选择器: 选择器1,选择器2{} body,ul{样式} body{样式}和ul{样式}
交集选择器: 选择器1选择器2{} 既要满足选择器1又要满足选择器2 的标签
比如:p.wrap 选择有类名为wrap的p标签
.wrap.box 选择既有类名wrap又要类名box的标签
三、选择器的权重
组合选择器 如何判断 优先级
id > class > 标签名
存在id id选择器个数越多 优先级越高
id选择器个数一致 再看class选择器个数 class选择器个数越多 优先级越高
当id和class选择器个数都一致 比较标签选择器 签选择多的 优先级越高
当所有个数都一致时 优先级一样 下面覆盖上面
再控制台里的styles内 先后排名顺序
1. element.style{} 行内样式
2. 组合选择器/基础选择器 按照优先级排序 优先级一样 按照先后顺序排序 后来居上
3. 默认css
4. 继承来的css
<!DOCTYPE html>
<html>
<!--根标签-->
<head>
<!--不可视区域-->
<meta charset='UTF-8'>
<!--国际编码-->
<meta name='Keyword' content='关键字'>
<meta name='Description' content='描述'>
<title>demo</title>
<style>
#wrap1 .box2 .box4 .box5{
color: red;
}
span#txt.text{
color: blue;
}
span{color:red;}
span{color:blue;}
ul{
color:red;
}
a{
color:green;
}
</style>
</head>
<body>
<div class="box1" id="wrap1">
<div class="box2">
<div class="box3">
<div class="box4">
<div class="box5">
<span class="text" id="txt">看我的颜色 决定权重</span>
</div>
</div>
</div>
</div>
</div>
<ul>
<li>
<p>123</p>
</li>
</ul>
<p><a href=""> 我是a标签 </a></p>
</body>
</html>
四、css选择器优先级
id选择器 > class选择器 > 标签名选择器 > *(全部标签都可以选中)
选择范围 越小 优先级越高
优先级一样时 下面的相同css覆盖上面的相同css
<!DOCTYPE html>
<html>
<!--根标签-->
<head>
<!--不可视区域-->
<meta charset='UTF-8'>
<!--国际编码-->
<meta name='Keyword' content='关键字'>
<meta name='Description' content='描述'>
<title>demo</title>
<link rel="stylesheet" href="index.css">
<style>
/* #wrap {
background-color: blue;
} */
.box {
background-color: green;
color: #fff;
}
/* div {
background-color: red;
} */
.box1 {
background-color: yellow;
}
</style>
</head>
<body>
<div class="box box1 box2" id="wrap"> 我身上是什么颜色 那么哪个选择器优先级就更高 </div>
<!-- <p class="box">123</p> -->
</body>
</html>
五、结构性选择器
结构性伪类选择器 :
p:first-child 控制 父元素内 第一个子元素 并且要求这个元素必须是p 不是p就控制不到
p:last-child 控制 父元素内 倒数第一个子元素 并且要求这个元素必须是p 不是p就控制不到
p:nth-child(3) 控制 父元素内 第三个子元素 并且要求这个元素必须是p 不是p就控制不到
p:nth-last-child(3) 控制 父元素内 倒数第三个子元素 并且要求这个元素必须是p 不是p就控 制不到
p:first-of-type 控制 父元素内 第一个p元素
p:last-of-type 控制 父元素内 倒数第一个p元素
p:nth-of-type(3) 控制 父元素内 第三个p元素
p:nth-last-of-type(3) 控制 父元素内 倒数第三个p元素
child 更加严格 适用于父元素内 标签种类一致的情况
of-type 适用于父元素内 标签种类不一致的情况
序号的其他写法 2n 偶数个(even) 2n-1 奇数项(odd) 3n 3的倍数项
p:only-child 控制 父元素内唯一一个子元素 并且要求这个元素必须是p 不是p就控制不到
p:only-of-type 控制 父元素内唯一一个p元素
p:not() 否定选择器 选择p但是 不要满足() 内条件的p ()里面 就是选择器的写法
六、属性选择器
属性选择器 :
[属性] [src] [class] [id] [name]{}
[属性="属性值"] [name='username']{}
[attr*="value"] 元素必须有attr属性 并且属性值里 具有 value字段 (模糊匹配)
[attr $= 'value'] 元素必须有attr属性 并且属性值里 以value字段结尾 (模糊匹配)
[attr ^= 'value'] 元素必须有attr属性 并且属性值里 以value字段开头 (模糊匹配)
七、伪类选择器
a相关的伪类
:visited 链接被访问过时 (浏览器有缓存记录)
:link 链接未被访问过时
:active 被点击瞬间状态
八、伪元素选择器
:after 往元素内容最后 添加一个css创造的没有名字的伪元素(特性是行内特性)
最常用的作用 : 清除浮动带来的高度塌陷问题
小小小小的装饰 ==> 小边界线
:before 往元素内容前面 添加一个css创造的没有名字的伪元素(特性是行内特性)
小小小小的装饰
p::first-letter 控制p元素内首字母
p::first-line 控制p元素内第一行
p::selection 控制鼠标选中文本部分
注意: 伪类伪元素选择器的优先级 等同于一个class的优先级