2017-07-26 49 views
5

grałem z pseudo-elementy stylów i natknąłem się na zachowania, które mnie zastanawiałopseudoelementy style priorytet

Rozważmy następujący CSS i 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> 

i style

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

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

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

W Chrome zachowanie jest następujące: Pierwsza litera :: before conten t ma kolor czerwony, mimo że nie zawiera treści p i :: before style nie nadpisują koloru na niebieski. enter image description here

Również gdy nie ma literę :: przed zawartością i kładę & lub * istnieje - wszystko first-line staje się zielony i nie :: first-letter i :: przed stylów stosowane.

W Firefoksie wynikiem kodu przewidzianego byłby następujący: enter image description here

Używam najnowszych wersji przeglądarek pod Ubuntu 17.04

Więc może ktoś wyjaśnić dlaczego :: przed treścią jest wybrany przez inny selektory pseudoelementów i zastosowane style oraz dlaczego własność :: before styles nie nadpisuje ich, mimo że są one "późniejszymi" stylami.

+0

Swoistość dla wszystkich selektorów to 2. więc powiedziałbym ostatni wygrywa. Ale to nie –

+0

Nie, moja pierwsza litera jest czerwona, a nie niebieska –

+0

a przepraszam, błędnie przeczytałem twój wpis haha ​​usunie moje komentarze :) – ThisGuyHasTwoThumbs

Odpowiedz

3

Co do pierwszego wiersza i pierwszej litery, nie jest to tak naprawdę problem specyficzności. To jest po prostu określona następująco:

Jak z zawartością elementów stałych, wygenerowany zawartość :: before i: after pseudo-elementy mogą być zawarte w dowolnym :: first-line i :: studiów pierwszego pseudoelementy literowe zastosowane do elementu początkowego .

(source)

+0

Dzięki, to wyjaśnia, dlaczego stosowane są style :: first-line i :: first-letter. Ale dlaczego ten ostatni (który jest :: wcześniej) nie wygrywa? –

+0

@OlenaHoral Nie jestem pewien co do tego. Wygląda na to, że istnieje wiele nieokreślonych (lub przynajmniej niejasnych) zachowań podczas stylizowania pseudoelementów, ponieważ same istnieją jako wyniki reguł. –

+0

@OlenaHoral Nie akceptuj teraz mojej odpowiedzi, twoje pytanie zasługuje na lepszą odpowiedź. –