2017-07-26 53 views
5

我与伪元素的风格演奏和跨困惑我伪元素的样式优先

考虑下面的CSS和HTML

HTML行为传来:

<p> 
     Note: As a rule, double colons (::) should be used instead of a single colon (:). This distinguishes pseudo-classes from pseudo-elements. However, since this distinction was not present in older versions of the W3C spec, most browsers support both syntaxes for the sake of compatibility. Note that ::selection must always start with double colons ::. 
    </p> 

和风格

p::first-letter { 
    font-size: 20px; 
    color: red; 
} 

p::first-line { 
    font-variant: small-caps; 
    color: green; 
} 

p::before { 
    content: 'Start'; 
    color: blue; 
} 

在Chrome中,行为如下:第一个字母:: before conten即使它不包含p和::之前的样式不会将颜色覆盖为蓝色,t也会显示为红色。 enter image description here

而且当存在::不信的内容之前,我把&或*有 - 所有一线变成绿色,并没有应用::第一个字母和::风格之前。

在Firefox中提供的代码的结果将是以下几点: enter image description here

我使用Ubuntu 17.04在最新版本的浏览器,为什么::由其他选择的内容之前

所以任何人都可以解释伪元素选择器和应用的样式,以及为什么own :: before样式不会覆盖它们,即使它们是“更新”的样式。

+0

的特异性,所有的选择是2,所以我想说的最后一个获胜。但它不 –

+0

不,我的第一个字母是红色的,而不是蓝色的 –

+0

啊道歉,误读你的帖子哈哈会删除我的意见:) – ThisGuyHasTwoThumbs

回答

3

至于第一行和第一个字母,这不是真正的特异性问题。它只是指定这样的:

与常规元素的含量, ::之前生成的内容:after伪元素可以包含在任何 ::一线和一线::字母伪元素应用于其原始元素。

source

+0

谢谢,这确实解释了为什么应用:: first-line和:: first-letter的样式。但为什么最后一个(这是::之前)不赢? –

+0

@OlenaHoral我不确定这件事。看起来你在设计伪元素时有很多不确定的(或者至少不清楚)行为,因为它们本身就是作为规则结果存在的。 –

+0

@OlenaHoral在任何情况下都不要接受我的回答,您的问题应该得到更好的回答。 –