状态伪类
状态伪类主要用于 链接和表单 两个方面
1、链接
.html
<!-- 1. 链接 -->
<a href="https://www.php.cn">php中文网</a>
链接有四种状态:顺序是固定的
.css
/* 1. 默认,没有访问/点击 :link */
a:link {
color: blue;
text-decoration: none;
}
/* 2. 已访问过的状态 :visited */
a:visited {
color: violet;
}
/* 3. 悬停的状态 :hover */
a:hover {
color: red;
text-decoration: underline;
}
/* 4. 激活,当鼠标点击压下去的时候 :active */
a:active {
color: green;
}
2、表单
.html
<!-- 2. 表单 -->
<form action="">
<p>用户名:<input type="text" name="" value="admin" readonly autofocus></p>
<p>邮箱:<input type="email" name="" value="" required></p>
<p>密码:<input type="password" name="" value="123456" disabled></p>
<p><button>提交</button></p>
</form>
.css
/* 只读的:不可被用户编辑的状态(如锁定的文本输入框) */
input:read-only {
background-color: yellow;
}
/* 必选的:这个伪类对于高亮显示在提交表单之前必须具有有效数据的字段非常有用 */
input:required {
background-color: lightgreen;
}
/* 禁用的:如果一个元素不能被激活(如选择、点击或接受文本输入)或获取焦点,则该元素处于被禁用状态 */
input:disabled {
background-color: #eee;
}
/* 获得焦点的元素(如表单输入)。当用户点击或触摸元素或通过键盘的 “tab” 键选择它时会被触发 */
input:focus {
background-color: red;
}
选择器的优先级
- 当选择器相同的时,与书写顺序有关,后面的样式覆盖前面的
- 当选择器不同时,与优先级相关,级别高的覆盖级别低
- id选择器 > class选择器 > 标签 选择器
选择器的优先级的提权方式
CSS权重
标签名 | 权重值 |
---|---|
! important | infinity 正无穷 |
行间样式 | 1000 |
id 选择器 | 100 |
class 选择器、属性选择器、伪类选择器 | 10 |
标签选择器、伪元素选择器 | 1 |
通配符选择器 | 0 |
在计算机中,正无穷+1 > 正无穷 | |
如果权重值一样(优先级一样)、会显示后面的 。就是后来后到,谁在后面,谁(后面的)覆盖前面的—后面的会覆盖前面的 | |
在权重中,是256进制,是从0到255后变成1。所以这里的 1000 不是一千,100不是一百 |
.html
<h2 class="on" id="foo">hello php.cn</h2>
优先级
- 声明顺序对优先级的影响
h2 {
color: gold;
}
/* 在后面有一个相同的声明,根据源码的顺序,后面有效 */
h2 {
color: green;
}
- 选择器的类型对优先级的影响
```css
.on {
color: violet
}
/ h2 无效果,表示class的优先级大于 tag(标签) /
h2 {
color: green;
}
/ 如果仍想提升选择器的优先级,此时到了class级,我们应该用id级 /
foo {
color: blue;
}
/ 结论: id > class > tag(标签) /
### 提权方式
- 根据 id > class > tag(标签) 的结论,有一个简单的计算公式: [id选择器的数量, class选择器的数量, tag选择器的数量] (0,0,0)
- tag(标签) 级向 class 级进位, class 级向id级进位
1、标签选择器
```css
/* [0,0,1] */
h2 {
color: red;
}
/* [0,0,2] */
body h2 {
color: skyblue;
}
/* [0,0,2] > [0,0,1] 显示的颜色是 skyblue */
/* 如果想继续提权,选择一个只要比body h2 权重高的选择器组合就可以了 */
/* [0,0,3] */
html body h2 {
color: skyblue;
}
/* [0,0,2] */
body h2 {
color: red;
}
2、class选择器
/* 因为html是根元素,上面没有比他更大的,根据 id > class > tag(标签) 的结论,我们可以用 class 进一步提权 */
/* [0,1,0] */
.on {
color: skyblue;
}
/* [0,0,3] */
html body h2 {
color: red;
}
/* [0,1,0] > [0,0,3] 显示的颜色是 skyblue */
3、标签选择器与class选择器的组合
/* [0,0,3] */
html body h2 {
color: red;
}
/* [0,1,0] */
.on {
color: skyblue;
}
/* [0,1,1] */
h2.on {
color: red;
}
/* [0,1,2] */
body h2.on {
color: skyblue;
}
/* [0,1,3] */
html body h2.on {
color: teal;
}
/* [0,2,0] */
.on.off {
color: red;
}
/* [0,0,3] < [0,1,0] < [0,1,1] < [0,1,2] < [0,1,3] < [0,2,0] */
4、id 选择器
/* [0,2,0] */
.on.off {
color: red;
}
/* [1,0,0] */
#foo {
color: teal;
}
/* [1,0,1] */
h2#foo {
color: red;
}
/* [1,0,2] */
body h2#foo {
color: blue;
}
/* [1,0,3] */
html body h2#foo {
color: red;
}
/* [1,1,0] */
#foo.on {
color: seagreen;
}
/* [0,2,0] < [1,0,0] < [1,0,1] < [1,0,2] < [1,0,3] < [1,1,0] */
属性的简写
1、字体属性
<h2 class="title">php中文网</h2>
font 简写属性在一个声明中设置所有字体属性
.title {
/* 字体属性 */
/* font-family: sans-serif;
font-size: 24px;
font-style: italic;
font-weight: lighter; */
/* 简写 */
font: italic lighter 36px sans-serif;
}
2、背景属性
background 简写属性在一个声明中设置所有的背景属性。
body {
background-color: cornsilk;
background-image: url(https://img.php.cn/upload/course/000/000/001/5fbb84ba39b3a182.jpg);
background-repeat: no-repeat;
background-size: 300px;
background-position: top;
/* 简写 */
background: url(https://img.php.cn/upload/course/000/000/001/5fbb84ba39b3a182.jpg) no-repeat;
}
3、盒模型的属性缩写
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>盒模型的属性</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: lightgreen;
box-sizing: border-box;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
1、边框
border 简写属性在一个声明设置所有的边框属性。
.box {
/* 边框 */
/* 每个边框可以设置三个属性: 宽度,样式,颜色 */
/* border-top-width: 5px;
border-top-color: red;
border-top-style: solid; */
/* 上边框简写 */
/* border-top: 5px red solid; */
border-top: rgb(255, 0, 255) solid 5px;
/* 下边框简写 */
border-bottom: 10px red dashed;
/* 边框简写 */
border: 5px solid #000;
}
2、内边距
padding 简写属性在一个声明中设置所有内边距属性。
.box {
/* 内边距 */
/* padding: 上 右 下 左; 按顺时针方向*/
padding: 5px 10px 15px 20px;
/* 页面看不到是因为padding是透明的,且背景色会自动扩展到padding */
/* 将背景色裁切到到内容区 */
background-clip: content-box;
/* 当左右相等,而上下不相等,使用三值语法 */
padding: 10px 20px 15px;
/* 当左右相等,上下也相等,使用二值语法 */
padding: 10px 30px;
/* 如果四个方向全相等,使用单值语法 */
padding: 10px;
/* 总结,当使用三值和二值时,只需要记住第二个永远表示左右就可以了 */
}
3、外边距
margin 简写属性在一个声明中设置所有外边距属性。该属性可以有 1 到 4 个值。
.box {
/* 外边距:控制多个盒子之间的排列间距 */
/* 四值,顺时针,上右下左 */
margin: 5px 8px 10px 15px;
/* 三值,左右相等,上下不等 */
margin: 10px 30px 15px;
/* 二值,左右相等,上下也相等 */
margin: 10px 15px;
/* 单值,四个方向全相等 */
margin: 8px;
}