CSS基础之伪类和伪元素

伪类

​伪类是特殊的选择器,用于选择特定状态的元素。例如:鼠标悬停在元素上、第一个元素等。它表现的就像是向HTML元素添加了一个类一样。可以帮你减少在HTML中显示指定类,使代码更灵活,更好维护。

列表(部分)

位置相关

伪类介绍
:root匹配文档树根元素,对于HTML来说就是<html>,相比于html选择器它的优先级更高。
:first-child表示一组兄弟元素的第一个元素。
:first-of-type同一组类型元素的第一个
:last-child表示一组兄弟元素的最后一个元素。
:last-of-type同一组类型元素的最后一个
:only-child匹配没有任何兄弟元素的元素。等效的选择器还可以写成 :first-child:last-child或者*:nth-child(1):nth-last-child(1)*,当然前者的权重会低一点。
:only-of-type代表了任意一个元素,这个元素没有其他相同类型的兄弟元素。
:nth-child()首先找到所有当前元素的兄弟元素, 用 n 来筛选出在当前元素的兄弟元素节点的位置。
:nth-last-child():nth-child()一样,只是它是从后往前计数。
:nth-of-type()针对具有一组兄弟节点的标签, 用 n 来筛选出在一组兄弟节点的位置。
:nth-last-of-type()nth-of-type一样,只是它是从后往前计数。

表单相关

伪类介绍
:autofill当input元素值被浏览器自动填充时,会匹配,用户编辑字段,则停止匹配。
:default匹配表单中默认选中的元素。
:invalid验证失败的input、fieldset或其它form元素。
:valid验证成功的input、fieldset或其它form元素。
:disabled禁用的元素。
:enabled启用的元素。
:empty表示没有子元素的元素,子元素可以是元素、也可以是文本(包括空格)。注释、处理指令和CSS内容不会影响元素是否为空。
:required设置了required属性的input、select、textarea元素。
:optional表示没有required属性的<input>、<select> 或 <textarea>。
:read-only用户不可编辑的元素(input或textarea)。
:read-write用户可以编辑的元素(input或textarea)。
:focus获得焦点的元素(如表单输入),当用户点击元素或通过键盘的tab键选择元素时会被触发。
:focus-within表示一个元素获得焦点,或该元素的后代元素获得焦点。
:in-range匹配当前值在minmax之间的input元素。
:out-of-range匹配当前值在minmax之外的input元素。
:indeterminate表示状态不确定的表单元素(例如值小于100的progress)。

链接相关

伪类介绍
:link匹配所有具有href属性的未被访问的元素,例如:a、area、link。
:any-link匹配所有具有href属性的a、area、link元素。
:visited被用户访问过的链接元素(具有href属性的a和area元素),出于隐私原因,使用该伪类修改的样式非常有限。:vistited放在:link之后:hover:active之前。
:hover被用户将光标悬停的元素,由:hover伪类定义的样式可以被其它链接相关的伪类(:link:vistited:active)覆盖。:hover规则放在:link:vistited之后:active之前。
:active被用户激活的元素,例如:当用户使用鼠标按下按钮开始。
:targetURL片段匹配的唯一页面元素。

打印相关

伪类介绍
:first@page at-rule一起使用,表示打印文档的第一页。
:right@page at-rule一起使用,表示打印文档的所有右侧页面。
:left@page at-rule一起使用,表示打印文档的所有左侧页面。

其它

伪类介绍
:is()匹配提供的选择器列表中任意一个的元素(用来替换matches)。
:not()不匹配提供的选择器列表中任意一个的元素。
:lang()匹配元素的lang属性。
:where()它与:is()的区别是,不增加权重。
:picture-in-picture匹配当前处于画中画模式的元素。

例子(部分)

示例-1(A元素样式)


/* 默认样式 */
:link{
    display: block;
    padding: 0px 30px 0px 30px;
    border: 1px red solid;
    width: 50px;
    color: red;
    text-decoration:blink;
}

/* 访问过 */
:visited{
    display: block;
    padding: 0px 30px 0px 30px;
    border: 1px red solid;
    width: 50px;
    color: gainsboro;
    text-decoration:blink;
}

/* 鼠标悬停 */
:hover{
    color: yellow;
}

/* 鼠标按下 */
:active{
    color: yellowgreen;
}
<!doctype html>
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="伪元素A元素.css">
        <style></style>
    </head>
    <body>
        <div>
            <a href="https://www.baidu.com?a=1">百度</a>
        </div>
    </body>
</html>

示例-2(表单校验)

/* 邮箱校验 */
input[type=email]:valid{
    border: solid 1px yellowgreen;
}
input[type=email]:invalid{
    border: solid 2px red;
}
input[type=email]:focus{
    outline: solid 1px yellow;
}

/* 数值校验 */
input[type=number]:in-range{
    border: solid 1px yellowgreen;
}
input[type=number]:out-of-range{
    border: solid 2px red;
}
input[type=number]:focus{
    outline: solid 1px yellow;
}
<!doctype html>
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="表单校验.css">
        <style></style>
    </head>
    <body>
        <form>
            <input type="email" />
            <input type="number" min="60" max="80">
        </form>
    </body>
</html>

示例-3(第一个段落)

@charset "utf-8";

/* 伪类:匹配article下的第一个p子元素 */
article p:first-child {
    font-size: 120%;
    font-weight: bold;
}
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="CSS语法2.css">
        <style></style>
    </head>
    <body>
        <article>
            <!-- <p>滕王阁序</p> -->
            <p> 豫章故郡,洪都新府。
                星分翼轸,地接衡庐。
                襟三江而带五湖,控蛮荆而引瓯越。
                物华天宝,龙光射牛斗之墟;
                人杰地灵,徐孺下陈蕃之榻。
                雄州雾列,俊采星驰。
                台隍枕夷夏之交,宾主尽东南之美。
                都督阎公之雅望,棨戟遥临;
                宇文新州之懿范,襜帷暂驻。
                十旬休假,胜友如云;
                千里逢迎,高朋满座。
                腾蛟起凤,孟学士之词宗;
                紫电青霜,王将军之武库。
                家君作宰,路出名区;
                童子何知,躬逢胜饯。
            </p>
            <p> 时维九月,序属三秋。
                潦水尽而寒潭清,烟光凝而暮山紫。
                俨骖騑于上路,访风景于崇阿。
                临帝子之长洲,得天人之旧馆。
                层峦耸翠,上出重霄;
                飞阁流丹,下临无地。
                鹤汀凫渚,穷岛屿之萦回;
                桂殿兰宫,即冈峦之体势。
            </p>
        </article>
    </body>
</html>

伪元素

​伪元素以类似方式表现,不过表现得是像你往标记文本中加入全新的 HTML 元素一样,而不是向现有的元素上应用类。伪元素开头为双冒号::

列表(部分)

伪类介绍
::after用来创建一个伪元素,作为已选中元素的最后一个子元素。通常会配合content属性来为该元素添加装饰内容。这个虚拟元素默认是行内元素。
::before用来创建一个伪元素,作为已选中元素的第一个子元素。通常会配合content属性来为该元素添加装饰内容。这个虚拟元素默认是行内元素。
::file-selector-button代表 type="file"的按钮。
::first-letter代表块级元素第一行的第一个字母,并且文字所处的行之前没有其他内容(如图片和内联的表格)。
::first-line代表块级元素的第一行。第一行的长度取决于很多因素,包括元素宽度,文档宽度和文本的字体大小。
::marker代表列表的标记框,它作用在设置了display: list-item的元素和伪元素上,例如lisummary
::selection代表获得焦点的元素,例如通过鼠标或tab选中的元素。

列子(部分)

示例-4(列表)

li::marker{
    content: '★ ';
    font-size: 1.2em;
}
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="标记框.css">
        <style></style>
    </head>
    <body>
      <ul>
        <li>李白</li>
        <li>辛弃疾</li>
        <li>李清照</li>
        <li>苏轼</li>
        <li>范仲淹</li>
        <li>王安石</li>
        <li>司马光</li>
      </ul>
    </body>
</html>

示例-5(首行)

/* 首字 */
p::first-line{
    color: gold;
}
/* 首行 */
p::first-letter{
    color: yellowgreen;
    font-size: 1.2em;
}
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="首行.css">
        <style></style>
    </head>
    <body>
      <p>豫章故郡,洪都新府。
        星分翼轸,地接衡庐。
        襟三江而带五湖,控蛮荆而引瓯越。
        物华天宝,龙光射牛斗之墟;
        人杰地灵,徐孺下陈蕃之榻。
        雄州雾列,俊采星驰。
        台隍枕夷夏之交,宾主尽东南之美。
        都督阎公之雅望,棨戟遥临;
        宇文新州之懿范,襜帷暂驻。
        十旬休假,胜友如云;
        千里逢迎,高朋满座。
        腾蛟起凤,孟学士之词宗;
        紫电青霜,王将军之武库。
        家君作宰,路出名区;
        童子何知,躬逢胜饯。</p>
    </body>
</html>

示例-5(按钮角标)

button {
    border: 1px yellowgreen solid;
    padding: 0px 0px 0px 0px;
    width: 100px;
    height: 30px;
}
button > span{
    margin:0px 0px 0px 0px;
}
button::before {
    display: inline-block;
    width: 15px;
    height: 15px;
    border: 2px yellowgreen solid;
    content: "";
    border-radius:50%;
    position: relative;
    top: 3px;
    left: -9px;
}

button::after {
    display: inline-block;
    width: 5px;
    height: 5px;
    border: 2px navajowhite solid;
    background-color: navajowhite;
    content: "";
    border-radius:50%;
    position: relative;
    top: -2px;
    left: -49px;
}
<!doctype html>
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="第一个子元素.css">
        <style></style>
    </head>
    <body>
      <button><span>保存</span></button>
    </body>
</html>

结合使用

示例6(第一段落的第一行)

article p:first-child::first-line {
  font-size: 120%;
  font-weight: bold;
}
<html lang="en-US" prefix="og: https://ogp.me/ns#">
    <head>
        <meta charset="ASCII"/>
        <meta property="og:locale" content="zh-CN"/>
        <title>CSS基础语法</title>
        <link rel="stylesheet" href="结合使用.css">
        <style></style>
    </head>
    <body>
        <article>
            <!-- <p>滕王阁序</p> -->
            <p> 豫章故郡,洪都新府。
                星分翼轸,地接衡庐。
                襟三江而带五湖,控蛮荆而引瓯越。
                物华天宝,龙光射牛斗之墟;
                人杰地灵,徐孺下陈蕃之榻。
                雄州雾列,俊采星驰。
                台隍枕夷夏之交,宾主尽东南之美。
                都督阎公之雅望,棨戟遥临;
                宇文新州之懿范,襜帷暂驻。
                十旬休假,胜友如云;
                千里逢迎,高朋满座。
                腾蛟起凤,孟学士之词宗;
                紫电青霜,王将军之武库。
                家君作宰,路出名区;
                童子何知,躬逢胜饯。
            </p>
            <p> 时维九月,序属三秋。
                潦水尽而寒潭清,烟光凝而暮山紫。
                俨骖騑于上路,访风景于崇阿。
                临帝子之长洲,得天人之旧馆。
                层峦耸翠,上出重霄;
                飞阁流丹,下临无地。
                鹤汀凫渚,穷岛屿之萦回;
                桂殿兰宫,即冈峦之体势。
            </p>
        </article>
    </body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`::-webkit-scrollbar`伪元素可以用来选择滚动条元素,并设置其样式,但是它不能让滚动条自适应大小。要让滚动条自适应大小,可以使用`::-webkit-scrollbar`伪元素的`width`属性和`height`属性来设置滚动条的宽度和高度。 具体步骤如下: 1. 首先,为滚动条元素设置一个基础样式,例如: ```css ::-webkit-scrollbar { background-color: #f0f0f0; width: 10px; height: 10px; } ``` 在上面的样式中,我们将滚动条的背景颜色设置为灰色,宽度和高度都设置为10px。 2. 接着,可以使用CSS的`calc()`函数和`100%`单位来计算滚动条的宽度和高度,例如: ```css ::-webkit-scrollbar { background-color: #f0f0f0; width: calc(100% - 20px); height: calc(100% - 20px); } ``` 在上面的样式中,我们使用`calc()`函数计算滚动条的宽度和高度,减去了一个20px的边框宽度,这样就可以让滚动条自适应大小。 3. 最后,可以为滑块和轨道等滚动条的不同部位设置样式,例如: ```css ::-webkit-scrollbar { background-color: #f0f0f0; width: calc(100% - 20px); height: calc(100% - 20px); } ::-webkit-scrollbar-thumb { background-color: #007bff; } ::-webkit-scrollbar-track { background-color: #e9ecef; } ``` 在上面的样式中,我们为滑块设置了蓝色的背景颜色,为轨道设置了灰色的背景颜色。 需要注意的是,只有Chrome和Safari浏览器支持`::-webkit-scrollbar`伪元素。如果需要在其他浏览器中实现滚动条自适应大小,可以使用一些第三方库或者自定义滚动条的插件来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值