# 选择器
# 标签选择器
写HTML标签
<body>
<p>p标签</p>
</body>
<style>
p {
color: red;
}
</style>
# 类选择器
结构需要用class属性来调用class类的意思 语法:.类型{xxx}
<body>
<p class="p">p标签</p>
</body>
<style>
.p {
color: red;
}
</style>
# id选择器
id选择器可以为标有特定id的HTML元素指定特定的样式。
HTML元素以id属性来设置id选择器,CSS中id选择器以“#"来定义。
语法:
#id名 {
属性1: 属性值1;
}
注意:id 属性只能在每个 HTML 文档中出现一次
<body>
<p id="red">p标签</p>
</body>
<style>
#red {
color: red;
}
</style>
# 通配符选择器
语法:
* {
属性1: 属性值1;
...
}
通配符选择器不需要调用, 自动就给所有的元素使用样式,特殊情况才使用
<body>
<p>标签</p>
<div>div</div>
<span>span</span>
</body>
<style>
* {
color: red;
}
</style>
# 复合选择器
复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等
# 后代选择器
后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
语法: 元素1 元素2 { 样式声明 }
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ol>
<li>4</li>
<li>5</li>
<li>6</li>
</ol>
</body>
<style>
ul li {
color: red;
}
</style>
# 子元素选择器
子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。简单理解就是选亲儿子元素
<body>
<div class="parent">
<p>儿子</p>
<div>
<p>孙子</p>
</div>
</div>
</body>
<style>
.parent > p {
color: red;
}
</style>
# 并集选择器
并集选择器可以选择多组标签同时为他们定义相同的样式。通常用于集体声明,使用逗号之间连接
<body>
<div>
<p class="zs">zhangsan</p>
<p class="ls">lisi</p>
<div>
<p class="ww">wangwu</p>
<p class="zl">zhaoliu</p>
</div>
</div>
</body>
<style>
.zs,.zl {
color: red;
}
</style>
# 伪类选择器
伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。
伪类选择器书写最大的特点是用冒号(:)表示,比如:hover、:first-child
- a:link
选择所有未被访问的链接 - a:visited
选择所有已被访问的链接 - a:hover
选择鼠标指针位于其上的链接 - a:active
选择活动链接(鼠标按下未弹起的链接)
# :focus伪类选择器
:focus伪类选择器用于选取获得焦点的表单元素。
焦点就是光标,一般情况<input>
类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。
<body>
<div>
<input type="text" class="t"/>
</div>
</body>
<style>
.t:focus {
border-color: red;
}
</style>
# 属性选择器
选择符 | 简介 |
---|---|
E[att] | 选择具有att属性的E元素 |
E[att="val"] | 选择具有att属性且属性值等于val的E元素 |
E[att="val"] | 匹配具有att属性且值以val开头的E元素 |
E[at$="val"] | 匹配具有att属性且值以val结尾的E元素 |
E[att*="val"] | 匹配具有att属性且值中含有val的E元素 |
# E[att],利用属性选择器就可以不用借助于类或者d选择器
<body>
<input value="利用属性选择器"/>
<input>
</body>
<style>
input[value] {
color: skyblue;
}
</style>
# E[att="val"],属性选择器还可以选择属性值的某些元素
<body>
<input type="text" />
<input type="password" value="密码" />
</body>
<style>
input[type=password] {
color: skyblue;
}
</style>
# E[at$="val"],属性选择器可以选择属性值开头的某些元素
<body>
<div class="icon">图标</div>
<div class="icon2">图标2</div>
<div class="icon3">图标3</div>
<div class="icon4">图标4</div>
</body>
<style>
/*选择首先是div然后具有cLass,属性并且属性值必须是icon开头的这些元素*/
div[class^=icon] {
color: skyblue;
}
</style>
# 匹配具有att属性且值中含有val的E元素
<body>
<div class="icon">图标</div>
<div class="icon2">图标2</div>
<div class="icon3 data">图标3</div>
<div class="icon4 data">图标4</div>
</body>
<style>
/*选择首先是div然后具有cLass,属性并且属性值必须是icon开头的这些元素*/
div[class^=icon] {
color: skyblue;
}
/*属性选择器可以选择属性值结尾的某些元素*/
div[class$=data] {
color: pink;
}
</style>
# 结构伪类选择器
结构伪类选择器主要根据文档结构来选择器元素,常用于根据父级选择器里面的子元素
- nth-child对父元素里面所有孩子排序选择(序号是固定的)先找到第n个孩子,然后看看是否和E匹配
- nth-of-type对父元素里面指定子元素进行排序选择。先去匹配E,然后再根据E找第n个孩子
选择符 | 简介 |
---|---|
E:first-child | 匹配父元素中的第一个子元素E |
E:last-child | 匹配父元素中最后一个E元素 |
E:nth-child(n) | 匹配父元素中的第n个子元素E |
E:first-of-type | 指定类型E的第一个 |
E:last-of-type | 指定类型E的最后一个 |
E:nth-of-type(n) | 指定类型E的第n个 |
# first-child
注意空格
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
</body>
<style>
/*选择ul里面的第一个孩子 li */
/*ul li:first-child {*/
ul :first-child {
background-color: pink;
}
</style>
# last-child
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
</body>
<style>
/*选择L里面的第一个孩子小Li*/
ul li:last-child {
background-color: pink;
}
</style>
# nth-child
nth-child(n)选择某个父元素的一个或多个特定的子元素
- n可以是数字,关键字和公式
- n如果是数字,就是选择第n个子元素,里面数字从1开始…
- n可以是关键字:even偶数,odd奇数
- 可以是公式:常见的公式如下(如果n是公式,则从0开始计算,但是第0个元素或者超出了元素的个数会被忽略
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
</body>
<style>
/*选择L里面的第一个孩子小Li*/
ul li:nth-child(3) {
background-color: pink;
}
</style>
# nth-child(公式)
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
</body>
<style>
/*选择L里面的第一个孩子小Li*/
ul li:nth-child(even) {
background-color: pink;
}
</style>
# nth-child(n)
<body>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
<li>赵六</li>
</ul>
</body>
<style>
/*3.nth-child(n) 从0开始 每次加1 往后面计算 这里面必须是n 不能是其他的字母选择了所有的孩i*/
ul li:nth-child(n) {
background-color: pink;
}
</style>
# nth-of-type
<body>
<div>
<p>p</p>
<div>div1</div>
<div>div2</div>
</div>
</body>
<style>
/*
nth-of-type会把指定元素的盒子排列序号
执行的时候首先看:nth-child(1)之后回去看前面div
*/
div div:nth-of-type(1) {
background-color: skyblue;
}
</style>
# 公式
公式 | 取值 |
---|---|
2n | 偶数 |
2n +1 | 奇数 |
5n | 5 10 15… |
n+5 | 从第5个开始(包含第五个)到最后 |
-n+5 | 前5个(包含第5个)… |
# 伪元素选择器
- before和after创建一个元素,但是属于行内元素
- 新创建的这个元素在文档树中是找不到的,所以我们称为伪元素
- before和after必须有content属性
- before在父元素内容的前面创建元素,after在父元素内容的后面插入元素
- 伪元素选择器和标签选择器一样,权重为1
语法:
element::before {
}
选择符 | 简介 |
---|---|
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
<body>
<div>
是
</div>
</body>
<style>
div::before {
/*
content 必须
*/
content: '我';
}
div::after {
content: "张三";
}
</style>
# 使用场景
- 图标
<body>
<div>
</div>
</body>
<style>
div {
height: 30px;
width: 200px;
border: 1px solid skyblue;
border-radius: 20px;
position: relative;
}
div::after {
content: '▲';
position: absolute;
right: 20px;
font-size: 20px;
}
</style>