目录
前言:
链接伪类:
用户行为伪类:
元素状态伪类:
结构化伪类:
否定伪类:
目标伪类:
输入伪类:
前言:
在CSS中有一种特殊的选择器:伪类选择器,可以使用伪类设置元素的动态状态,比如点击,或者鼠标在元素上方,或者是让其他选择器不能选择这些元素(没有ID或者class).伪类的名称不区分大小写,但使用时需要用:冒号开头初识CSS-CSDN博客 0基础看这一篇就够了HTML教程(详细汇总)-CSDN博客
除此之外伪类还需要跟CSS中的选择器结合一起使用,其语法为:
selector:pseudo-class{property:value;
}
上述示例中:selector是选择器的名称,pseudo-class是伪类的名称。
在CSS中提供了多种多样的伪类选择器,让我们可以根据元素的特定状态或属性来选择和样式化元素。以下是一些常见的CSS伪类以及它们的使用:
链接伪类:
:link
:选择所有未被访问的链接。:visited
:选择用户已访问的链接。
代码示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 未访问的链接 */a:link {color: rgb(255, 179, 0);}/* 访问过的链接 */a:visited {color: rgb(11, 128, 0);}</style>
</head><body><a href="https://www.bilibili.com/" target="_blank">点击此链接跳转到B站</a>
</body></html>
上述代码:如果没有访问过<a>标签那么此时链接的为color: rgb(255, 179, 0);类似橘黄色,如果点击了链接访问后就会变成color: rgb(11, 128, 0);类似绿色,如果你一运行html就是访问过的样式可能是因为历史记录中访问过。
用户行为伪类:
:hover
:当用户将鼠标指针悬停在元素上时选择该元素。:active
:当用户与元素交互(如点击一个链接或按钮)时选择该元素。:focus
:选择获得焦点的元素,例如输入框。
代码示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>button {width: 50px;height: 30px;}/* 鼠标悬停时改变按钮背景色 */button:hover {background-color: rgb(21, 194, 64);}/* 点击按钮时改变其颜色 */button:active {color: rgb(224, 38, 38);}/* 输入框获取焦点时改变边框颜色 */button:focus {border-color: rgb(18, 197, 39);border: 5px solid red;}</style>
</head><body><button>2</button><button>1</button><button>63</button>
</body></html>
代码运行示例如下:其中第一个为正常的样式,第二个被点击过之后边框颜色变为了border-color: rgb(18, 197, 39); 其中第三个鼠标正在其上方然后其颜色变为了 border-color: rgb(18, 197, 39);
元素状态伪类:
:enabled
:选择所有启用的表单元素。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 样式化所有启用的表单元素 */input:enabled {background-color: lightgreen;}</style> </head><body><input type="text" placeholder="启用的输入框"><input type="text" placeholder="启用的输入框" disabled> </body></html>
:disabled
:选择所有禁用的表单元素。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 样式化所有禁用的表单元素 */input:disabled {background-color: lightgray;}</style> </head><body><input type="text" placeholder="禁用的输入框" disabled><input type="text" placeholder="启用的输入框"> </body></html>
:checked
:选择被选中的表单元素,如单选按钮或复选框。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 样式化被选中的表单元素 */input:checked+label {color: red;text-decoration: underline;}</style> </head><body><input type="radio" id="option1" name="option" checked><label for="option1">选项 1 (选中)</label><br><input type="radio" id="option2" name="option"><label for="option2">选项 2</label><br> </body></html>
结构化伪类:
:first-child
:选择其父元素的第一个子元素。:last-child
:选择其父元素的最后一个子元素。:nth-child(n)
:选择其父元素的第n个子元素。:nth-last-child(n)
:选择其父元素的倒数第n个子元素。:only-child
:如果元素是其父元素的唯一子元素,则选择该元素。:first-of-type
:选择一组兄弟元素中其类型的第一个元素。:last-of-type
:选择一组兄弟元素中其类型的最后一个元素。:nth-of-type(n)
:选择一组兄弟元素中其类型的第n个元素。:nth-last-of-type(n)
:选择一组兄弟元素中其类型的倒数第n个元素。:only-of-type
:如果元素是其父元素中唯一具有该类型的子元素,则选择该元素。
部分示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>li:first-child {color: red;font-weight: 900;font-size: large;}li:last-child {color: aqua;font-size: larger;font-weight: 100;}p:only-child,a:only-child {background-color: bisque;}li:nth-child(3) {color: blueviolet;}p:only-of-type {background-color: rgb(35, 194, 38);}li:last-of-type {background-color: rgb(238, 191, 63);}</style>
</head><body><ul><li>第一个元素</li><li>第二个元素</li><li>第三个元素</li><li>第四个元素</li><li>第五个元素</li><li>第六个元素</li><li>第七个元素</li><p>啥也没得个</p></ul><p><a href="">这里啥都没得没有连接</a></p><p>最后一个元素</p>
</body></html>
上述代码的运行结果如:其ul中第一个li元素被li:first-child类伪类选择器选中,ul中的第三个元素使用了li:nth-child(3)其中指定了第三个所以被选中了,最后一个元素根据文档流所以被li:last-of-type选中,而其中ul中唯一的p标签被p;only-of-type选中因为p标签是ul标签中唯一的p,而倒数第二行的a因为其是它父元素中唯一的元素所以被选中了。
否定伪类:
:not(selector)
:选择不符合指定选择器的所有元素。
代码示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 选择除了.excluded-class之外的所有p元素 */p:not(.excluded-class) {color: blue;}</style>
</head><body><p>这段文字将会是蓝色。</p><p class="excluded-class">这段文字将不会被样式化,因为它有.excluded-class。</p>
</body></html>
上述代码中的第一个p变为了蓝色而class属性为excluded-class则没有因为使用的是not伪类选择器所以被去除掉了。
目标伪类:
:target
:选择当前活动的目标元素(例如,URL中带有片段标识符的元素)。
代码示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Target Pseudo-class Example</title><style>/* 通用样式 */body {font-family: Arial, sans-serif;margin: 0;padding: 20px;}h2 {color: #333;}p {margin-bottom: 20px;}/* 目标伪类样式 */:target {background-color: lightyellow;padding: 10px;border: 1px solid #ccc;}</style>
</head><body><h1>Welcome to the Target Pseudo-class Example Page</h1><h2 id="section1">Section 1</h2><p>This is the content for section 1.</p><p>Scroll down to see more sections or use the links below to navigate.</p><h2 id="section2">Section 2</h2><p>This is the content for section 2.</p><h2 id="section3">Section 3</h2><p>This is the content for section 3.</p><!-- 页脚导航 --><footer style="position: fixed; bottom: 0; left: 0; width: 100%; background: #f5f5f5; padding: 10px;"><nav><ul><li><a href="#section1">Go to Section 1</a></li><li><a href="#section2">Go to Section 2</a></li><li><a href="#section3">Go to Section 3</a></li></ul></nav></footer>
</body></html>
每个链接都与上面的h2标签一一相连点击链接之后相关的h2标签的背景也会随之改变。
输入伪类:
:valid
:选择所有有效的输入元素。:invalid
:选择所有无效的输入元素。:required
:选择设置有"required"属性的元素。:optional
:选择没有"required"属性的元素。:in-range
:选择值在指定范围内的元素。:out-of-range
:选择值不在指定范围内的元素。:read-only
:选择只读的输入元素。:read-write
:选择非只读的输入元素。
代码示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>input[type="email"]:valid {border: 2px solid green;}input[type="number"]:out-of-range {border: 2px solid red;/* 当输入值超出范围时,输入框边框变为红色 */}input:optional {background-color: aquamarine;}input:read-only {color: rgb(18, 101, 224);}</style>
</head><body><form><label for="email">Email:</label><input type="email" id="email" required><input type="submit" value="Submit"></form><form><label for="numberInput">请输入一个1到100之间的数字:</label><input type="number" id="numberInput" name="numberInput" min="1" max="100" required><input type="submit" value="提交"></form><form><label for="numberInput">请输入一个1到100之间的数字:</label><input type="number" id="numberInput" name="numberInput" min="1" max="100" required><input type="submit" value="提交"></form>
</body></html>
第一个input输入框被选中了因为其输入的值是一个有效值(有效QQ号),第二个输入框被选中了是因为其输入了一个无效值,最后一个输入框没有被选中,其次又设置了input:optional让后续的input提交按钮被选中背景变为aquamarine,后续又选择了只读的input元素将其元素的字体设置为color: rgb(18, 101, 224);
这些伪类提供了强大的选择能力,使我们能够精确地控制和样式化页面上的元素,基于它们的状态、位置、属性或其他条件。