1. CSS :before属性介绍
CSS的伪元素:before属性可以让我们在一个元素前面插入一个内容。这个内容是由:before生成的,但这个新生成的内容不是通过HTML输入进来的,通过这个:before属性可以为元素添加一些“图像”的效果,如果使用好,针对一些简单的图像效果,我们就可以使用伪元素:before添加“图像”,这样就可以避免使用图片或者其他的标记。
在许多情况下,为了实现一些特定的样式效果,需要在元素的某个位置插入一些特殊的内容。实现这种效果最直观的想法就是插入一个标签,像这样:
.list-item::before{
content:"";
display:inline-block;
height:15px;
width:15px;
background-color:red;
margin-right:10px;
}
在这段代码中,我们新定义了:before属性,并为它设置了一些属性值。虽然我们在HTML结构当中没有为这个类添加前缀,但是通过:before伪类,我们可以给这个元素添加一个类似“图像”的特性。
1.1 使用:before实现三角形
假设在一个按钮元素中需要实现一个三角形的箭头,我们可以使用:before生成一个三角形,代码如下:
.arrow-icon::before {
content:"";
position:absolute;
top:-10px;
left:50%;
margin-left:-5px;
border-style: solid;
border-width: 0 5px 10px 5px;
border-color: transparent transparent red transparent;
}
使用这个CSS样式,就可以在一个class为“arrow-icon”的元素前面插入一个表示三角形的标记,从而实现三角形箭头的效果。
1.2 使用:before实现内联元素
在页面当中,我们常常需要为特殊的元素指定一些公共的行为。例如,在文本块中某个元素需要作为关键字进行显示,我们在HTML中可以通过<em>
标签来实现这一点。但是如果只是为了简单的改变字体的样式,我们就没必要在HTML结构中添加自定义标签。我们可以使用:before来为页面中的任意一个元素生成内联元素。代码如下:
.keyword::before {
content: "【";
color: #999;
}
.keyword::after{
content:"】";
color:#999;
}
通过这种方式,我们就可以在任意元素之前模拟生成一些虚拟的内容,这会让我们的设计更加灵活。
2. CSS :before属性使用示例
上面介绍了CSS :before属性的基本用法,下面通过实际示例来展示一下 :before属性的使用场景。
2.x 示例1:设置字体图标样式
使用:before属性也可以方便地设置字体图标的样式,从而实现一些简单的图像效果。下面是一个添加字体图标样式的示例:
.icon::before {
content:"\f002";
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
text-decoration: inherit;
margin-right:5px;
}
在这个示例当中,我们使用了 :before 伪属性,在元素的前面添加了一个特殊效果(这里是一个字体图标),图标使用了FontAwesome字体库,由于我们在 content 属性中使用了\f002,这会让 :before 生成的内容为一个碗形的字体图像。
2.x 示例2:自动生成列表符号
通过修改列表用的样式,我们可以使用:before伪类来自动生成列表符号。下面的代码可以在无序列表中自动生成圆形符号:
li:before {
content:"\25cf";
color:#aaa;
margin-right:10px;
}
我们使用 \25cf 作为 content 属性值,这个值代表的是圆形符号的 Unicode 编码值,这样就可以生成一个表示圆形符号的小圆点了。
2.x 示例3:生成登陆框圆形头像
如果我们在登录界面下方要显示用户的头像,我们可以通过 CSS :before 属性为其生成圆形头像。但是此时我们需要为 div
元素或 a
元素添加 background
属性,从而为它们添加相应的背景图像。以下是关键代码:
.user-avatar{
background:url("user.jpg") no-repeat center center;
background-size:cover;
width:80px;
height:80px;
border-radius:50%;
overflow:hidden;
position:relative;
}
.user-avatar:before {
content: "";
position: absolute;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, 0.2);
}
在上面的代码中,我们首先为 .user-avatar 元素添加了一张包含头像的背景图像,下面我们使用 :before 伪属性为这个元素添加一个半透明的遮罩层,最后,这个元素就变成了一个圆形的形状。
3. CSS :before 与 :after 的区别
对于 :before 和 :after 伪类,很多人会感到混淆,因为这两个关键字看上去非常相似。
在本质上,这两个关键字都代表了一个伪元素,它们可以让我们在样式表中为一个元素添加额外的内容。它们之间的主要区别在于::before 生成的内容在元素的前面,而 :after 生成的内容在元素的后面。以下是具体的代码:
/* :before在元素的前面添加内容 */
.element:before {
content: "▲ ";
}
/* :after在元素的后面添加内容 */
.element:after {
content: " ▼";
}
在这个示例中,我们在一个 .element 元素的前面和后面分别添加了两个 content 值相等的 :before 和 :after 伪元素。因为 :before 在元素前面添加生成的内容而 :after 是在元素的后面添加,所以最终的生成的内容是这样的:
<div class="element">▲ Element ▼</div>
因为 :before 和 :after 的应用原理十分相似,所以我们可以将这两个伪元素的应用当作一个整体来看。这里,我们列出了一些 :before 和 :after 可以发挥作用的实际应用场景:
- 针对列表元素添加符号
- 针对友情链接内容添加超链接礼物进行美化
- 针对元素添加分隔符样式
- 针对Input添加下载样式
- 针对 en-us 语言界面使用 :before 为一个元素添加公共的内容
- 针对其余的一些类似场景来增强额外的视觉效果
4. 总结
CSS伪元素:before属性的使用十分灵活,因为在某些场景下,我们可以替代其他标记来生成一些“图像”的效果,而在其他场景下,我们则可以利用:before来增强某些元素的视觉效果。
知道了:before 的功能,我们就不必再花费过多的时间去添加和修改HTML结构,这样我们就可以在保持HTML结构纯净、语义化的前提下,让Web页面拥有更多的视觉效果。而通过这些技巧,我们就可以让 Web 开发的工作变得更加高效、可维护以及精确。