理解伪元素 :before 和 :after

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

你一定听说过这个词,尤其是当你一直关注着我们的教程。点此浏览原作者的其他文章

事实上,的确有一些CSS家族的成员(CSS选择器)被分类为伪元素比如::first-line, :first-letter,
::selection, :before and :after。但是,就本文而言,我们将把我们探讨的范围限制在:before 和
:after这两个元素上。因此,本文中的“伪元素”将特指这两个伪元素(:before 和
:after),我们将从基础入手,来研究这个独特的主题。

关于语法和浏览器支持

伪元素实际上在CSS1中就存在了,但是我们现在所讨论的:before和:after则发布于CSS2.1中。在最初,伪元素的语法是使用“:”(一个冒号),随着web的发展,在CSS3中修订后的伪元素使用“::”(两个冒号),也就是::before
和 ::after—以区分伪元素和伪类(比如:hover,:active等)

然而,无论你使用单冒号还是双冒号,浏览器都将能识别它们。由于IE8只支持单冒号的格式,安全起见如果你想要更广泛的浏览器兼容性那么还是使用单冒号的格式吧!

它是做什么的

简而言之,伪元素将会在内容元素的前后插入额外的元素,因此当我们添加它们时,使用以下的标记方式,他们在技术上是平等的。


  1. <p> 
  2.  
  3. <span>:before</span> 
  4.  
  5. This the main content. 
  6.  
  7. <span>:after</span> 
  8.  
  9. </p>  

但是这些元素实际上并不在文档中生成。它们将在外部可见,但是你将不会在文档的源代码中找到它们,因此,实际上它们是“虚假”的元素。

使用伪元素

使用伪元素是相对容易的,:before将会在内容之前“添加”一个元素而:after将会在内容后“添加”一个元素。在它们之中添加内容我们可以使用content属性。

举例来说,下面的代码片段将在引用的之前和之后分别添加添加一个引号。


  1. blockquote:before { 
  2.  
  3.   content: open-quote; 
  4.  
  5.  
  6. blockquote:after { 
  7.  
  8.   content: close-quote; 
  9.  
  10. }  

伪元素样式

尽管作为“虚假”的元素,事实上伪元素表现上就像是“真正”的元素,我们能够给它们添加任何样式,比如改变它们的颜色、添加背景色、调整字体大小、调整它们中的文本等等。


  1. blockquote:before { 
  2.  
  3. content: open-quote; 
  4.  
  5. font-size: 24pt; 
  6.  
  7. text-align: center; 
  8.  
  9. line-height: 42px; 
  10.  
  11. color: #fff; 
  12.  
  13. background: #ddd; 
  14.  
  15. float: left; 
  16.  
  17. position: relative; 
  18.  
  19. top: 30px; 
  20.  
  21.   
  22.  
  23.  
  24. blockquote:after { 
  25.  
  26. content: close-quote; 
  27.  
  28. font-size: 24pt; 
  29.  
  30. text-align: center; 
  31.  
  32. line-height: 42px; 
  33.  
  34. color: #fff; 
  35.  
  36. background: #ddd; 
  37.  
  38. float: right; 
  39.  
  40. position: relative; 
  41.  
  42. bottom: 40px; 
  43.  
  44. }  

指定伪元素尺寸

由于已经设置float,所以无需设置display:black。


  1. blockquote:before { 
  2.  
  3. content: open-quote; 
  4.  
  5. font-size: 24pt; 
  6.  
  7. text-align: center; 
  8.  
  9. line-height: 42px; 
  10.  
  11. color: #fff; 
  12.  
  13. background: #ddd; 
  14.  
  15. float: left; 
  16.  
  17. position: relative; 
  18.  
  19. top: 30px; 
  20.  
  21. border-radius: 25px; 
  22.  
  23. height: 25px; 
  24.  
  25. width: 25px; 
  26.  
  27.  
  28. blockquote:after { 
  29.  
  30. content: close-quote; 
  31.  
  32. font-size: 24pt; 
  33.  
  34. text-align: center; 
  35.  
  36. line-height: 42px; 
  37.  
  38. color: #fff; 
  39.  
  40. background: #ddd; 
  41.  
  42. float: right; 
  43.  
  44. position: relative; 
  45.  
  46. bottom: 40px; 
  47.  
  48. border-radius: 25px; 
  49.  
  50. height: 25px; 
  51.  
  52. width: 25px; 
  53.  
  54. }  

关联背景图像

我们也可以替换用图片替换内容而不是只有纯文本。尽管content属性提供了 url()来插入图片, 但是在更多的实例中,我更倾向于使用背景(background)属性从而更好的控制图片。


  1. blockquote:before { 
  2.  
  3. content: " "; 
  4.  
  5. font-size: 24pt; 
  6.  
  7. text-align: center; 
  8.  
  9. line-height: 42px; 
  10.  
  11. color: #fff; 
  12.  
  13. float: left; 
  14.  
  15. position: relative; 
  16.  
  17. top: 30px; 
  18.  
  19. border-radius: 25px; 
  20.  
  21.   
  22.  
  23. background: url(images/quotationmark.png) -3px -3px #ddd; 
  24.  
  25.   
  26.  
  27. display: block; 
  28.  
  29. height: 25px; 
  30.  
  31. width: 25px; 
  32.  
  33.  
  34. blockquote:after { 
  35.  
  36. content: " "; 
  37.  
  38. font-size: 24pt; 
  39.  
  40. text-align: center; 
  41.  
  42. line-height: 42px; 
  43.  
  44. color: #fff; 
  45.  
  46. float: right; 
  47.  
  48. position: relative; 
  49.  
  50. bottom: 40px; 
  51.  
  52. border-radius: 25px; 
  53.  
  54.   
  55.  
  56. background: url(images/quotationmark.png) -1px -32px #ddd; 
  57.  
  58.   
  59.  
  60. display: block; 
  61.  
  62. height: 25px; 
  63.  
  64. width: 25px; 
  65.  
  66. }  

然而,正如你能够从上面的代码片段中看到的,我们仍旧声明了content属性,而且此时使用了空字符串。content属性是必须的而且应该经常被应用。否则,伪元素无论如何都无法正常工作。

结合伪类

尽管有不同类型的伪X(伪元素、伪类),我们可以使用伪类连同伪元素一起放入一个CSS规则中,例如,如果我们希望当我们的鼠标移到blockqoute上时,引号的背景色能够略微变深。


  1. blockquote:hover:after, blockquote:hover:before { 
  2.  
  3. background-color: #555; 
  4.  
  5. }  

添加过渡效果

我们甚至可以在伪元素上应用transition属性来创建优美的颜色过渡效果。


  1. transition: all 350ms; 
  2.  
  3. -o-transition: all 350ms; 
  4.  
  5. -moz-transition: all 350ms; 
  6.  
  7. -webkit-transition: all 350ms;  

更多的灵感

为了激发你的灵感,我们已经选择了三个很酷的例子,可以在web设计上给你很多主意。

迷人的阴影(http://www.paulund.co.uk/creating-different-css3-box-shadows-effects)

在这个教程中 Paul Underwood 解释了如何创建更加逼真和吸引人的阴影效果。

使用 伪元素:before 和 :after 。它们两个都是绝对定位,而且使用负z-index来放置到图片后方实现阴影效果。

3D按钮

这是一个非常聪明的实现,利用伪元素结合CSS3 box-shadow 来绘制一个令人吃惊的3D按钮,仅仅使用了CSS和单一的锚文本。伪元素:before 被用来在按钮的左侧添加数字“1”。

叠加图像效果

使用伪元素来仅仅依靠一个图片标签创建一个“凌乱的”叠加图像效果也是可能的。伪元素用于建立一个图片叠加的错觉,通过使用z-index负值使“叠加”的图片在真正的图片后面来实现。

结论

伪元素很酷同时也是可应用到实际工作中的,基本上,每一个我们所添加的元素都不会干扰现有的HTML结构,而且伪元素可以做到 几乎所有我们能想到的事情。

实际上有一些伪元素的改进工作,目前逐步进行,比如伪元素嵌套div::before::before { content: ”;
}以及多重伪元素div::before(3) { content: ”;
}。很显然,在未来的web设计中,这些改进会让我们的设计有更多的形式(更多的可能性)。然而,他们将会在最新的浏览器中得到支持,让我们现在耐心的等待吧!

作者:佚名

来源:51CTO

时间: 2025-01-05 07:59:20

理解伪元素 :before 和 :after的相关文章

css的伪类和伪元素理解

伪类和伪元素的理解 官方解释 伪类一开始单单只是用来表示一些元素的动态状态,典型的就是链接的各个状态(LVHA).随后CSS2标准扩展了其概念范围,使其成为了所有逻辑上存在但在文档树中却无须标识的"幽灵"分类. 伪元素则代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中. 我自己的理解: 伪类,类,class是一个类,就类似class这样,表示一些元素的状态的,但是无须标识的分类. 伪元素,就是一个元素,类似p标签元素,等等,逻辑上存在,但是实际并不存在在文

CSS教程:用伪元素控制网页表单样式

文章简介:然而,所有这些伪元素都是依赖于特定浏览器引擎的(所以要带有浏览器引擎前缀),这样方便区分特定的浏览器引擎.以下是我自己搜集整理的,在Trident, Gecko, 和 WebKit浏览器引擎下面都可用的伪元素列表.在我写这篇文章的同时,发布了一些webkit的伪元素,所以现在 当开发web应用程序时,表单样式是个头疼的问题.以前,web开发人员不得不接受一个现实,就是由客户端浏览器控制表单样式.然而,作者通过伪元素给web渲染引擎添加钩子,就可以控制表单的显示. 然而,所有这些伪元素都

学习CSS之伪类和伪元素

css 在CSS中,模式(pattern)匹配规则决定那种样式规则应用于文档树(document tree)的哪个元素.这些模式叫着选择符(selector). 一条CSS规则(rule)是选择符{属性:值;属性:值;}(selector {property:value;property1:value2;}),即选择符决定了{}中的声明(declaration)匹配哪个元素. 在CSS2.1中的选择符有: Pattern Meaning Described in section * Matche

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试:   :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上.  写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hove

CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow<length>①: 第1个长度值用来设置对象的阴影水平偏移值.可以为负值 <length>②: 第2个长度值用来设置对象的阴影垂直偏移值.可以为负值 <length>③: 如果提供了第3个长度值则用来设置对象的阴影模糊值.不允许负值 <color>: 设置对象的阴

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

最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值得一看).采用单标签完成各种图案,许多图案与本文有关. 也希望觉得不错的同学顺手在我的 Github 点个 star : CSS3奇思妙想 .   正文从这里开始,本文主要讲述一下 伪元素 before 和 after 各种妙用.    :before和::before的区别 在介绍具体用法之前,简单介绍下伪

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

最近无论是工作还是自我学习提升都很忙,面对长篇大论的博文总是心有余而力不足,但又不断的接触学习到零碎的但是很有意义的知识点,很想分享给大家,所以本篇可能会很短. 本篇接我另一篇讲述 CSS 伪元素的文章: [CSS进阶]伪元素的妙用–单标签之美,看完本文觉得有意思的可以再去看看上一篇,分享了一些伪元素的妙用. 正文从这里开始:   哪些标签不支持伪元素? 我也是才知道这个姿势.为了不误导读者,就赶紧补充一下. 伪元素虽然强大,但是还是有一些特定的标签是不支持伪元素 before 和 after

::before和::after伪元素的用法

一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类--:hover,:link,:active,:target,:not(),:focus. 常见伪元素--::first-letter,::first-line,::before,::after,::selection. ::before和::after下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容. 这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入. 所以不要用:

CSS之before, after伪元素特性表现两则

一.特性表现one: 不能左右:empty伪类 CSS3选择器中有个:empty伪类,表示当元素里面什么都没有的时候(包括空格.标签内换行),应用相关样式.在现代web网页开发制作中,非常常用也非常方便. 例如,某元素类名是.box, 如下HTML和CSS: <div class="box"></div> .box { background-color: #cd0000; } .box:empty { background-color: #fae6e6; } 因