前端必须掌握的 before/after 伪元素小技巧

CSS 有一系列的伪元素,如 :before:after:first-line:first-letter 等。

我们平常使用最多的是 :before:after,这也是所有前端开发都要掌握并且熟练应用的技巧。

before/after 伪元素介绍

:before:after 代表元素自身内容 之前之后 的内容。

先举个简单的例子,一看就懂了:

p 元素原本的内容只有"之道前端",但是利用 :before:after 可以给原来 p 元素自身内容的前面和后面添加内容。

最终的结果,就像 p 元素原本就拥有这些内容一样。

:before:after 之所以称为伪元素,是因为它们是元素,虽然是假的(伪),但本质还是元素,因此,其他的 CSS 规则可以操作在它们身上。比如:

正因为这个特性,等于每个 HTML 元素都包含 2 个子元素,不需要写 HTML 标签,但是可以赋予 CSS 规则,这给了我们非常多的想象空间和便利。

这里比较关键的是 content 属性,这个属性表示伪元素的内容是什么,因为伪元素是没有 HTML 标签的,所以只能在 CSS 中定义这些元素的内容。content 属性的值常用的主要有以下 3 类:

  • 字符串:赋予常量文字内容
  • attr(attr_name) :使用父元素 attr_name 属性的值作为伪元素的内容,可以看下面的例子
  • url:引用外部资源,常用的是图片,这里就不举例了

如果不想要内容的话,就赋予空字符串就好了,这也是我们最常用的方式,因为基于结构和样式分离的原则,我们不建议在 CSS 中编写页面内容,这样不利于调试和维护。

同时,因为伪元素不能被 JS 操作,所以 :before:after 一般都用来实现样式效果。

好了,:before:after 伪元素的基础知识就学习这么多就够了,其他的你可以扩展去学习。

before/after 伪元素的作用

网上有很多 :before:after 的应用场景举例,比如清除浮动之类的,我就不重复了,你可以自己去查。

我这里想着重介绍擅于应用 :before:after 的作用,让你想清楚方向,正确练习它们。做到:在有需要的时候,想到要使用它们。同时只在需要的时候使用,而不是滥用。

有助于结构&样式分离,提升 HTML 代码质量

一份高质量的 HTML&CSS 代码,一定是结构&样式分离的。而 :before:after 对于结构&样式分离非常有帮助。

正如前文的介绍,:before:after 可以在不写 HTML 标签的前提下,给每个元素增加两个子元素,而且大部分 CSS 都可以作用到它们身上,利用这个特性,我们可以实现很多细节的样式,而不需要为了实现某些效果,写一些空的 div/span 标签。

这不仅可以节省 HTML 标签和代码,更重要的是,它们有助于结构&样式分离,让我们的 HTML 代码更加纯净。

如果你拥有结构&样式分离的思想,为了实现某个 CSS 效果必须要添加一些空标签,为此感到很难受的时候:before:after 大概率能帮到你。

举个小栗子:

这是一个常见的效果,就是一些居中子标题,两边再补一点样式,这样好看一点。

可以看到上面两种实现方案的效果和 CSS 代码几乎一样,但是 HTML 的差别很明显,上面的 HTML 代码多了两个 span 元素,让我们的 HTML 代码看起来很奇怪。

再举一个例子,在我们的 P2 原创项目 (戳此查看)中,实现天猫首页的顶部栏中有这样一个效果:

这是很常见的效果,在一些按钮的后面,有个小箭头,或者在前面有个小图标。

这时,我们也可以使用 :before:after 来实现这些效果。

以上代码节选自我们的 P2 原创项目的官方参考答案,感兴趣可以点击这里查看

再来看另外一个例子,也是在我们的 P2 原创项目 (戳此查看)中,实现这样一个效果:

这个小小的 tips 文案,虽然内容不多,但是却混杂着两种布局,"进口精选" 和 "大牌好货" 字号一样,横向布局;但是"轻松购入"字号和"大牌好货"不一样,纵向布局。

如果不注意的同学,很可能就会写出很复杂的嵌套标签,实现横向 + 纵向的布局,但是这里使用 after 伪元素之后,可以很好地精简我们的 HTML 代码,让纵向布局在一个元素中解决。同时,使用 contet: attr() 让文案保留在 HTML 代码中,方便 HTML 代码的维护。

以上代码节选自我们的 P2 原创项目的官方参考答案,感兴趣可以点击这里查看

扩展"自己"

谨记::before:after 让每个 HTML 元素都默认新增 2 个子元素

因此,当我们因为要实现某个复杂样式,需要多个元素配合时,就可以利用 :before:after,这样我们只需要 1 个元素即可。

例如下面的小图标:

:before:after 伪元素是属于父元素的,因此当我们点击这些伪元素的时候,实际上是点击父元素。

利用这个特性,我们可以实现类似 input + label 的点击联动效果。

除了这个之外,我们最常用这个点击关联特性来实现扩展元素的可点击区域。比如:

今天的分享到这里就差不多了,最后小结一下。

要想提升我们的 HTML&CSS 能力,一定要注意结构&样式分离

:before:after 这对伪元素是我们达成这个目标的有力助手,是所有前端都必须熟练掌握的技能。

----------------【END】----------------

如果你是真心喜欢前端,并相信成长,想要提升自己的话,欢迎加入之道前端学习圈子。

戳这里 免费获取 之道前端的学习资料和专属服务。

相关推荐
你疯了抱抱我6 分钟前
【测试】pipeDemo 前端后端接口功能白盒测试 04/12/12
前端
你捉不到的this39 分钟前
useModel 源码如此简单
前端·javascript·源码
蓝色天空上的云朵40 分钟前
B4X编程语言:B4X控件方法汇总
开发语言·前端·javascript
市民中心的蟋蟀41 分钟前
第六章 深入比对算法与协调器--上
前端·javascript·react.js
梧桐树04291 小时前
python面向对象高级编程:使用枚举类
java·前端·javascript
Lx3521 小时前
React 通知组件 Notification
前端·react.js
爱上语文1 小时前
前端成长之路:CSS元素显示模式
前端·css
NoneCoder1 小时前
CSS系列(16)-- 架构与模式详解
前端·css·架构
小林rr1 小时前
私有化部署VSCode Web:实现随时随地轻办公
前端·ide·vscode
桃园码工1 小时前
9_less教程 --[CSS预处理]
前端·css·less