伪元素::before和::after的详细介绍
㈠什么是伪元素?
不同的解释:
⑴伪元素是创造关于文档语言能够指定的文档树之外的抽象。例如文档语言不能提供访问元素内容第一字或者第一行的机制。伪元素允许设计师引用它们,否则这是难以办到的。伪元素还提供样式设计师给在源文档中不存在的内容分配样式(例如::before和:after能够访问产生的内容)。
⑵CSS 在渲染文档的时候,伪元素可以通过 css 给 HTML 添加一个元素(叫标签也行),这个元素在文档树中是找不到的。伪元素被当做 CSS 的样式来进行展现,用法和普通的元素用法是一样的。
⑶伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过:before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。
⑷CSS伪元素是用来添加一些选择器的特殊效果。
㈡::before 和 ::after的定义
⑴::before 创建一个伪元素,作为已选中元素的第一个子元素,常通过 content 属性来为一个元素添加修饰性的内容。
⑵::after 创建一个伪元素,作为已选中元素的最后一个子元素,常通过 content 属性来为一个元素添加修饰性的内容。
㈢语法
/* CSS3 语法 */
element::before { 样式 } /* (单冒号)CSS2 */
element:before { 样式 }
㈣用法
⑴标准写法是双冒号(但考虑兼容性也有人写单冒号)
⑵::before
和::after
在被选中元素里面、元素现有内容之前(后)插入内容,需要使用content
属性指定要插入的内容。content
必须有值(空值也行)。
⑶content
插入的内容默认是 inline 元素,可以通过display:block
改变。
㈤content属性
⑴::before和::after必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空。默认情况下,伪类元素的display是默认值inline,可以通过设置display:block来改变其显示。
⑵content取值
①string
使用引号包一段字符串,将会向元素内容中添加字符串。如:a:after{content:""}
示例如下:引号括起来的一段字符串,显示到当前元素的前后:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style type="text/css">
p::before{
content: "《";
color: blue;
}
p::after{
content: "》";
color: blue;
}
</style>
</head> <body>
<p>javascript高级程序设计</p>
</body>
</html>
效果图:
②attr()
通过attr()调用当前元素的属性,比如将图片alt提示文字或者链接的href地址显示出来。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
a::after{
content: "(" attr(href) ")";
}
</style>
</head>
<body>
<a href="https://www.cnblogs.com/shihaiying/">博客地址</a>
</body>
</html>
效果图:
③url()/uri()
用于引用媒体文件。
举例:“百度”前面给出一张图片,后面给出href属性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
a::before{
content: url("https://www.baidu.com/img/baidu_jgylogo3.gif");
}
a::after{
content:"("attr(href)")";
}
a{
text-decoration: none;
}
</style>
</head>
<body>
<a href="http://www.baidu.com">百度</a>
</body>
</html>
效果图:
④counter()
调用计数器,可以不使用列表元素实现序号功能。
配合counter-increment和counter-reset属性使用
示例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body {
counter-reset: section;
}
h1 {
counter-reset: subsection;
}
h2 {
counter-reset: subsection;
}
h1:before {
counter-increment: section;
content: counter(section) "、";
}
h2:before {
counter-increment: subsection;
content: counter(section) "." counter(subsection) "、";
}
h3:before {
counter-increment: subsection;
content: counter(section) "." counter(section) "."counter(subsection) "、";
}
</style>
</head>
<body>
<h1>大标题</h1>
<h2> 二副</h2>
<h2> 二副</h2>
<h2> 二副</h2>
<h3>  三副</h3>
<h3>  三副</h3>
<h3>  三副</h3>
</body>
</html>
效果图:
⑶content运用
①清除浮动
清除浮动方法有多种,现在最常用的就是下面这种方法,仅需要以下样式即可在元素尾部自动清除浮动
代码如下:
.cf:before,
.cf:after {
content: " ";
display: table;
}
.cf:after {
clear: both;
}
.cf {
*zoom: 1;
}
②float:居中
我们知道float没有center这个取值,但是可以通过伪类来模拟实现。
这个效果实现很有意思,左右通过::before float各自留出一半图片的位置,再把图片绝对定位上去。
③做出各种图形效果
案例:六芒星
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
#star-six {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
position: relative;
}
#star-six::after{
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid red;
position: absolute;
content: "";
top: 30px;
left: -50px;
}
</style>
<body>
<div id="star-six"></div>
</body>
</html>
效果图:
★解释:star-six的div是一个正三角行,#star-six::after是一个倒三角形,通过绝对定位,调整其位置即可实现六角星的效果。
★扩展:CSS绘制图形:https://css-tricks.com/the-shapes-of-css/
④不使用图片创建小图标
举例:比如一个电话
很巧妙的应用一个div左border加圆角当机身,::before和::after配合圆角当听筒。
示例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style type="text/css">
#phone{
width:50px;
height:50px;
border-left:6px solid #EEB422;
border-radius:20%;
transform:rotate(-30deg);
-webkit-transform:rotate(-30deg);
margin:20px;
margin-right:0px;
position:relative;
display: inline-block;
top: -5px;
}
#phone:before{
width:15px;
height:15px;
background:#EEB422;
border-radius: 20%;
content: "";
position: absolute;
left:-2px;
top: 1px;
}
#phone:after{
width:15px;
height:15px;
background:#EEB422;
border-radius: 20%;
content: "";
position: absolute;
left:-3px;
top: 34px;
}
</style>
</head>
<body>
<div id="wraper">
<div id="phone"></div>
</div>
</body>
</html>
效果图:
扩展:用伪元素创建了84种小图标:http://nicolasgallagher.com/p...
⑤显示打印网页的URL
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
@media print {
a[href]:after { content: " (" attr(href) ") ";
}
}
</style>
</head>
<body>
<a href="http://www.baidu.com">百度</a>
</body>
</html>
效果图:
⑥给blockquote添加引号
经常用到给blockquote 引用段添加巨大的引号作为背景,可以用 ::before 来代替 background 。好处是即可以给背景留下空间,还可以直接使用文字而非图片:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style type="text/css"> blockquote::before {
content: open-quote;
color: #ddd;
z-index: -1;
font-size:80px;
}
</style>
</head>
<body>
<blockquote>引用一个段落,双引号用::before伪元素实现</blockquote>
</body>
</html>
效果图:
⑦超链接特效
举例:配合 CSS定位实现一个鼠标移上去,超链接出现方括号的效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style type="text/css">
body{ background-color: #425a6c;
} a {
position: relative;
display: inline-block;
outline: none;
color: #fff;
text-decoration: none;
font-size: 32px;
padding: 5px 20px;
}
a:hover::before, a:hover::after {
position: absolute;
}
a:hover::before {
content: "\5B";
left: -10px;
}
a:hover::after {
content: "\5D";
right: -10px;
}
</style>
</head>
<body>
<a href="http://www.baidu.com">鼠标移上去出现方括号</a>
</body>
</html>
效果图:
⑷content的值什么时候加引号,什么时候不加?
①动态的(会变的值)不加引号。
②媒体不加引号。
③固定的值、字符串需要加引号。
㈥:before详细解释
⑴如同对伪元素的名称一样,:before
是用来给指定的元素的内容前面插入新的内容
⑵示例:
.before:before{
content:'you before';
color:red;
} <div class="before"> me</div>
⑶在这里我们给伪元素 :before
添加了属性 content
,并赋值为 you before
。效果如下:
⑷//在指定元素的内容 me
前添加了新内容 you before
⑸这里通过伪元素 :before
添加的新内容区域默认的 display
属性值为 inline
,那么我们可不可以修改新内容区域的属性,答案是肯定的。
⑹你可以像修改其他元素一样修改它的样式,我们来将它的 display
属性值来改为 block
。
.before:before{
content:'you before';
display:block;
color:red;
} <div class="before"> me</div>
⑺现在我们再来看下效果:
⑻//由伪元素 :before
生成新内容区域果然变为了块元素
㈦具体示例
<html>
<head>
<meta charset="utf-8" /> <title>css伪元素:before和:after</title> <style type="text/css"> a.button {
background-color: #F0F0F0 ;
border: 1px solid #CCCCCC ;
border-radius: 4px 4px 4px 4px ;
color: #333333 ;
display: block ;
font-size: 30px ;
padding: 6px 30px 4px 58px ;
position: relative ;
text-decoration: none ;
width: 100px ;
} a.button:before {
background-color: #FF0066 ;
border-radius: 3px 3px 3px 3px ;
color: #FFFFFF ;
content: "NEW" ;
font-family: sans-serif ;
font-size: 15px ;
left: 9px ;
line-height: 15px ;
margin-top: -10px ;
padding: 3px 3px 2px 3px ;
position: absolute ;
text-align: center ;
top: 50% ;
} a.button:after {
background-color: #FFFFFF ;
border: 1px solid #DADADA ;
border-radius: 22px 22px 22px 22px ;
color: #333333 ;
content: "\00BB" ;
display: none ;
font-size: 30px ;
height: 28px ;
line-height: 26px ;
margin-top: -14px ;
position: absolute ;
right: 6px ;
text-align: center ;
text-indent: 1px ;
top: 50% ;
width: 28px ;
} a.button:hover:after {
display: block ;
} </style>
</head>
<body> <h1>
css伪元素:before和:after
</h1> <a href="#" class="button">
Button
</a> </body>
</html>
★代码介绍:
⑴根据html标记,只有一个带有文本“button”的按钮。但是,当呈现页面时,可以看到“new”标记:
⑵ 这个“new”标记是由:before伪元素提供的。但是,我们的css还有一个:after伪元素,初始显示为“none”;这个伪元素设置为仅显示在:hover:
参考:https://segmentfault.com/a/1190000000474414
https://segmentfault.com/a/1190000016236943#articleHeader5
https://www.bennadel.com/blog/2445-using-css-pseudo-elements-before-and-after.htm
伪元素::before和::after的详细介绍的更多相关文章
- css伪类选择器详细解析及案例使用-----伪元素
伪元素:(css3中将所有伪元素前变成了两个冒号,即::first-letter.::first-line.::before.::after.::selection.目的是为了区分伪元素与伪类.对于I ...
- 4-10 辅助方法controll_name,;SanitizeHelper; 伪元素和scss中的&, @Media; cache介绍。
回顾知识点 1. 在application.html.erb中: <main class="<%= controller.controller_name%>"&g ...
- 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”
011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...
- 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型
010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...
- 深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法
× 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息 ...
- css选择器(常规选择器,伪类选择器,伪元素选择器,根元素选择器)
前言 CSS的一个核心特性是能向文档中的一组元素类型应用某些规则,本文将详细介绍CSS选择器 选择器 [通配选择器] 星号*代表通配选择器,可以与任何元素匹配 *{color: red;} [元素选择 ...
- HTML5中<template>标签的详细介绍
HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...
- 理解:Before和:After伪元素
CSS样式表的主要作用是修饰Web页面上的HTML标记,但有时候,为了实现某个效果而往页面里反复添加某个HTML标记很繁琐,或者是显得多余,或者是由于某种原因而做不到.这就是CSS伪元素(Pseudo ...
- 爬虫实战:汽车之家配置页面 破解伪元素和混淆JS
本篇介绍如何破解汽车之家配置页面的伪元素和混淆的JS. ** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/9242156.ht ...
随机推荐
- # [洛谷1337] 吊打XXX/平衡点 (模拟退火)
[洛谷1337] 吊打XXX/平衡点 (模拟退火) 题意 n个重物(x,y,w),求平衡时x的位置(x,y) 分析 模拟退火基础题,基于随机数的优化算法,时间复杂度玄学,参数玄学,能不能AC看脸,当然 ...
- JavaWeb应用系统开发实训任务(一)
项目描述: 随着家长对孩子教育的日渐重视,社区幼儿学校在国内逐渐兴起,对社区幼儿学校的信息化管理成为迫切需求.社区幼儿学校管理系统需要实现以下功能: 1) 教师管理:实现对教师信息的查询.删除.增加 ...
- MVC4学习要点记一
强类型的辅助方法:这些helper的特征是名称后面加上了 For , 这些叫做强类型的辅助方法. 共用布局页:可以在Views文件夹下面新建一个视图页,命名为_ViewStart.cshtml,将这部 ...
- python中关于空的说法
0908自我总结 python中关于空的说法 python中表示空的数据 常量None 常量False 任何形式的数值类型零,如0,0L,0.0,0j 空的序列[],() 空的字典{} 用户自定义的n ...
- vue-cli3配置eslint
一.默认配置 以下是package.json文件中关于的eslint默认配置 "eslintConfig": { "root": true, "env ...
- c#传入类名添加类对应的表数据
添加方法: public int Insert<T>(T model) where T : class, new() { int sucess = 0; if (model is Temp ...
- JavaWeb【五、内置对象】
简介 Web容器创建的一组对象,不用new即可使用. 共有9种,out.request.response.session.application,五种比较常用,page.pageContent.exc ...
- php迭代器Iterator接口
以前也看过迭代器Iterator接口,感觉不如yied好用,因此实际工作中并没有用到过. 今天看了一篇网上的博客(https://www.cnblogs.com/wwjchina/p/7723499. ...
- deep_learning_Function_tf.argmax()解析
tf.argmax(input,axis)根据axis取值的不同返回每行或者每列最大值的索引. 这个很好理解,只是tf.argmax()的参数让人有些迷惑,比如,tf.argmax(array, 1) ...
- 2.java多线程_synchronized(Lock)同步
1.synchronized同步关键词 线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同 操作共享数据.因此为 ...