伪元素和伪类详解

一、伪类

1.1 定义

css伪类:css伪类用于向某些选择器添加特殊效果。

伪类其实与普通的css类相类似,可以为已有的元素添加样式,但是他只有处于dom无法描述的状态下才能为文档树中的元素添加样式,所以将其称为伪类。(这种文档树无法描述的状态是什么呢?当一个元素在用户的不同行为下就变化成不同的状态这个行为的变化dom就无法描述,就要产生伪类,来为一些选择器添加特殊的效果)。

但是细分伪类的话,又分为动态伪类,UI元素状态伪类,CSS3的:nth选择器。

动态伪类
:link 未访问的链接
:visited 已访问的链接
:hover 鼠标移动到链接上
:active 选定的链接
:hover 用于当用户把鼠标移动到元素上面时的效果;
:focus 用于元素成为焦点
对于:hover在IE6下只有a元素支持,:active只有IE7-6不支持,:focus在IE6-7下不被

UI元素状态伪类
:enabled type="text可写状态
:disabled type="text不可状态
:checked type="radio"和"type="checkbox""有"checked"和"unchecked"两种状
IE6-8不支持":checked",":enabled",":disabled"这三种选择器。

CSS3的:nth选择器
:first-child 选择某个元素的第一个子元素;
:last-child 选择某个元素的最后一个子元素;
:nth-child() 选择某个元素的一个或多个特定的子元素;
:nth-last-child() 选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算;
:nth-of-type() 选择指定的元素;
:nth-last-of-type() 选择指定的元素,从元素的最后一个开始计算;
:first-of-type 选择一个上级元素下的第一个同类子元素;
:last-of-type 选择一个上级元素的最后一个同类子元素;
:only-child 选择的元素是它的父元素的唯一一个了元素;
:only-of-type 选择一个元素是它的上级元素的唯一一个相同类型的子元素;
:empty 选择的元素里面没有任何内容。

IE6-8和FF3-浏览器不支持":nth-child"选择器。

1.2全部的css伪类
CSS伪类.png
1.3 伪类的常见用法

1、a标签的伪类

a:link   /* 未访问的链接 */
a:visited  /* 已访问的链接 */
a:hover  /* 鼠标移动到链接上 */
a:active  /* 选定的链接 */

2、input获取焦点 :focus

<input class="ccc" type="text" value="test" />

.ccc:focus{background-color:yellow;}

3、hover鼠标滑过

p:hover {color: #FF00FF}

一、伪元素

1.1 定义

伪元素:伪元素用于创建一些不在文档树中的元素,并且为他添加样式,举个例子:使用伪元素‘::before’可以在一个元素前边增加一些文本,并且可以为这些文本添加一些样式,虽然用户可以看到这写文本,但是这些文本是不存在于文档树中的。

1.2 几种常见伪元素

1):frist-letter用于向文本中的第一个字母添加样式
2):first-line向文本的首行添加样式
3):before在元素之前添加内容
4):after在元素之后添加内容
5)::selection:匹配选中部分的内容。可用的CSS属性为background,color。

1.3 伪元素和伪类的对比

(1)伪类和伪元素的最大区别就在于有没有创建一个文档树以外的元素。伪元素创建了一个文档树以外的元素(虚拟容器)并为他添加样式,这个容器不包含任何DOM元素但是可以包含内容。换句话说伪类和伪元素的区别就是伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档树以外的元素。

(2)伪类使用的是单冒号,但是在css3中规定伪元素使用的双冒号,但是除了少部分的伪元素必须使用双冒号以外,像after还有before都是支持单引号的。为了兼容性所以目前还是在使用一些常见的伪元素的时候采用单冒号较为稳妥

1.4 伪元素的content属性

伪元素的content属性,不仅仅可以简单直接的设置一个字符串作为伪元素的内容,它还具备一定限度的编程能力,如下

div::after{
    content: "普通字符串";
    content: attr(父元素的html属性名称);
    content: url(图片、音频、视频等资源的url);
    /* 使用unicode字符集,采用4位16进制编码
     * 但不同的浏览器显示存在差异,而且移动端识别度更差
     */
    content: "\21e0";
    /* content的多个值可以任意组合,各部分通过空格分隔 */
    content: "'" attr(title) "'";
    
    /* 自增计数器,用于插入数字/字母/罗马数字编号
     * counter-reset: [<identifier> <integer>?]+,必选,用于标识自增计数器的作用范围,<identifier>为自定义名称,<integer>为起始编号默认为0。
     * counter-increment: [<identifier> <integer>?]+,用于标识计数器与实际关联的范围,<identifier>为counter-reset中的自定义名称,<integer>为步长默认为1。
     * <list-style-type>: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha
     */
    content: counter(<identifier>, <list-style-type>);
    
    /* 以父附属元素的qutoes值作为content的值
     */
    content: open-quote | close-quote | no-open-quote | no-close-quote;
}
/* Content接受6种类型,和一种组合方式 */

1.4 常见的伪元素的用法

1、清除浮动

.clear:after{
    display:block;
    content:""; 
    height:0;
    clear: both;
    overflow:hidden; 
    visibility:hidden;
}

2、切割线

<style>
        * {
          padding: 0;
          margin: 0;
        }
        .spliter::before, .spliter::after {
          content: '';
          display: inline-block;
          border-top: 1px solid black;
          width: 200px;
          margin: 5px;
        }
      </style>
      <p class="spliter">分割线</p>
切割线

3、对话框小箭头

    <style>
    .arrow-right{
        margin: 500px auto;
        width:300px;
        height:80px;
        background-color: pink;
        padding-left: 20px;
    }

    .arrow-right:before{
        background-color: pink;
        content: "";
        display: block;
        width: 0;
        height: 0;  
        border-top: 10px solid #fff;
        border-bottom: 10px solid #fff;
        border-left: 20px solid pink;
        position: relative;
        top:14px;
        left: 300px;
    }
      </style>
      <p class="arrow-right">一起开黑吧?</p>
消息框

4、水印

    <style>
        .article{
            position: relative;
            padding-bottom: 30px;
        }

        .article:after{
            position: absolute;
            content:'范小饭';
            display:block;
            width: inherit;
            font-size:16px;
            text-align: center;
            color:rgba(247, 47, 47, 0.5);
            opacity: 0.5;
            bottom: 0;
            right: 0;
        }
      </style>
      <p class="article">Hi,一起吃饭吧?</p>
水印
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 本文转载自:众成翻译译者:为之漫笔链接:http://www.zcfy.cc/article/239原文:http...
    极乐君阅读 7,339评论 1 62
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,409评论 1 45
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,136评论 0 1
  • 伪类: 伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的.比如说,当用户...
    葶寳寳阅读 909评论 1 13
  • CSS参考手册 一、初识CSS3 1.1 CSS是什么 CSS3在CSS2.1的基础上增加了很多强大的新功能。目前...
    没汁帅阅读 3,552评论 1 13