场景:

假如有一天,你的在写一个前端项目,是关于一份点餐商家电话信息表,你啪塔啪塔地写完了,突然间项目经理跑过来找你,要求你在每一个商家的电话号码前都添加一个电话符号,来使得电话号码更直观和页面更美观。这个时候你就纠结了,这不是折磨人吗?这不是要我在每个电话号码前都添加一个<img>标签?这要整到猴年马月?搞不好还会出现标签浮动的问题。

这个时候::after伪元素和::before伪元素就是救星了,在css中有这么两个伪类,允许通添加伪元素在html元素前/后添加内容。

这里我简单写了一个demo

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.phone-number{
font-size: 14px;
font-weight: 600;} .phone-number::before{
content: '\260E';
font-size: 22px;
color: red;
}
</style>
</head> <body>
<div class='phone-number'>&ensp;13300000000</div>
<div class='phone-number'>&ensp;13300000001</div>
<div class='phone-number'>&ensp;13300000002</div>
<div class='phone-number'>&ensp;13300000003</div>
<div class='phone-number'>&ensp;13300000004</div>
</body>
</html>

实现的效果如下

每一个号码都有一个class属性,我只需要对这个class属性写一次css渲染层和添增上

:: before伪元素就可以实现这个功能了。显然这比一个个添加<img>标签要轻松得多。

可能有人会问,这个的符号是怎么来的?html官方规定了一些特殊符号的unicode码,具体可以看http://www.cnblogs.com/starof/p/4718550.html

下面是:: before伪元素和:: after伪元素的具体用法和使用规则

(1)content:’()’

作用:在标签前/后添加字符串

使用规则:content后面一定要用‘’把要添加的内容括起来,否则是无法显示的(括号不一定需要添加)。

例如:

在<p>¥80元</p>之后添加如下css装饰代码:

p::after{
content:'门市价100元';
font-size: 14px;
text-decoration: line-through;
color: grey;
}

(2)content:url(‘图片地址’)

作用:在标签前/后添加图片(图片通过网络url实时加载)

使用规则:必须用url()引入需要添加的图片,道理跟background的设置一样。图片的地址也需要用‘’括起来。

例如:

在<div id='yidong-nub'>

<a href='http://www.10086.cn/images/index/logo.png'>&emsp;10086</a>

</div>

添加css装饰代码

a::before{
content:url('http://www.10086.cn/images/index/logo.png');
}

(3)清除浮动

::after{

content : ’’ ;

display:block;

}

用法是设置content的为空字符串

关于清除浮动的一些可用方法有很多种,我在这里就不展开来说了。

用人可能会说,用法(1)在p标签后面添加内容,直接在html代码里面的p标签后面再增加一个p标签不就行了吗?为什么还要用这种方法呢?

可以思考一下,通过在后面添加一个p标签,同时也需要用css代码去装饰这个新添加上去的标签。显然,代码量上,后者比前者多了,而且后者在html中新增了一个DOM节点,如果数量很多时,解析器在解析时难免会增加一定的时间。而前者没有这种问题,而且还能更好实现表现层和样式层的分离式开发。

最后值得知道的是,使用::before和::after伪元素这种添加内容的方式,只是在css渲染页面的时候添加上去的,在DOM节点上是查不到这些添加上去的内容的。所以,一般不要添加实际的内容。意味着除了文本内容和图片/icon之外的html标签是无法添加进去的。

::before和::after伪元素的妙用的更多相关文章

  1. 【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果

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

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

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

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

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  4. CSS :befor :after 伪元素的妙用

    本篇重点介绍CSS中的:befor.:after创建的伪元素几种使用场景,如填充文本.作为iconfont.进度线.时间线以及几何图形. 1. 介绍 1.1 说明 CSS中的:befor.:after ...

  5. 转载利用伪元素单个颜色实现 hover 和 active 时的明暗变化效果

    1.颜色小tip知识 在背景色上方叠加一个黑色半透明层 rgba(0,0,0,.2) 可以得到一个更暗的颜色 在背景色上方叠加一个白色半透明层 rgba(255,255,255,.2) 可以得到一个更 ...

  6. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

  7. css before,after伪元素妙用

    我们知道,css伪元素包括after,before,first-letter等,通过合理的利用伪元素,我们可以让我们的结构更简洁. 通常写法如p::after{content:' '},其中conte ...

  8. CSS伪元素before、after妙用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 伪元素 before 和 after 各种妙用

    大家可能对伪类和伪元素有点迷糊,在介绍具体用法之前,简单介绍下伪类和伪元素.伪类大家听的多了,伪元素可能听到的不是那么频繁,其实 CSS 对这两个是有区分的. 这里整理总结下: 有时你会发现伪类元素使 ...

随机推荐

  1. [git] 基本原理

    1. 基本原理 工作目录:本地项目所在目录    暂存区: 被 git 所管理的文件 本地仓库:本地的版本仓库,一般的提交操作会将变更信息先提交到本地仓库的版本库中 远程仓库:远程的版本仓库,将变更信 ...

  2. .NET手记-HttpClient解析GB2312乱码问题

    最近为App的服务器端卸了个爬虫程序,输出结果时发现出现乱码现象,尝试使用了几个方案发现效果并不太好,最后发现了一个很简单的用法. var result = await client.GetByteA ...

  3. python(leetcode)-136只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  4. Python:SQLMap源码精读—基于错误的盲注(error-based blind)

    目标网址 http://127.0.0.1/shentou/sqli-labs-master/Less-5/?id=1 Payload的生成 <test> <title>MyS ...

  5. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目

    容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再 ...

  6. 微信小程序bug记录与解决

    微信小程序bug记录 textarea textarea在模拟器上没有padding,可是在真机上会自带padding,而且在外部改不了,并且在安卓和IOS上padding还不一样 第一张图是在开发工 ...

  7. 5分钟开发一个简单的基于HTML5的移动应用

    首先写一个config.xml 代码如下: <?xml version="1.0" encoding="UTF-8"?> <widget xm ...

  8. FFmpeg内存IO模式(内存区作输入或输出)

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10318145.html 所谓内存IO,在FFmpeg中叫作"buffered ...

  9. MySQL中的事务及读写锁实现并发访问控制

    一.并发控制中锁的概念 锁是并发控制中最核心的概念之一,在MySQL中的锁分两大类,一种是读锁,一种是写锁,读锁也可以称为共享锁(shared lock),写锁也通常称为排它锁(exclusive l ...

  10. MyBatis从入门到放弃五:调用存储过程(SQLServer2012)

    前言 如果是相对于复杂的SQL逻辑我们肯定是基于存储过程开发,这篇学习下执行存储过程,调用存储过程如果参数较多我们可以创建parameterMap. 搭建开发环境 开发环境和上篇文章保持相同 创建存储 ...