:after和:before用法

一、介绍:

层叠样式表(CSS)的主要目的是给HTML元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的。
事实上CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”。

伪类和伪元素:
w3c上对伪类和为元素的定义分别为:
伪类:伪类用于向某些选择器添加特殊的效果。
伪元素:伪元素用于将特殊的效果添加到某些选择器

css3为了区分伪类和伪元素,伪元素采用双冒号写法。
常见伪类——:hover,:link,:active,:target,:not(),:focus。
常见伪元素——::first-letter,::first-line,::before,::after,::selection。


 常见的伪类(pseudo-classes)和伪元素(pseudo-elements)


::before和::after下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容。
这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入。
所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容,例如图标

伪元素的兼容性
 Chrome 2+,
 Firefox 3.5+ (3.0 had partial support),
 Safari 1.3+,
 Opera 9.2+,
 IE8+ (with some minor bugs),

 几乎所有的移动浏览器。

二、:after和:before的基本用法

 :before 选择器在被选元素的内容前面插入内容。  
 :after  选择器在被选元素的内容后面插入内容。

例如:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>基本用法</title>
	</head>
	<body>
		<p>两个黄鹂鸣翠柳,一行白鹭上青天</p>
	</body>
</html>
此时浏览器效果如下:


当添加以下代码时:

			p:before{
				content: '作者:杜甫';
				color: red;
			}
			p:after{
				content: '出自《绝句》';
				color: red;
			}
此时页面显示如下:


审查元素会发现:


虽然页面添加了东西,但它并不会出现在dom中,只是起到修饰作用。

content属性

:before和:after必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空。默认情况下,伪类元素的display是默认值inline,可以通过设置display:block来改变其显示。
content可取以下值:

1.string

使用引号包一段字符串,将会向元素内容中添加字符串。如:a:after{content:""}

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>基本用法</title>
		<style type="text/css">
			p:before{
				content: '《';
				color: red;
			}
			p:after{
				content: '》';
				color: red;
			}
		</style>
	</head>
	<body>
		<p>两个黄鹂鸣翠柳,一行白鹭上青天</p>
	</body>
</html>

2.attr();

通过attr()调用当前元素的属性,比如将图片alt提示文字或者链接的href地址显示出来。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>基本用法</title>
		<style type="text/css">
			
			a:after{
				content: '('attr(href)')';
				color: red;
			}
		</style>
	</head>
	<body>
		<a href="http://blog.csdn.net/sinat_32546159">我的博客</a>
	</body>
</html>

3.url()/uri()

用于引用媒体文件。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>基本用法</title>
		<style type="text/css">
			a:before{
				content: '('url(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488386235452&di=c2737c00b34a5e64f804256fe1a00953&imgtype=0&src=http%3A%2F%2Ff.hiphotos.baidu.com%2Fbaike%2Fs%253D220%2Fsign%3D8306ef31fdfaaf5180e386bdbc5494ed%2F7e3e6709c93d70cf76daed1af8dcd100baa12b80.jpg)')';
			}
			a:after{
				content: '('attr(href)')';
				color: red;
			}
		</style>
	</head>
	<body>
		<a href="http://sports.qq.com/nba/?ptag=baidu.ald.sc.nba">NBA</a>
	</body>
</html>
页面如下:


4.counter()

调用计数器,可以不使用列表元素实现序号功能。

配合counter-increment和counter-reset属性使用:
h2:before { counter-increment: chapter; content: "Chapter " counter(chapter) ". " }

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>基本用法</title>
		<style>
			body {
				counter-reset: section;
			}
			
			h1 {
				counter-reset: subsection;
			}
			
			h1:before {
				counter-increment: section;
				content: counter(section) "、";
			}
			
			h2:before {
				counter-increment: subsection;
				content: counter(section) "." counter(subsection) "、";
			}
		</style>
	</head>
	<body>
		<h1>HTML tutorials</h1>
		<h2>HTML Tutorial</h2>
		<h2>XHTML Tutorial</h2>
		<h2>CSS Tutorial</h2>

		<h1>Scripting tutorials</h1>
		<h2>JavaScript</h2>
		<h2>VBScript</h2>

		<h1>XML tutorials</h1>
		<h2>XML</h2>
		<h2>XSL</h2>

	</body>

</html>
页面如下:


了解更多可参考:http://https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Counters

三、使用

1.清除浮动

清除浮动方法有多种,现在最常用的就是下面这种方法,仅需要以下样式即可在元素尾部自动清除浮动

                       .clearfix {
				zoom: 1;
			 }
			
			.clearfix:after {
				clear: both;
				content: '.';
				display: block;
				width: 0;
				height: 0;
				visibility: hidden;
			}

例如:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>after与before</title>
	<style type="text/css">
		*{margin:0;padding:0;}
		.clearfix{
			zoom:1;
		}
		.clearfix:after{
            content:'.';
            display: block;
            width: 0;
            height: 0;
            clear: both;
            visibility: hidden;
		}
		ul{
			background: blue;
		}
	    li{
	    	width: 100px;
	    	height: 100px;
	    	border:1px solid red;
	    	float: left;
	    }
	</style>
</head>
<body>
	<ul>
		<li>11</li>
		<li>22</li>
		<li>33</li>
	</ul>
</body>
</html>
此时页面如下:



因为对父元素ul设置背景色为蓝色但是父元素并未显示,因为li设置了float:left;导致父元素高度塌陷,此时要为父元素清除浮动,只需为ul加上class="clearfix"即可;此时效果图如下:


2.模拟float:center的效果

float没有center这个取值,但是可以通过伪类来模拟实现。
这个效果实现很有意思,左右通过::before float各自留出一半图片的位置,再把图片绝对定位上去。

#page-wrap { width: 60%; margin: 40px auto; position: relative; }
#logo { position: absolute; top: 0; left: 50%; margin-left: -125px; }
#l, #r { width: 49%; }
#l { float: left; }
#r { float: right; }
#l:before, #r:before { content: ""; width: 125px; height: 250px; }
#l:before { float: right; }
#r:before { float: left; }
效果如下:

出自: https://css-tricks.com/float-center/?spm=5176.100239.blogcont49793.6.D9PuiN

3.做出各种图形效果

做一个六角星:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>after与before</title>
	<style type="text/css">
		#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>
</head>
<body>
	<p id="star-six"></p>
</body>
</html>

如下:




查看更多小图标: 更多小图标制作

4.tooltip文字提示效果


<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>after与before</title>
	<style type="text/css">
	      a{
	      	position: relative;
	      }
          a:after{
          	content: '这是一个超链接';
          	position: absolute;
          	transition: all 0.4s ease;
          	width: 100%;
          	left: 0;
          	top: 0; 
          	font-size: 12px;
          	opacity: 0;
          }
	  a:hover:after{
		content: '这是一个超链接';
		display: block;
		color: red;
            	top: 20px;
            	opacity: 1;
          }
	</style>
</head>
<body>
	<a href="#">文字提示效果</a>
</body>
</html>

当鼠标悬停在文字上时,提示文字会缓缓滑出




详见:http://codepen.io/css-tricks/full/wFeaG

5. 炫酷导航效果

具体点击以下链接https://tympanus.net/Development/CreativeLinkEffects/

真的很不错,可以研究下

当然利用伪元素:before和:after还可以做很多东西,再次只总结这么多。






参考:http://www.cnblogs.com/cheerful-queen/p/4971484.html

参考:https://yq.aliyun.com/articles/49793


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值