CSS 中的 ::before 和 ::after 伪元素

目录

一、CSS 伪元素

二、::before  ::after 介绍

1、::before

2、::after

3、content 常用属性值

三、::before  ::after 应用场景

1、设置统一字符

2、通过背景添加图片

3、添加装饰线

4、右侧展开箭头

5、对话框小三角

6、插入icon图标


一、CSS 伪元素

CSS伪元素是指,在CSS 中使用一些特殊的选择器,创建出来的虚拟元素, 并不是实际存在的HTML元素;

  • 用来选择和操作文档中的特定部分,实现一些特殊效果;
  • 伪元素使得在不增加额外HTML标签的情况下,对文档中的内容进行样式化;
  • 伪元素也是一种元素,可以设置html中支持的各种属性,包括元素的布局、定位、宽高、背景等等;

本文主要介绍::before 、::after 这个两个伪元素的相关内容和一些使用场景;

二、::before  ::after 介绍

::before  ::after 伪元素用来给元素前面或者后面插入指定内容;

  • 使用content属性来指定要插入的内容;
  • 必须配合content属性一起使用,content的属性值可以为空;
  • 伪元素的display属性值默认为inline

1、::before

::before选择器用来向指定元素之前插入内容;

(1)语法

元素::before{
    content: "要插入的内容";
    /* 其他属性 */
}

(2)示例

给页面所有的p元素前面插入内容;

<style>
    p::before{
        content: "使用::before伪元素插入的内容——";
        /* 其他属性 */
    }
</style>
<body>
    <div>
        <p>第一个P标签中的内容</p>
        <p>第二个P标签中的内容</p>
        <p>第三个P标签中的内容</p>
    </div>
</body>

2、::after

::after选择器用来向指定元素之后插入内容;

(1)语法

元素::after{
    content: "要插入的内容";
    /* 其他属性 */
}

(2)示例

给页面所有的p元素后面插入内容;

<style>
    p::after{
        content: "——使用::after伪元素插入的内容";
        /* 其他属性 */
    }
</style>
<body>
    <div>
        <p>第一个P标签中的内容</p>
        <p>第二个P标签中的内容</p>
        <p>第三个P标签中的内容</p>
    </div>
</body>

3、content 常用属性值

::before  ::after 必须配合content属性一起使用,以下是content的常用属性值:

序号属性值说明
1string设置文本内容;
2url("url")设置图片等媒体文件的URL链接;
3open-quote设置为前引号;
4close-quote设置为后引号;
5attr(attribute)将元素的 attribute 属性以字符串形式返回;
6counter设定计数器;
7none设置 content 为空值;
8normal在 :before 和 :after 伪类元素中会被视为 none,即也是空值;

(1)设置文本内容

设置content的属性值为string类型,即可给伪元素添加文本;

<style>
    span::before{
        content: "使用::before添加的文本前缀——————";
    }
    span::after{
        content: "————使用::after添加的文本后缀";
    }
</style>
......
<body>
    <span class="box">我是HTML元素中的文本</span>
</body>

(2)设置媒体链接

通过url()属性值,即可导入媒体文件为伪元素的内容;

<style>
    .container {
        margin: 100px;
    }
    .avatar::after{
        content: url("D:\\test\\girl.png");
        display: block;
    }
</style>
......
<body>
    <div class="container">
        <div class="avatar">示例图片</div>
    </div>
</body>

注意,这里使用url添加的图片不能设置大小,最好通过背景添加图片;

(3)设置前 || 后引号

通过open-quote或close-quote属性值,即可给设置伪元素的内容为前引号或后引号;

<style>
    p:nth-child(1)::before{
        content:open-quote;
        /* 其他属性 */
    }
    p:nth-child(2)::after{
        content:close-quote;
    }
</style>
......
<body>
    <div>
        <p>添加前引号</p>
        <p>添加后引号</p>
    </div>
</body>

(4)获取元素属性

通过attr()获取元素的某一个属性值(以字符串的形式返回),并设置为伪元素的内容;

<style>
    a:after {
        content: " (" attr(href) ")";
    }
</style>
......
<body>
    <div><a href="https://www.csdn.net">CSDN</a>点击跳转至CSDN...</div>
    <div><a href="https://www.baidu.com">百度</a>点击跳转至百度...</div>
</body>

(5)设置计数器

<style>
    div {
        counter-increment: index;
    }
    div:before {
        content:counter(index);
    }
</style>
......
<body>
    <div>、、、、、、我是第1个div、、、、、、</div>
    <div>、、、、、、我是第2个div、、、、、、</div>
    <div>、、、、、、我是第3个div、、、、、、</div>
    <div>、、、、、、我是第4个div、、、、、、</div>
</body>

三、::before  ::after 应用场景

虽然 ::before  ::after 这两个伪元素的使用方式非常简单,但若能灵活应用,就能实现一些很不错的CSS效果;

1、设置统一字符

<style>
    p::before{
        content: "* ";
        color: red;
        font-size: 24px;
        /* 其他属性 */
    }
    p::after{
        content: ":____________";
        /* 其他属性 */
    }
</style>
...
<body>
    <div>
        <p>姓名</p>
        <p>年龄</p>
        <p>出生日期</p>
        <p>居住地址</p>
    </div>
</body>

2、通过背景添加图片

<style>
    .container{
        margin: 100px;
    }
    .container::after{
        content: "";
        display:block;
        width: 260px;
        height: 260px;
        background-image: url("D:\\test\\girl.png");
        background-position: center;
        background-size: cover;
    }
</style>
......
<body>
    <div class="container">通过背景添加图片</div>
</body>

3、添加装饰线

<style>
    .line{
        display: flex;
        align-items: center;
        margin: 60px;
        height: 40px;
        font-size: 18px;
    }
    .line::before, .line::after{
        content: "";
        width: 300px;
        border-top: 6px double;
        margin: 5px;
    }
    
</style>
......
<body>
    <div class="line">添加装饰线</div>
</body>

4、右侧展开箭头

<style>
    .container{
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;

        width: 400px;
        margin: 100px auto;
        padding: 30px 0;
        border-radius: 8px;
        box-shadow: 0 0 4px 1px #acacac;
    }

    .setting-item{
        position: relative;
        align-items: center;
        display: flex;
        width: 300px;
        height: 40px;
        margin-bottom: 20px;
        border-bottom: 1px solid #ccc;
    }

    .setting-item::after{
        position: absolute;
        right: 0;
        content: "";
        width: 8px;
        height: 8px;
        border-top: 1px solid #666;
        border-right: 1px solid #666;
        transform: rotate(45deg);
    }
    
</style>
......
<body>
    <div class="container">
        <div class="setting-item">账号设置</div>
        <div class="setting-item">权限管理</div>
        <div class="setting-item">相关服务</div>
        <div class="setting-item">帮助与反馈</div>
        <div class="setting-item">......</div>
    </div>
</body>

5、对话框小三角

<style>
    .container {
        width: 400px;
        margin: 100px auto;
        padding: 30px 0;
        border-radius: 8px;
        box-shadow: 0 0 4px 1px yellowgreen;
    }

    .left-box,.right-box {
        display: flex;
    }

    .right-box {
        justify-content: end;
    }

    span {
        position: relative;
        display: flex;
        align-items: center;

        background-color: yellowgreen;
        border-radius: 6px;
        margin: 4px 14px;
        padding: 16px;
    }

    .left-box span::before, .right-box span::after{
        position: absolute;
        content: "";
        width: 12px;
        height: 12px;
        background-color: yellowgreen;
        transform: rotate(45deg);
    }

    .left-box span::before{
        left: -6px;
    }
    .right-box span::after {
        right: -6px;
    }
</style>

......

<body>
    <div class="container">
        <div class="left-box">
            <span>Nice to meet you!</span>
        </div>
        <div class="right-box">
            <span>Nice to meet you, too!</span>
        </div>
    </div>
</body>

6、插入icon图标

<style>
    .login-box{
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;

        width: 400px;
        height: 400px;
        margin: 100px auto;
        border-radius: 8px;
        box-shadow: 0 0 4px 1px #acacac;
    }
    .title{
        font-size: 24px;
        font-weight: 700;
        margin-bottom: 40px;
    }
    .account, .pwd, .login-btn, .forgot-pwd{
        width: 300px;
        height: 40px;
        line-height: 40px;
    }

    .account, .pwd{
        display: flex;
        align-items: center;
        border-bottom: 1px solid #ccc;
        font-size: 14px;
        color: #888;
    }
    .pwd{
        margin-top: 20px;
    }
    .account::before, .pwd::before{
        content: '';
        display: inline-block;  
        width: 24px;
        height: 24px;
        background-repeat: no-repeat;
        background-position: center center;
        background-size: contain;
        margin-right: 8px;
    }
    .account::before{
        background-image: url("D:\\test\\user.svg");
    }
    .pwd::before {
        background-image: url("D:\\test\\pwd.svg");
    }

    .login-btn{
        text-align: center;
        color: #fff;
        font-size: 16px;
        font-weight: 700;
        background: #2687F0;
        border-radius: 5px;
        margin-top: 40px;
    }

    .forgot-pwd{
        text-align: right;
        font-size: 14px;
        color: #888;
        margin-top: 20px;
    }
</style>
......
<body>
    <div class="login-box">
        <div class="title">XXX 管理系统</div>
        <div class="account">请输入账号</div>
        <div class="pwd">请输入密码</div>
        <div class="login-btn">登 录</div>
        <div class="forgot-pwd">忘记密码</div>
    </div>
</body>

=========================================================================

每天进步一点点~!

一个实用的CSS小技巧~!

### 回答1: CSS的:before和:after是伪元素,可以用来在元素的前面或后面插入内容。 :hover是CSS的伪类,表示当鼠标悬停在元素上时应用的样式。 综合起来,可以使用:before和:after伪元素来在元素的前面或后面插入内容,并使用:hover伪类来在鼠标悬停时应用样式。 ### 回答2: CSS是一种样式语言,用于为网页添加样式和设计。CSS提供了许多强大的功能,包括:before、:hover和:after伪类。这些伪类为网页提供了更多的设计选项,使其更具吸引力和专业性。下面我们分别来讲解这三个伪类。 :before:是一个伪类,用于在元素的内容前插入内容。通过使用:before伪类,我们可以为网页加上漂亮的样式,例如很流行的下划线效果、图标等。使用它可以做出很多有趣的效果,可以添加类似于文字前缀、标签符号等的样式。 :hover:通常用于鼠标悬停在链接、按钮等上时的样式改变。它允许我们在用户使用鼠标悬停在一个元素上时改变它的样式。我们可以用它来改变文本的颜色、背景颜色、添加阴影、缩放、旋转等,增强用户交互性和视觉效果。 :after:是一个伪类,用于在元素的内容后插入内容。它的使用与:before类似,在元素之后添加内容,可以用此达到一些特殊的效果,比如为元素添加类似于引用结尾标志等样式。 这三个伪类,使用最广泛的是:hover伪类,因为它可以增强用户的交互体验,并且在网页设计应用非常广泛。虽然:before和:after这两个伪类在使用时更加复杂,但如果使用得当,可以为网页带来一些非常独特和有用的效果。 总之,通过这三个伪类的使用,我们可以在网页设计更加创意和细致,在用户界面上增加更丰富的功能和表现形式,为用户提供更好的体验。 ### 回答3: CSS是层叠样式表的简写,是一种用来设计网页页面样式的语言。CSS包括一系列的选择器和声明块,可以用来控制HTML页面的布局、字体、颜色和其他元素的显示效果。其常用的选择器包括`:before`、`:hover`和`:after`。 `:before`伪元素 `:before`伪元素可以在被选元素的内容前面添加一个内容或样式。它可以用来设置页面的样式或生成页面的一些元素。比如,可以用`:before`选一个元素并为其添加一个箭头。 `:hover`伪类 `:hover`伪类指的是鼠标指针悬停在一个元素上的状态。通常,我们会用它来改变元素的样式,比如改变文字颜色、背景颜色以及元素的透明度等。 `:after`伪元素 `:after`伪元素可以在被选元素的内容后面添加一个内容或样式。它通常用于在一个元素后面添加一些可用来提示用户的文字或图标等。比如,可以用`:after`选一个按钮并为其添加一个小箭头,用来提示用户该按钮可以展开或缩起。 总的来说,CSS常用的选择器包括`:before`、`:hover`和`:after`,它们可以通过设置元素的样式和生成元素的方式来为网页设计提供更多的可能性。掌握这些选择器可以让我们在设计网页是变得更加得心应手。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值