百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

伪元素的妙用2 - 多列均匀布局及title属性效果

myzbx 2025-02-28 16:37 9 浏览

伪元素虽然强大,但是还是有一些特定的标签是不支持伪元素 before 和 after 的。

诸如 ,这几个标签是不支持类似 img::before 这样使用。

究其原因,要想要标签支持伪元素,需要这个元素是要可以插入内容的,也就是说这个元素要是一个容器。而 input,img,iframe 等元素都不能包含其他元素,所以不能通过伪元素插入内容。

纯CSS实现title属性hover效果

我们都知道,在 HTML 标签中有这样一个属性 – title,该属性规定关于元素的额外信息,就是我们可以往 title 里面填入一段文字,鼠标移到元素上时就会显示这段文本。

像是这样 。效果如下:

;

但是这个 hover 框有两个小问题:

  • 响应太慢,通常鼠标 hover 上去要隔 1s 左右才会出现这个 title 框

  • 框体结构无法自定义,弹出框的样式无法自定义

嗯,通常要解决上面的方法,或者说我们需要一个鼠标 hover 上去的时候弹出一个提示层的效果都不会采用 title 属性,而是配合使用 JS 模拟一个弹出层。

这里有一个纯 CSS 的方案可以解决这个场景,运用了伪元素,先上 Demo:

鼠标 hover 一下文字,发现弹出层响应十分迅速(因为就是 CSS hover,没有延迟)。并且这里的弹出层的样式也可以完全自定义,没有用到 JS 代码,并且查看 HTML 代码可以看到不需要多余的标签。

怎么实现的呢?主要是运用了伪元素的 content属性,content通常是用于在伪元素中插入内容的。而其中有一句语法content: attr(value)类似这样,可以读取对应 HTML 标签的value属性。也就是:

  1. 假设一个 HTML 标签定义为:

  2. 那么该 div 对应的伪类如果设置了 content:attr(data-msg),就可以读取到 data-msg 的值,相当于content:"ABC"

而且框体由于是伪类生成的,所以我们可以自定义它的样式及位置,运用这个效果,我们应用在可以在许多无法正常把信息展示完的地方。

借用伪元素实现多列均匀布局

我们经常需要实现多列均匀布局,能够自适应各种情况,如下:

在移动端我们可以使用 flex 布局,但是在 PC 端如果要兼容 IE6+ ,通常都需要一些额外的标签控制最后一个元素或者配合 JS 进行运算。

我们知道,有个 text-align:justify可以实现两端对齐文本效果,一开始我猜测使用它可以实现:

试了一下是不行的,并没有实现所谓的两端对齐,查找原因,在 W3C找到这样一段解释:

最后一个水平对齐属性是 justify,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。

额,我看完上面一大段解释还是没明白上面意思,再继续查证,才找到原因:

虽然 text-align:justify 属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。

也就是说每一个 1间隙,至少需要有一个空格或者换行或者制表符才行。

我尝试给每一块中间添加一个换行符,发现还是不行:

再寻找原因,是出在最后一个元素上面,然后我找到了 text-align-last这个属性,text-align-last 属性规定如何对齐文本的最后一行,并且 text-align-last 属性只有在 text-align 属性设置为 “justify” 时才起作用。

尝试给容器添加 text-align-last:justify,发现终于可以了,多列均匀布局:

但是一看兼容性,惨不忍睹,只有 IE 和 最新的 chrome 支持 text-align-last 属性,也就是说,如果你不是在使用 IE 或者 最新版的 chrome 观看本文,上面这个 codePen 例子还是没有均匀分布。

好,铺垫了这么久,终于可以引出本文的主角伪元素了,上面说了要使用 text-align:justify实现多列布局,要配合text-align-last,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素,可以完美实现:

通过给伪元素 :after 设置 inline-block,配合容器的text-align: justify就可以轻松实现多列均匀布局了。配合几句 hack 代码,可以实现兼容到 IE6+ ,最重要的是代码不长,很好理解。

本文主要就是多介绍了伪元素的两种实用方法,更多伪元素的妙用可以戳

我另一篇讲述 CSS 伪元素的文章: 【CSS进阶】伪元素的妙用–单标签之美,看完本文觉得有意思的可以再去看看上一篇。

也希望觉得不错的同学顺手在我的 Github 点个 star : CSS3奇思妙想。

希望这篇文章对大家有所帮助,尤其是在对问题解决的思维层面上。

到此本文结束,如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

相关推荐

炫酷的计时器效果Canvas绘图与动画

-----------------------------------------华丽的分割线-----------------------------------------------------...

康托尔集合的绘制及其Python绘制(康托尔集合论的概括原则是什么)

康托尔三分集(Cantorternaryset)是数学中一个著名的分形例子,由德国数学家格奥尔格·康托尔在1883年引入。它通过不断去掉线段的中间三分之一部分,重复这个过程得到的一个分形集合。康托...

一文带你搞懂JS实现压缩图片(js 压缩图片)

作者:wuwhs转发链接:https://segmentfault.com/a/1190000023486410前言公司的移动端业务需要在用户上传图片是由前端压缩图片大小,再上传到服务器,这样可以减...

数据可视化—Echarts图表应用(数据可视化图表类型)

ECharts是一款由百度前端技术部开发的,基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。使用JavaScript实现开源的可视化库,可以流畅的...

ThreeJS中三维世界坐标转换成二维屏幕坐标

Threejs全称是“Javascript3Dlibrary”。WebGL则是openGL在浏览器上的一个实现。Threejs对WebGL进行了封装,让前端开发人员在不需要掌握很多数学知识和绘图知...

鸿蒙开源第三方件组件——加载动画库

前言基于安卓平台的加载动画库AVLoadingIndicatorView(https://github.com/81813780/AVLoadingIndicatorView),实现了鸿蒙化迁移和重构...

canvas实现下雪背景图(canvas绘制背景图)

canvas下雪背景html+css+js实现:1.定义标签:<h1>北极光之夜。</h1><divclass="bg"></...

用canvas画简单的“我的世界”人物头像

前言:花了4天半终于看完了《HeadFirstHTML5》,这本书的学习给我最大的感受就是,自己知识的浅薄,还有非常多非常棒的技术在等着我呢。[熊本表情]扶朕起来,朕还能学!H5新增标签里面最喜欢...

Manim-基础图形之点(什么叫图形基点)

制作数学演示视频时需要用到各类的集合图形,manim中内置了一些列的图形,本篇就从最简单的点讲起。点作为manim中最简单图形,也是其他所有图形的基,所有图形的绘制都是靠点来定位。manim中的点主...

一起学 WebGL:坐标系(坐标系格式)

大家好,我是前端西瓜哥,今天我们来学习WebGL。WebGL的世界坐标系是三维的。默认使用笛卡尔坐标系的右手坐标系,满足右手定则,即x轴向右,y轴向上,z轴向着观察者,原点位于画布中心。然...

漫画 欣赏 - 聖鬥士星矢 THE.LOST.CANVAS 冥王神話 24

《圣斗士星矢THELOSTCANVAS冥王神话》改编自车田正美原作的漫画《圣斗士星矢》,由车田正美原作、手代木史织作画。其外传《圣斗士星矢THELOSTCANVAS冥王神话外传》则在《...

漫画 欣赏 - 聖鬥士星矢 THE.LOST.CANVAS 冥王神話 25 - 完结篇

《圣斗士星矢THELOSTCANVAS冥王神话》改编自车田正美原作的漫画《圣斗士星矢》,由车田正美原作、手代木史织作画。其外传《圣斗士星矢THELOSTCANVAS冥王神话外传》则在《...

Eric Fischl 名画录(eric tucker画家)

艾瑞克费舍尔(EricFischl,1948——),是美国新表现主义画家,当代国际画坛一位十分活跃的人物,在国际上享有很高的知名度。作为20世纪美国第6次经济衰退时期本土第一个伟大画家艾瑞克·费舍尔...

canvas绘画板的实现(canvas画布)

新项目有一个需求:客户需要在订单确认的时候签名。第一反应就是用html的canvas实现,同事一起商量了下,canvas有三个制约:canvas必须要用鼠标,签名会很难看;手机端webapp怎么实现...

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...