基本选择器
通配选择器
可以选中所有的HTML元素,清除样式时可以使用
* {color: orange;font-size: 40px;
}
元素选择器
为元素统一设置样式,故无法实现差异化设置
/* 为所有h1元素添加样式 */
h1 {color: red;font-size: 60px;
}/* 为所有p元素添加样式 */
p {color: red;font-size: 60px;
}
类选择器
根据元素的class
值选中元素添加样式
一个标签只能有一个class,但class可以有多值,使用空格隔开
.inner {background-color: red;font-size: 20px;
}/* 后来者居上原则,neibu的样式会优先于inner*/
.neibu {background-color: blue;font-size: 20px;
}/* class的值可以有多个值 */
<div class="inner neibu">学习CSS</div>
ID选择器
根据元素的id
值,精准的为某个元素添加样式
规范:
- id属性值:由
字母、数字、下划线_、短杠-
组成,最好以字母开头、不要包含空格、区分大小写 - 一个元素只能拥有一个id属性,可以同时拥有
id
和class
属性,且多个元素的id
属性值不能相同
#top-div-inner {color: red;font-size: 60px;
}<div id="top-div-inner" class="inner">学习CSS</div>
复合选择器
交集选择器
交集有
并且
的含义(通俗理解:即...又...
的意思)
用于选中同时符合多个条件的元素
/* 选中类名为outer的div元素 div元素名必须放在前面,*/
div.outer {background-color: red;width: 300px;height: 300px;
}/* 选中包含inner和interior的元素 */
.inner.interior {background-color: black;width: 200px;height: 200px;
}<div class="outer"><div class="inner interior"></div>
</div>
注意:
-
有元素时,元素必须写在前面
-
id选择器、通配选择器,理论上可以作为交集的条件,但实际应用中几乎不用(没有意义)
-
交集选择器中不能出现两个元素选择器,因为一个元素不可能即是p元素又是span元素
-
用的最多的交集选择器是:元素选择器配合类名选择器,例如:
p.beauty
并集选择器
用于选中多个选择器对应的元素,又称分组选择器,并集就是或
的意思,多个选择器通过,
连接
.outer, .inner {}/* 也可以竖着写 */
#outer2,
.inner2 {}<div class="outer"><div class="inner"></div>
</div><div id="outer2"><div class="inner2"></div>
</div>
元素关系
父、子元素
直接包裹某个元素的元素,就是该元素的父元素,被父元素直接包含的元素称为子元素
<div><!-- h1和ul是div的子元素 --><h1>h1</h1><ul><li>1</li><li>2</li><li>3</li></ul>
</div>
祖先、后代元素
父元素也算是祖先元素的一种
<div><h1>h1</h1><ul><!-- li的祖先元素是ul和div --><li>1</li><li>2</li><li>3</li></ul>
</div>
兄弟元素
具有相同父元素的元素,互为兄弟元素
<div><!-- h1和ul是兄弟元素 --><h1>h1</h1><ul><li>1</li><li>2</li><li>3</li></ul>
</div>
后代选择器
选择器之间用空格隔开
<style>/* 选中ul中的所有li */ul li {color: red;}/* 选中ul中所有li中的a元素 */ul li a {color: orange;}/* 选中类名为ul元素中的所有li */.ul li {color: blue;}/* 选中类名为ul元素中的类名为demo的li */.ul li.demo {color: red;}</style><div><ul><li>广州</li><!-- ul是li的祖先元素,只要在里面就算 --><li>天河区</li><li>深圳</li><li>佛山</li></ul>
</div>
子选择器
选择器之间使用>
隔开
<style>/* div中的子代span元素 */div > span {color: red;}/* 类名为ul的元素中的子li元素 */.ul > li {color: black;}</style><div><span>广东省</span><ul class="ul"><li>广州</li><!-- ul是li的祖先元素,只要在里面就算 --><li>天河区</li><li>深圳</li><li>佛山</li></ul>
</div>
兄弟选择器
相邻兄弟选择器
相邻兄弟元素(紧挨着的下一个元素
),兄弟选择器选择的是向下的兄弟级,不向上查找,使用+
分割
<!-- 选中h1下一个p元素 --><style>h1 + p {color: red;}</style><div><p>0</p><h1>1</h1><!-- 选中的是2 --><p>2</p><p>3</p>
</div>
通用兄弟选择器
符合条件的所有兄弟元素
,通过~
分割
<!-- 选中h1后的所有的兄弟p元素 --><style>h1 ~ p {color: red;}</style><div><p>0</p><h1>1</h1><!-- 选中的是2、3 --><p>2</p><p>3</p>
</div>
属性选择器
选中属性值
符合一定要求的元素
语法:
语法 | 含义 |
---|---|
[属性名] | 选中具有某个属性的元素 |
[属性名="值"] | 选中包含某个属性,且属性值等于指定值的元素 |
[属性名^="值"] | 选中包含某个属性,且属性值以指定的值开头 的元素 |
[属性名$="值"] | 选中包含某个属性,且属性值以指定的值结尾 的元素 |
[属性名*=“值”] | 选择包含某个属性,属性值包含指定值的元素 |
<style>[title] {color: red;}[title = "itzhuzhu0"] {color: black;}[title ^= "itzhu"] {color: chartreuse;}[title $= "2"] {color: orange;}[title *= "zhuzhu"] {color: blue;}</style><div title="itzhuzhu0">0</div>
<div title="itzhuzhu1">1</div>
<div title="itzhuzhu2">2</div>
伪类选择器
是元素的一种
特殊状态
,伪:假的,伪类:像类,但不是类
动态伪类
顺序不能乱,在css里的规则是后来者居上
,通过:
分割
元素 | 含义 |
---|---|
link | 超链接未被访问 的状态 |
visited | 超链接访问过 的状态 |
hover | 鼠标悬停 在元素上的状态 |
active | 元素激活 (按下鼠标不松开)的状态 |
focus | 获取焦点 的元素(表单类的元素才能使用) |
<style>a:link {color: darkgreen;}a:visited{color: red;}a:hover{color: silver;}a:active {color: blue;}input:focus {color: darkgreen;}</style><a href="https://www.baidu.com">去百度</a>
<a href="https://www.jd.com">去京东</a>
<input type="text">
结构伪类
语法 | 含义 |
---|---|
:first-child | 所有兄弟元素中的第一个 |
:last-child | 所有兄弟元素中的最后一个 |
:nth-child(n) | 所有兄弟元素中的第n 个 |
:first-of-type | 所有同类型兄弟元素中的第一个 |
:last-of-type | 所有同类型兄弟元素中的最后一个 |
:nth-of-type(n) | 所有同类型兄弟元素中的第n 个 |
:nth-last-child(n) | 所有兄弟元素中的倒数第n 个 |
:nth-last-of-type(n) | 所有同类型兄弟元素中的 倒数第n 个 |
:only-child | 选择没有兄弟的元素(独生子女) |
:only-of-type | 选择没有同类型兄弟的元素 |
:root | 根元素(html标签) |
:empty | 内容为空元素(空格也算内容) |
n的值:
值 | 含义 |
---|---|
0/不写 | 什么都选不中 |
1~正无穷的整数 | 选中对应序号的子元素 |
2n或even | 选中序号为偶数的子元素 |
2n+1或odd | 选中序号为奇数的子元素 |
-n+3 | 选中的是前 3 个 |
3n+4(公式写法) | 结果为:3*0+4=4 |
<style>p:first-child {color: red;}p:last-child {color: red;}/* 不包含span,上面两个也是*/p:nth-child(2) {color: red;}span:first-of-type {color: red;}p:last-of-type {color: red;}p:nth-of-type(2) {color: red;}p:nth-last-child(2) {color: blue;}p:nth-last-of-type(2) {color: blue;}a:only-child {color: blue;}a:only-of-type {color: red;}/* 根元素就是html标签 */:root {background-color: red;}:empty {width: 10px;height: 10px;background-color: red;}</style><div><!-- 所有的兄弟元素第一个/最后一个是span,所以谁都选不中 --><span>0</span><p>1</p><p>2</p><p>3</p><span>4<a>a</a></span><div></div>
</div>
否定伪类
not(选择器)
排除满足括号中条件的元素
<style>/* 排除div中的p元素,且类名为last的元素 */div > p:not(.last) {color: red;}div > p:not(:last-child) {color: red;}</style><div><p>1</p><p>2</p><p>3</p><p class="last">4</p>
</div>
UI伪类
- checked:被选中的复选框或单选按钮
- enable:可用的表单元素(没有 disabled 属性)
- disabled:不可用的表单元素(有 disabled 属性)
<style>/* checked、radio无法设置背景色 */input:checked {width: 100px;height: 100px;}input:enabled {background-color: blue;}input:disabled {background-color: red;}</style><input type="checkbox">
<input type="radio" name="gender">
<input type="radio" name="gender">
<input type="text">
<input type="text" disabled>
目标伪类
target:选中锚点指向的元素
<style>div {background-color: red;height: 200px;}div:target {background-color: blue;}</style><a href="#one">one</a>
<a href="#two">two</a>
<a href="#three">three</a><div id="one">第1个</div>
<div id="two">第2个</div>
<div id="three">第3个</div>
语言伪类
:lang()
:根据指定的语言选择元素(本质是看 lang 属性的值)
<!DOCTYPE html>
<!-- 这里还有设置lang -->
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>div:lang(en) {color: red;}div:lang(zh-CN) {color: blue;}</style>
</head>
<body><!-- 通过div中的lang="zh-CN"确定的 -->
<div lang="zh-CN">itzhuzhu你好啊</div>
<div>itzhuzhu你好啊</div>
</body>
</html>
伪元素选择器
选中元素中的一些特殊位置,通过::
,冒号前后不能空格
常用伪元素:
元素 | 含义 |
---|---|
first-letter | 选中元素中的第一个 文字 |
first-line | 选中元素中的第一行 文字 |
selection | 选中被鼠标选中的内容 |
placeholder | 选中输入框的提示文字 |
before | 在元素最开始 的位置,创建一个子元素(必须用content 属性指定内容) |
after | 在元素最后 的位置,创建一个子元素(必须用content 属性指定内容) |
<style>p::first-letter {font-size: 20px;}p::first-line {background-color: red;}p::selection {background-color: orange;}input::placeholder {color: blue;}p::before {content: "¥";}p::after {content: ".00元";}</style>
</head>
<body><p>199</p>
<input type="text" placeholder="请输入用户名">
选择器优先级
通过不同的选择器,选中相同的元素 ,并且为相同的样式名设置不同的值时,就发生了样式的冲突。
行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器
注意:并集选择器的每一个部分是分开计算权重的
计算选择器权重格式: (a,b,c)
a
:ID选择器的个数b
:类、伪类、属性选择器的个数c
:元素、伪元素选择器的个数
鼠标放在选择器上就能快速查看权重,并集选择器可以放在每一个元素上查看权重
**比较:**按照从左到右的顺序,依次比较大小,当前位胜出后,后面的不再对比,例如:
(1,0,0) > (0,2,2)
(1,1,0) > (1,0,3)
(1,1,3) > (1,1,2)
特殊规则:
-
行内样式权重大于所有选择器
-
!important
的权重,大于行内样式,权重最高
<style>#box {width: 100px;height: 100px;background-color: red;}#box {width: 100px;height: 100px;background-color: blue;!important}</style><div id="box"></div>
CSS三大特性
层叠性
如果发生了样式冲突,那就会根据选择器优先级进行样式的层叠(覆盖),如果权重相同,就比较书写顺序
什么是样式冲突?
- 元素的同一个样式名,被设置了不同的值,这就是冲突
#box {width: 100px;height: 100px;background-color: red;}#box {width: 100px;height: 100px;background-color: blue;!important}
继承性
元素会自动拥有
其父元素
、或祖先元素
上所设置的某些样式
(参照MDN网站,可查询属性是否可被继承)
继承规则:就近继承(先去父元素找,再去爷爷元素找…)
<style>div {color: red;}p {color: blue;}</style><div><span>1</span><p><!-- 这个span的父元素有属性就继承父元素的,否则就继承爷爷元素 --><span>2</span></p>
</div>
优先级
!important > 行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器 > 继承的样式