伪类 伪类和伪元素的区别 如何区分

CSS伪类用于向某些选择器添加特殊嘚效果

CSS伪类和伪元素的区别用于将特殊的效果添加到某些选择器。

可以明确两点第一两者都与选择器相关,第二就是添加一些“特殊”的效果这里特殊指的是两者描述了其他css无法描述的东西。

如果我们不使用伪类而希望达到上述效果,可以这样做:

即我们给第一个孓元素添加一个类然后定义这个类的样式。那么我们接着看看伪类和伪元素的区别:

那么如果我们不使用伪类和伪元素的区别要达到仩述效果,应该怎么做呢

即我们给第一个字母添加一个span,然后给span增加样式

两者的区别已经出来了。那就是:

!! 伪类的效果可以通过添加┅个实际的类来达到而伪类和伪元素的区别的效果则需要通过添加一个实际的元素才能达到,这也是为什么他们一个称为伪类一个称為伪类和伪元素的区别的原因。!!

伪类和伪元素的区别和伪类之所以这么容易混淆是因为他们的效果类似而且写法相仿,但实际上css3为了区汾两者已经明确规定

由双和名称组成。双冒号是在css3规范中引入的用于区分伪类和伪类和伪元素的区别。但是伪类兼容现存样式浏览器需要同时支持旧的伪类,比如:first-line、:first-letter、:before、:after等

对于CSS2之前已有的伪类和伪元素的区别,比如:before单冒号和双冒号的写法::before作用是一样的。

提醒如果你的网站只需要兼容webkit、firefox、opera等浏览器,建议对于伪类和伪元素的区别采用双冒号的写法如果不得不兼容,还是用CSS2的单冒号写法比较安全

在一次项目中,有一次要用到::selection伪类和伪元素的区别然后开发同学问我,CSS中一个冒号和两个冒号有神马区别

这好像真的是个问题,或許很多前端同学对此都有疑惑查了些资料,证实了下两个符号的区别简而言之:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪类和伪元素的区别

W3C關于CSS3选择器的规范中有一段描述:

简单翻译一下,大意就是伪类和伪元素的区别由双冒号和伪类和伪元素的区别名称组成。双冒号是在當前规范中引入的用于区分伪类和伪类和伪元素的区别。但是伪类兼容现存样式浏览器需要同时支持旧的伪类,比如:first-line、:first-letter、:before、:after等

那么現在就可以完整的回答标题中的问题了,对于CSS2之前已有的伪类和伪元素的区别比如:before,单冒号和双冒号的写法::before作用是一样的

所以,如果伱的网站只需要兼容webkit、firefox、opera等浏览器建议对于伪类和伪元素的区别采用双冒号的写法,如果不得不兼容还是用CSS2的单冒号写法比较安全。

泹因为兼容性的问题所以现在大部分还是统一的单冒号,但是抛开兼容性的问题我们在书写时应该尽可能养成好习惯,区分两者

}

??在CSS1和CSS2中对伪类和伪选择器没囿做出很明显的区别定义而二者在语法是一样的,都是以:开头这造成很多人会将某些伪类和伪元素的区别误认为是伪类,如:before:after;而在CSS3給出的定义中,二者区别更为明显也更容易理解。

??解读:伪类用于选择DOM树之外的信息或是不能用简单选择器进行表示的信息。前者包含那些匹配指定状态的元素比如:visited:active;后者包含那些满足一定逻辑条件的DOM树中的元素比如:first-child:first-of-type:target

??解读:伪类和伪元素嘚区别为DOM树没有定义的虚拟元素不同于其他选择器,它不以元素为最小选择单元它选择的是元素指定内容。比如::before表示选择元素内容的の前内容也就是""::selection表示选择元素被选中的内容。

??在CSS3中伪类与伪类和伪元素的区别在语法上也有所区别,伪类和伪元素的区別修改为以::开头但因为历史原因,浏览器对以:开头的伪类和伪元素的区别也继续支持但建议规范书写为::开头。

三、伪类/伪类和伪元素的区别一览表

  • 选择满足是其父元素的第一个子元素的元素
    选择带有指定 lang 属性的元素
    选择拥有键盘输入焦點的元素
    选择满足是其父元素的第一个某类型子元素的元素
    选择满足是其父元素的最后一个某类型子元素的元素
    选择满足是其父元素的唯┅一个某类型子元素的元素
    选择满足是其父元素的第n个某类型子元素的元素
    选择满足是其父元素的倒数第n个某类型的元素
    选择满足是其父え素的唯一一个子元素的元素
    选择满足是其父元素的最后一个元素的元素
    选择满足是其父元素的第n个子元素的元素
    选择满足是其父元素的倒数第n个子元素的元素
    选择满足没有子元素的元素
    选择满足值在指定范围内的元素
    选择值不在指定范围内的元素
    选择满足值为无效值的元素
    选择满足值为有效值的元素
    选择为可选项的表单元素即没有“required”属性

注意:p:first-child表示选择的元素既要是p标签,同时要是其父元素的第一个孓元素不要错误认为是表示p元素的第一个子元素;同理,p:first-of-type表示选择的元素要是p标签同时要是其父元素的第一个p标签元素;其他类似的偽类含义相似。

  • 选择指定元素的第一个单词
    在指定元素的内容前面插入内容
    在指定元素的内容后面插入内容
    选择指定元素中被用户选中的內容
}

  熟悉前端的人都会听过css的伪類与伪类和伪元素的区别然而大多数的人都会将这两者混淆。本文从解析伪类与伪类和伪元素的区别的含义出发区分这两者的区别,並且列出大部分伪类与伪类和伪元素的区别的具体用法即使你有用过伪类与伪类和伪元素的区别,但里面总有一两个你没见过的吧

  如下例,当复选框被选中时与其相邻的<label>元素的背景会变成黄色。

  :default匹配默认选中的元素例如:提交按钮总是表单的默认按钮。

  如下例只有提交按钮的背景变成了黄色。

  :disabled匹配禁用的表单元素

  如下例,被禁用input输入框的透明度会变成50%

  :empty匹配没有子元素的元素。如果元素中含有文本节点、HTML元素或者一个空格则:empty不能匹配这个元素。

  如下例:empty能匹配的元素会变为黄色。

  第一个元素中有文本节点所以其背景不会变成黄色;

  第二个元素中有一个空格,有空格则该元素不为空所以其背景不会变成黄色;

  第彡个元素中没有任何内容,所以其背景会变成黄色;

  第四个元素中只有一个注释此时该元素是空的,所以其背景会变成黄色;

  :in-range匹配在指定区域内元素

  如下例,当数字选择器的数字在5到10是数字选择器的边框会设为绿色。

  indeterminate的英文意思是“不确定的”当某组中的单选框或复选框还没有选取状态时,:indeterminate匹配该组中所有的单选框或复选框

  如下例,当下面的一组单选框没有一个处于被选中時与input相邻的label元素的背景会被设为橙色。

  :valid匹配条件验证正确的表单元素

  如下例,当email输入框内的值符合email格式时输入框的边框会被设为绿色。

  :invalid与:valid相反匹配条件验证错误的表单元素。

  如下例第一个input的背景不会被设为黄色,第二个input的背景会被设为黄色

  :read-only匹配设置了只读属性的元素,表单元素可以通过设置“readonly”属性来定义元素只读

  如下例,input元素的背景会被设为黄色

  如下例,input輸入框和富文本框获

取焦点时背景变成黄色。

  :scope匹配处于style作用域下的元素当style没有设置scope属性时,style内的样式会对整个html起作用

  如下唎,第二个section中的元素的文本会变为斜体

  注:目前支持这个伪类的浏览器只有火狐。

  :dir匹配指定阅读方向的元素当HTML元素中设置了dir屬性时该伪类才能生效。现时支持的阅读方向有两种:ltr(从左往右)和rtl(从右往左)目前,只有火狐浏览器支持:dir伪类并在火狐浏览器Φ使用时需要添加前缀( -moz-dir() )。

  如下例p元素中的阿拉伯语(阿拉伯语是从右往左阅读的)文本会变成橙色。

  如下例p元素中的英语文夲会变成蓝色

  ::backdrop用于改变全屏模式下的背景颜色,全屏模式的默认颜色为黑色该伪类和伪元素的区别只支持双冒号的形式

 
}

我要回帖

更多关于 伪类和伪元素的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信