CSS before和after伪元素

摘要:
让我们来谈谈两个常见的伪元素,前和后。如下所示:#example:after{position:aabsolute;display:block;left:20px;top:20px,content:“”;“”;width:20px;height:20px,background:#6F3;}由于伪元素可以定义位置等属性,因此before和after的约束是有限的。之前和之后的区别只能是,当没有伪元素位置和其他信息的特殊定义时,默认行为是不一致的。Before出现在相对绑定元素之前,after出现在相对约束元素之后。支持:before和:after伪元素的浏览器包括:Chrome 2+、Firefox 3.5+、Safari 1.3+、Opera 9.2+、IE8+,以及几乎所有的移动浏览器。阴影效果使用伪元素:before和:after。伪元素:before用于在按钮左侧添加数字“1”。

     CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,它们是以CSS选择器的形式出现的,具有标签的表现效果,但是呢又不是真正的标签元素,所以叫做“伪元素”。下面就说一下常见的两个伪元素before和after。

一、伪元素基本用法

     在CSS选择器中加上相应伪类选择符就可以了,像这样:#example: before或者#example: after,这里是使用ID选择器,比如下面的CSS代码:

#example:before {
  content: """;
}
#example:after {
  content: """;
}

它的效果就是为example标签前后加上双引号。

      和伪类的选择符很像,但是有一点小区别,就是伪类选择符实际上是用两个冒号,::before的形式,以和伪类区别开,但是只用一个冒号浏览器也是可以识别的,在CSS3中规定是一个冒号就可以了。

      如果没有绑定标签,像这样::before{ content:”=”;} 这样的伪元素是没有意义的,代码会在DOM里的每个元素的内容之前插入散列符号。即使你删除了<body>标签和它的所有内容,你仍会在页面上看见两个散列符号:一个在<html>里,另一个在<body>标签里。

      那么可不可以给伪元素再添加伪元素呢?比如下面这个代码:

#example:after:after{
    content: "after";
}

      在浏览器中刷新,测试一下会发现什么也没有显示,也就是说再给伪元素添加伪元素目前很多浏览器上是无效的,浏览器忽略掉该定义,只能识别一层伪元素,但是既然可以伪元素添加伪元素,可以期待再为伪元素添加伪元素,其表现力是很强的。

二、伪元素属性和样式

1.content属性

      每个伪元素必须要有content属性,否则的话浏览器不能识别,你可以为content属性添加空引用作为它的值(即:content:“”)。

      你也可以为content包含一个指向一个图像的URL,就像在css里包含一个背景图像一样:

p:before {

  content: url(image.jpg);
}

      也可以包含一个Data URI代替图像引用,就像使用css背景一样。

      你还可以选择ATRR(X)中的函数的形式。“把X属性的值以字符串的形式返回”,比如:

a:after {
  content: attr(href);
}

      attr()函数的功能是把得到特定属性的值并把它作为插入的文本成为一个伪元素。

      上面的代码会导致页面上的每一个<a>元素的href值立即被放置在每个各自的<a>元素的后面。在文档被打印时,它可以用作一个包含所有URl的打印样式表。

2.标签属性

      伪元素也是元素,所以你可以为它添加大部分其他元素具有的属性,比如定位属性,字体属性,背景属性和盒模型的属性等,另外由于伪元素默认是内联元素,所以如果要使得盒模型中的height等属性有效的话,必须要把它转化为块元素,具体就是设置其display属性为block,或者设置为float等。如下:

#example:after{
    position: absolute;
    display: block;
    left: 20px;
    top: 20px;
    content: """;
    width: 20px;
    height: 20px;
    background: #6F3;
}

      既然伪元素可以定义position等属性,那么before和after的约束就很有限了,before和after的区别只能是在没有特殊定义伪元素的位置等信息的时候的默认行为不一致,before出现在相对绑定的元素之前,而after出现在相对绑定的元素位置之后。

      另外既然可以为伪元素定义盒子模型的属性,就不得不说,伪元素默认为其目标元素的子元素,比如#example:after,伪元素after的父元素就是#example选择符对应的元素,它具有一般子元素盒模型的特性,即为他定义的height和width等属性规则为影响目标元素的规则。

三、伪元素的兼容性

基本可以放心的使用伪元素,因为它有很好的兼容性,可以不用加浏览器前缀而很好的使用它。

支持:before 和 :after 伪元素的浏览器有:

  • Chrome 2+,
  • Firefox 3.5+ (3.0 had partial support),
  • Safari 1.3+,
  • Opera 9.2+,
  • IE8+ (with some minor bugs),
  • 几乎所有的移动浏览器。

      但是IE6和IE7上并不支持,如果不是很在意他们的用户数量的话,基本可以很自由的使用啦。

四、伪元素的作用

     这里借用Thoriq Firdaus的几个例子简单说一下伪元素的用法。另外伪元素既然是伪元素,那么作为结构与表现分离的一种实现,其作用应该是对文本起到很好的修饰作用,而不是把它用来表现文本。

阴影效果

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

fascinating-shadows8

3D按钮

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

3d-button9

叠加图像效果

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

stacked-image10

免责声明:文章转载自《CSS before和after伪元素》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Corona SDK新手教程:tap、touch和multitouch的区别zynq_ps端点亮led灯代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

chrome livestyle插件

1.sublime 安装 >step1: ctrl+shift+p >step2:ip >step3:livestyle >step4:配置hostFQ下载chorm插件(见附录hosts文件) >step5:用chrome打开https://chrome.google.com/webstore/detail/emmet-l...

4、HTML和CSS进阶知识

HTML和CSS进阶知识 一、HTML中常用的块元素(block)和行内元素(inline)   常见的块元素(block):p、h1--h6、div、ul、ol、dl、hr   常见的行内元素(inline):b、i、em、strong、small、sub、sup、a、span、br、   在css中,可以通过display属性实现block元素和inl...

CSS3---渲染属性

1.计数器 CSS3计数器(CSS Counters)可以允许我们使用css对页面中的任意元素进行计数,实现类似于有序列表的功能。与有序列表相比,它的突出特性在于可以对任意元素计数,同时实现个性化计数。 1>语法counter-reset: [ <identifier> <integer>? ]+ | none | inhe...

1-4 Sass的基本特性-基础

[Sass]声明变量 定义变量的语法: 在有些编程语言中(如,JavaScript)声明变量都是使用关键词“var”开头,但是在 Sass 不使用这个关键词,而是使用大家都喜欢的美元符号“$”开头。我想用一张图来解释,我一直坚信,一图胜千言万语: 上图非常清楚告诉了大家,Sass 的变量包括三个部分: 声明变量的符号“$” 变量名称 赋予变量的值...

js css等静态文件版本控制,一处配置多处更新.net版【原创】

日常web开发中,我们修改了js、css等静态资源文件后,如果文件名不变的话,客户端浏览并不会及时获取最新的资源文件,这就很尴尬了 怎么办呢? 1.小白:让客户清除缓存?,No ,不靠谱 2.初级:把文件名改了?,可以,但我们产品样式一天更新8百次,怎么办?不方便 <link href="/css/old.css"rel="stylesheet"ty...

传统css布局方案(position,float,line-height等配合)

一、display display 是 css 布局中很重要的一个属性,它定义了元素生成的显示框类型,常见的几个属性值有:block、inline、inline-block、inherit、none、flex。inherit 表示这个元素从父元素继承 display 属性值;none 表示这个元素不显示,也不占用空间位置;flex 是 flex 布局重...