CSS伪元素

CSS伪元素css 的伪元素 之所以被称为伪元素 是因为他们不是真正的页面元素 html 没有对应的元素 但是其所有用法和表现行为与真正的页面元素一样 可以对其使用诸如页面元素一样的 css 样式 表面上看上去貌似是页面的某些元素来展现 实际上是 css 样式展现的行为 因此被称为伪元素 如下图 是伪元素在 html 代码机构中的展现 可以看出无法伪元素的结构无法审查 css 有一系列的伪元素 如 before after first line first letter 等 本文就详述一下 before 和 after 元素的使

css的伪元素,之所以被称为伪元素,是因为他们不是真正的页面元素,html没有对应的元素,但是其所有用法和表现行为与真正的页面元素一样,可以对其使用诸如页面元素一样的css样式,表面上看上去貌似是页面的某些元素来展现,实际上是css样式展现的行为,因此被称为伪元素。如下图,是伪元素在html代码机构中的展现,可以看出无法伪元素的结构无法审查。

css有一系列的伪元素,如:before,:after,:first-line,:first-letter等,本文就详述一下:before和:after元素的使用;

伪元素:before和:after添加的内容默认是inline元素;这个两个伪元素的content属性,表示伪元素的内容,设置:before和:after时必须设置其content属性,否则伪元素就不起作用。那么问题来了,content属性的值可以有哪些内容呢,具体有以下几种情况:

  • 字符串,字符串作为伪元素的内容添加到主元素中

    注意:字符串中若有html字符串,添加到主元素后不会进行html转义,也不会转化为真正的html内容显示,而是会原样输出

  • attr(attr_name), 伪元素的内容跟主元素的某个属性值进行关联,及其内容为主元素的某指定属性的值

    好处:可以通过js动态改变主元素的指定属性值,这时伪元素的内容也会跟着改变,可以实现某些特殊效果,如图片加载失败用一段文字替换。

  • url()/uri(), 引用外部资源,例如图片;
  • counter(), 调用计数器,可以不使用列表元素实现序号问题。
  • 分享一些::after和::before使用的经验

  • 以下例子多数是在特定平台上使用过的,未做兼容处理,建议在chrome下浏览


    1.间隔符用法

    如文章最开始的例子,使用::after伪元素做间隔符,并使用伪类:not排除掉最后一个元素。

    例子


    2.做border三角图标

    很多开发者都用过border做的三角图标,本身三角符号就不属于文档,使用伪元素做三角符最合适了。

    例子


    3.字符图标

    最近笔者在开发微信小程序,因为微信小程序不支持svg和背景图,于是笔者大量使用字符图标,感觉字符图标非常方便,就是受设备系统字体库限制。

    例子


    4.webfont的图标

    现在webfont图标的最佳实践就是使用i标签和::after或者::before,实现这种图标最佳实践的工具非常多,比如Fontello – icon fonts generator,从这个网站我们可以下载svg的图标库。这种例子太多了,这里就不再列举。


    5.做单位、标签、表单必填标准

    笔者一直认为表单输入框的必填标记(往往是红色的“*”字符),不应该放到文档当中,使用::before可以很优雅地解决这个问题(其实就是字符图标的进一步应用)。

    对于单位和前(后)置标签,也可以这样做。但是多数情况下不推荐这种做法,因为单位和标签应该是文档的一部分。

    例子


    6.做一些效果

    可以参考《理解伪元素 :before 和 :after》这篇文章的效果,笔者曾经在实际项目中使用过“迷人的阴影”效果,也曾在微场景开发中实现过一些类似的动画。

    例子


    7.实现一些标签对placeholder的支持

    只有几个标签支持placeholder,而且如虽然是input但是也不支持。使用::before可以让一部分标签也实现对placeholder属性的支持。

    例子


    8.实现文字图片居中对齐

    优雅地实现张鑫旭老师的inline-box居中方法,使用一个高度为100%的::before将自身的对齐线移动到自己的中线,这样里面的所有内联元素都居中对齐了。

    例子


    9.清除浮动

    这个很常用,bootstrap的clearfix类就是使用这个方法。

    例子


    10.使用pointer-events消除伪元素事件

    之前提到过,伪元素::after和::before会替所在元素捕获用户事件,有时候这并非我们想要的,因为这样会影响被::after和::before覆盖的子节点或者兄弟节点捕获用户事件,使用pointer-events可以消除这种问题。

    例子

    所有例子的源码在https://github.com/laden/css-before-and-after-test

    简单就分享这么多,总之使用伪元素的核心是更利于语义化,这是我们活用::after和::before的前提,否则就是胡乱使用了。总体可以分为四种用法:

    1.用css创建装饰性元素

    2.用css创建用于布局的元素,实现特殊布局的特殊需要

    3.做显示图标的实现手段

    4.配合attr显示属性值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203873.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午9:24
下一篇 2026年3月19日 下午9:24


相关推荐

  • 应用程序报错0xc0000005_电脑提示0xc0000005

    应用程序报错0xc0000005_电脑提示0xc0000005在运行一个应用程序OWN.exe时一直报错,我应该如何处理?查看日志内容如下:错误应用程序名称:OWN.exe,版本:4.8.10.2658,时间戳:0x5c75280f错误模块名称:ntdll.dll,版本:6.1.7601.23915,时间戳:0x59b94a7d异常代码:0xc0000005错误偏移量:0x0005294f错误进程ID:0xca4错误应用程序启动时间…

    2022年10月3日
    4
  • 大型网站架构设计及技术总结

    大型网站架构设计及技术总结一个小型的网站 比如个人网站 可以使用最简单的 html 静态页面就实现了 配合一些图片达到美化效果 所有的页面均存放在一个目录下 这样的网站对系统架构 性能的要求都很简单 随着互联网业务的不断丰富 网站相关的技术经过这些年的发展 已经细分到很细的方方面面 尤其对于大型网站来说 所采用的技术更是涉及面非常广 从硬件到软件 编程语言 数据库 WebServer 防火墙等各个领域都有了很高的要求

    2026年3月17日
    2
  • C++控制台制作ATM机[通俗易懂]

    C++控制台制作ATM机[通俗易懂]文章目录题目代码实现所需要头文件Card类Bankcard类ATM类ATM类函数的声明主函数题目在控制台编程中共设置了三个类,ATM类、Card类和Bankcard类,设计函数实现登录、查询、修改密码、取款、存款、转账以及退出系统等功能。程序分别从MFC控件和c++控制台实现。同时在要求的基础之上,进行了部分仿ATM的优化,例如在登陆界面输入错误三次就会冻结账号退出系统,在MFC对话框中加入图…

    2022年8月18日
    10
  • 建议收藏 | 最全的 JS 逆向入门教程合集

    建议收藏 | 最全的 JS 逆向入门教程合集点击上方 咸鱼学 Python 选择 加为星标 第一时间关注 Python 技术干货 嘿 大家好 截止今天咸鱼零零散散分享爬虫 数据分析基础和 Web 的内容已经 136 篇

    2026年3月18日
    2
  • 大数据技术的发展趋势

    大数据技术的发展趋势英国牛津大学教授维克托·迈尔-舍恩伯格在其所撰写的《大数据时代》中表述,大数据时代是“已经发生的未来”,而在这个已经发生的未来里,没有旁观者。作为时代发生的必然产物,大数据正加速渗透至我们的日常生活,正完成对各传统领域的颠覆。本文从大数据时代的特点出发,为读者介绍目前的大数据技术的发展趋势以及大数据的生态体系。大数据时代的特点和市场规模大数据时代两个特点。第一,大数据技术以开源为主,迄今为止,尚未形成绝对技术垄断,即便是IBM、甲骨文等行业巨擘,也同样是集成了开源技术和该公司已有产品而已。开源技

    2022年5月12日
    50
  • linux 重启redis 命令

    linux 重启redis 命令redis 已经加入到 etc 下也就是服务器启动 redis 也启动 突然发现连不上 redis 所以上来看看查看 redis 状态 systemctlsta redis service redis serverLoaded loaded usr lib systemd system redis service disabled vendorpreset disabled Active inactive dead 发现没启动启动后再看看状态 systemctl

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号