最近无论是工作还是自我学习提升都很忙,面对长篇大论的博文总是心有余而力不足,但又不断的接触学习到零碎的但是很有意义的知识点,很想分享给大家,所以本篇可能会很短。

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

正文从这里开始:

哪些标签不支持伪元素?

我也是才知道这个姿势。为了不误导读者,就赶紧补充一下。

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

诸如 <img /> 、 <input />、 <iframe />,这几个标签是不支持类似 img::before 这样使用。

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

纯CSS实现title属性hover效果

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

像是这样 <element title="value" >。效果如下:

;

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

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

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

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

这里有一个纯 CSS 的方案可以解决这个场景,并且不需要添加额外的 HTML 标签,运用了伪元素,先上 Demo:

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

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

  1. 假设一个 HTML 标签定义为: <div data-msg="ABC">

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

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

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

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

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

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

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

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

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

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

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

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

再寻找原因,是出在最后一个元素上面,然后我找到了 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+ ,最重要的是代码不长,很好理解。

最后这种方法也是最近才学习到的,参考了这篇文章,非常值得一读:

本文主要就是多介绍了伪元素的两种实用方法,更多伪元素的妙用可以戳
CSS3奇思妙想,采用单标签完成各种图案 – Demo (请用 Chrome 浏览器打开,非常值得一看)。

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

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

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

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

【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果的更多相关文章

  1. 转载 【CSS进阶】伪元素的妙用--单标签之美

    1.单个颜色实现按钮 hover .active 的明暗变化 请点击 转载利用伪元素单个颜色实现 hover 和 active 时的明暗变化效果 2.利用after伪类清除浮动 .clearfix:a ...

  2. HTML和CSS设置动态导航以及CSS中伪元素的简单说明

    HTML页面代码: <!DOCTYPE html> <html> <head> <title>Test</title> <meta c ...

  3. CSS的伪元素(二)

    随便聊聊CSS的伪元素,虽然它们在项目开发中用的并不多,但确实很有用,在项目中不用它,是因为大家不能了解它们,下面是一个工作场景,如有四个按钮,分别是建立,编辑,删除和修改,而我们要求这在前台显示的汉 ...

  4. css的伪元素

    这里想将的是两个伪元素,一个是:first-line——用来向文本的首行添加特殊样式,并且不论该行出现多少单词:只能与块状元素关联. 如下属性可以应用于:first-line伪元素 font属性 co ...

  5. [CSS]利用伪元素实现一些特殊图形

    给定的html代码是: <div class='square'></div> 平常实现我们常是通过添加小的icon来实现,不仅需要添加图片资源,还需要改动html结构. CSS ...

  6. [CSS]利用伪元素实现一些特殊图形 from baidu校招

    最近在博客园看到某人发的baidu校招题目,说是要用一行html代码实现下面的这个图形: 给定的html代码是: <div class='square'></div> ---- ...

  7. 笑谈CSS的伪元素

    今晚上我们来简单的聊一聊CSS的伪元素,多说无益,开聊 GG: 话说盘古开天辟地之时. QQ:嗨,咱今天还能讲的完吗?您给来点实际的啊. GG:要听实际的是吧,得嘞,那今天咱就来聊一聊CSS里的伪元素 ...

  8. css的伪元素 ::after ::before 和 图标字体的使用

    浅谈css的伪元素::after和::before   css中的::after和::before已经被大量地使用在我们日常开发中了,使用他们可以使我们的文档结构更加简洁.但是很多人对::after和 ...

  9. HTML&CSS基础-伪元素选择器

    HTML&CSS基础-伪元素选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html> ...

随机推荐

  1. C# 注册 Windows 热键

    闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...

  2. DDD 领域驱动设计-看我如何应对业务需求变化,愚蠢的应对?

    写在前面 阅读目录: 具体业务场景 业务需求变化 "愚蠢"的应对 消息列表实现 消息详情页实现 消息发送.回复.销毁等实现 回到原点的一些思考 业务需求变化,领域模型变化了吗? 对 ...

  3. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  4. [APUE]系统数据文件与信息

    一.口令文件 UNIX口令文件包含下表中的各个字段,这些字段包含在 由于历史原因,口令文件是/bin/passwd,而且是一个文本文件,每一行都包括了上表中的七个字段,字段之间用":&quo ...

  5. Android消息传递之基于RxJava实现一个EventBus - RxBus

    前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...

  6. pt-mext

    pt-mext实现的功能比较简单,就是将mysqladmin输出的多次迭代的相同status变量值放到同一行输出. 参数很少,除了--help和--version外,只有一个--relative参数 ...

  7. 【深入Java虚拟机】之四:类加载机制

    类加载过程     类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 其中类加载的过程包括了加载.验 ...

  8. arcgis api for js入门开发系列七图层控制(含源代码)

    上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...

  9. MongoDB学习笔记二—Shell操作

    数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...

  10. windows 7(32/64位)GHO安装指南(U盘引导篇)~

    上一篇我们说了怎么制作U盘启动盘,那么这一篇让我们来看看如何进行正确的U盘引导启动. 现在的个人计算机一般分为台式机和笔记本,由于各厂商的喜好不同(开玩笑的啦),所以对于主板的BIOS设置各所不同.进 ...