伪类和伪元素用起来非常的方便,在查阅资料及测试后整理下来。

一、伪类

  CSS 伪类用于向某些选择器添加特殊的效果。伪类对元素进行分类是基于特征(characteristics)而不是它们的名字、属性或者内容;原则上特征是不可以从文档树上推断得到的。

  伪类即 CSS 内植类,CSS 内部本身赋予它一些特性和功能,也就是不用再class=...或id=...就可以用伪类获取元素,当然也可以改变它的部分属性(如:                        a:link{color:#FF0000;})。

属性 描述 通俗说明 CSS
:active 向被激活的元素添加样式。 用鼠标点击时,元素增加特效,鼠标松开时,特效消失。多用在按钮的点击上。 1
:focus 向拥有键盘输入焦点的元素添加样式。 元素获得焦点时,元素增加特效,失去焦点时,特效消失。多用在让点击之后的元素一直拥有某些样式,active做不到,可以用在<input>标签上。 2
:hover 当鼠标悬浮在元素上方时,向元素添加样式。 当鼠标悬浮在元素上方时,增加特效,鼠标离开元素时,特效消失。常与cursor属性同时使用,当属性值为pointer时,光标位于元素上方时会变成手型。cursor还有url属性,其为设置图片地址。 1
:link 向未被访问的链接添加样式。 链接点击之前添加某些样式。 1
:visited 向已被访问的链接添加样式。 链接点击之后添加某些样式。 1
:first-child 向元素的第一个子元素添加样式。 对某元素的第一个子元素添加样式,常用在ol,ul下面的li,或者tr下面的td或th上等。 2
:lang 向带有指定 lang 属性的元素添加样式。   2

  测试Demo源码,如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<style type="text/css">
div{ line-height:30px; }
#divActive:active{ background-color:red; }
#divHover:hover{ background-color:red; cursor:pointer; }
#txtFocus:focus{ background-color:red; }
div ul li:first-child{ background-color:red; }
div a:link{ background-color:red; }
div a:visited{ background-color:blue; }
div a:visited{ background-color:blue; }
div input:lang(fr){ background-color:red; }
</style>
</head>
<body>
<div id="divActive">测试Active</div>
<div id="divHover">测试Hover</div>
<div id="divFocus"><input id="txtFocus" type="text"></div>
<div id="divFirst-child">
<ul>
<li>老大</li>
<li>老二</li>
<li>老三</li>
</ul>
</div>
<div><a href="#">超链接</a></div>
<div>
<input id="text" type="text" value="文本" lang="fr" />
</div>
</body>
</html>

二、伪元素

  

属性 描述 通俗说明 CSS
:first-letter 向文本的第一个字母添加特殊样式。   1
:first-line 向文本的首行添加特殊样式。   1
:before 在元素之前添加内容。 在元素文档流前添加内容。常用于隐形的提示信息内容。 2
:after 在元素之后添加内容。 在元素文档流后添加内容。常用于隐形的提示信息内容。 2

  注意:伪元素如果没有设置“content”属性,伪元素是无用的。如果不想设置内容,可以设置content属性为空引用 content:""。插入的内容在页面的源码里是不可见的,只能在css里可见。CSS继承规则适用于插入的元素,插入的内容将是有关联的目标元素的子元素,但它会被置于这个元素的任何内容的“前”或“后”。

  以:before为例测试Demo代码,如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<style type="text/css">
input{ display: block; }
body *:before{ content: "before"; color: red; }
</style>
</head>
<body>
<h1>HTML控件伪元素支持测试</h1>
<input id="button" type="button" value="普通按钮" />
<input id="reset" type="reset" value="重置" />
<input id="submit" type="submit" value="提交" />
<input id="text" type="text" value="文本" lang="fr" />
<input id="file" type="file" value="文件" />
<input id="password" type="password" />
<input id="checkbox" type="checkbox" />
<input id="radioY" type="radio" name="sel" value="Yes" />
<input id="radioN" type="radio" name="sel" value="No" />
<div><input id="cbN" type="radio" name="sel" /></div>
<input id="hid" type="hidden" />
<textarea id="txt" rows="2" cols="20"></textarea>
<table style="width:100%;"><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table>
<img id="img" src="" alt="图片" />
<select id="sel">
<option>请选择</option>
</select>
<hr />
<div id="div"></div>
</body>
</html>

  1、插入非文本内容

  我们可以把属性的值置为空字符串或是插入文本内容。还有如下几种非文本内容,如下:

  [1]、可以包含一个指向一个图像的URL,就像在css里包含一个背景图像一样做你能做的

p:before {
  content: url(image.jpg);
}

  注意:不能使用引号。如果将URL用引号括起来,那么它会变成一个字符串和插入文本“url(image.jpg)”作为其内容,插入的而不是图像本身。

  [2]、当然,你可以包含一个Data URI代替图像引用,正如你可以用css背景一样。

  [3]、可以选择ATRR(X)中的函数的形式。此功能,根据规范,“把X属性的值以字符串的形式返回”,如下:

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

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

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

  可以用这个函数去获取元素的title属性,或者甚至是microdata的值。当然,并不是所有的例子都符合自己的实际,但根据不同的情况,一个特定的属性值作为一个伪元素可以是实际的。然而,获取title或者图像的alt的值并作为实际的伪元素显示在页面上是不可能的。

  注意:

  伪元素必须是被应用元素的子元素。<img>,是void(或 空元素),没有子元素,所以它在此不可用,同样也适用于其他空元素,例如:<input>。

  2、可怕的浏览器兼容性

  任何前端技术的发展势头,第一个问题就是浏览器的支持。在这种情况之下,它不是个很大的问题。

  浏览器支持: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。

  3、伪元素不是决定性的

  大多数情况下,伪元素一般修饰(或者帮助)内容,不会给不支持的浏览器造成问题。所以,如果使用者具有较高的IE版本,仍然可以在某种程度上使用它们。

  4、提醒注意

  伪元素不会出现在DOM中。这些元素不是真正的元素。因此,它们不是可用的。所以,不要使用伪元素生成内容,是您的网页的可用性和可访问性的关键。

  另外,开发工具,例如火狐,不要用伪元素显示内容。所以,如果使用了,伪元素会造成难以维护和调试缓慢。可以使用谷歌的开发工具来查看一个伪元素相关联的风格,但不会出现在DOM元素里。同时,火狐在1.8版加入伪元素支持它。

CSS 之 伪类及伪元素的更多相关文章

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

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  2. CSS伪类和伪元素

    一.伪类 CSS伪类用于向某些选择器添加特殊的效果,在W3规范中,CSS伪类有如下几个: CSS2.1 :active:向被激活的元素添加样式(激活是指点击鼠标那一下) :focus:向拥有键盘输入焦 ...

  3. CSS 属性 - 伪类和伪元素的区别

    伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: ①写法不一样: ...

  4. 详解 CSS 属性 - 伪类和伪元素的区别[转]

    首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...

  5. CSS 属性 - 伪类和伪元素

    CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果.这里特殊指的是两者描述了其他 cs ...

  6. 关于css中伪类及伪元素的总结

    css中的伪类和伪元素总是混淆,今天参考了很多资料,也查看了部分文档,现将伪类及伪元素总结如下: 一.由来: 伪类和伪元素的引入都是因为在文档树里有些信息无法被充分描述,比如CSS没有"段落 ...

  7. CSS的伪类和伪元素

    伪类 W3C:"W3C" 列指示出该属性在哪个 CSS 版本中定义(CSS1 还是 CSS2). 属性 描述 CSS :active 向被激活的元素添加样式. 1 :focus 向 ...

  8. 详解 CSS 属性 - 伪类和伪元素的区别(再也不用概念盲了!!!)

    首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...

  9. 《转载》详解 CSS 属性 - 伪类和伪元素的区别

    首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...

  10. 【从0到1学Web前端】CSS伪类和伪元素

    1.CSS中的伪类 CSS 伪类用于向某些选择器加入特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 select ...

随机推荐

  1. OData查询ASP.NET Web API全攻略

    本篇使用ASP.NET Web API来体验OData各种query. 首先是本篇即将用到的Model.使用的OData版本是4.0. public class Customer { public i ...

  2. 使用newScheduledThreadPool来模拟心跳机制

    (使用newScheduledThreadPool来模拟心跳机制) 1 public class HeartBeat { 2 public static void main(String[] args ...

  3. Android Service总结03 之被启动的服务 -- Started Service

    Android Service总结03 之被启动的服务 -- Started Service 版本 版本说明 发布时间 发布人 V1.0 添加了Service的介绍和示例 2013-03-17 Sky ...

  4. 11i and R12 Table Count in Different Module

    Advertisement Module 11i Tables R12 Tables New Tables AR 551 616 118 BOM 264 337 73 GL 186 309 140 A ...

  5. 【IntelliJ IDEA】idea或者JetBrains公司所有编辑器,设置其软件的字体样式

    操作如下: 修改完成后的效果: 可以看到修改以后的ide的效果:

  6. OAuth:Access to shared resources via web applications

    A web application which wants to gain access to shared resources should redirect the user to a page ...

  7. ArcGIS教程:树状图

    摘要 构造可显示特征文件里连续合并类之间的属性距离的树示意图(树状图). 使用方法 · 输入特征文件必须採用预定的特征文件格式. 特征文件可使用 Iso 聚类或创建特征工具来创建.该文件必须至少包括两 ...

  8. sulime代理设置、插件管理

    使用command palette或者package control,可以管理插件:安装.更新.启动.关闭插件.卸载插件等 配置Package Control 配置举例: { "bootst ...

  9. nodejs中thiskeyword的问题

    再分析详细内容之前,必需要好好阅读下面下面两篇blog 学习Javascript闭包(closure) Javascript的this使用方法 这两篇文章是阮一峰老师对Javascript的闭包和th ...

  10. jvm垃圾回收原理(转)

    原文链接:jvm垃圾回收原理 在jvm中堆空间划分为三个代:年轻代(Young Generation).年老代(Old Generation)和永久代(Permanent Generation).年轻 ...