Takie rzeczy jak a:link
lub div::after
...
Informacje na temat różnicy wydają się skąpe.
css
css-selectors
pseudo-class
pseudo-element
tybro0103
źródło
źródło
Odpowiedzi:
CSS 3 zalecenie selektor jest całkiem jasne, o obu, ale postaram się pokazać różnice i tak.
Pseudoklasy
Oficjalny opis
Źródło
Co to znaczy?
O tym, jak ważne są pseudoklasy, mówi się już w pierwszym zdaniu: „koncepcja pseudoklas [...] pozwala na selekcję ” . Umożliwia autorowi arkusza stylów rozróżnianie elementów na podstawie informacji, które „znajdują się poza drzewem dokumentu” , na przykład aktualny stan łącza (
:active
,:visited
). Nie są one zapisywane w żadnym miejscu w DOM i nie ma interfejsu DOM umożliwiającego dostęp do tych opcji.Z drugiej strony,
:target
można było uzyskać do niego dostęp poprzez manipulację DOM (możesz użyćwindow.location.hash
do znalezienia obiektu za pomocą JavaScript), ale to „nie można tego wyrazić za pomocą innych prostych selektorów” .Zasadniczo pseudoklasa udoskonali zbiór wybranych elementów, tak jak każdy inny prosty selektor w sekwencji prostych selektorów . Zwróć uwagę, że wszystkie proste selektory w sekwencji prostych selektorów zostaną ocenione w tym samym czasie. Aby uzyskać pełną listę pseudoklas, zapoznaj się z zaleceniami dotyczącymi selektora CSS3.
Przykład
Poniższy przykład pokoloruje wszystkie parzyste wiersze na szaro (
#ccc
), wszystkie nierówne wiersze, których nie można podzielić przez 5 białych i co drugi wiersz na purpurowy.table tr:nth-child(2n) td{ background-color: #ccc; } table tr:nth-child(2n+1) td{ background-color: #fff; } table tr:nth-child(2n+1):nth-child(5n) td{ background-color: #f0f; }
Pseudoelementy
Oficjalny opis
Źródło
Co to znaczy?
Najważniejsze tutaj jest to, że „pseudoelementy pozwalają autorom odwoływać się do […] niedostępnych w inny sposób informacji ” oraz że „mogą również zapewniać autorom możliwość odniesienia się do treści, których nie ma w dokumencie źródłowym (np.
::before
i::after
pseudoelementy dają dostęp do generowanych treści). ”. Największą różnicą jest to, że faktycznie tworzą nowy element wirtualny, do którego można zastosować reguły, a nawet selektory pseudoklas. Nie filtrują elementów, po prostu filtrują zawartość (::first-line
,::first-letter
) i umieszczają ją w wirtualnym kontenerze, który autor może dowolnie stylizować (no prawie).Na przykład
::first-line
pseudoelement nie może zostać zrekonstruowany za pomocą JavaScript, ponieważ w dużej mierze zależy to od aktualnie używanej czcionki, rozmiaru czcionki, szerokości elementów, elementów pływających (i prawdopodobnie pory dnia). Cóż, to nie do końca prawda: nadal można obliczyć wszystkie te wartości i wyodrębnić pierwszą linię, jednak jest to bardzo uciążliwe.Myślę, że największą różnicą jest to, że „na selektor może pojawić się tylko jeden pseudoelement” . W notatce jest napisane, że może to ulec zmianie, ale od 2012 r. Nie wierzę, że widzimy inne zachowanie w przyszłości ( nadal jest w CSS4 ).
Przykład
Poniższy przykład doda tag języka do każdego cytatu na danej stronie przy użyciu pseudoklasy
:lang
i pseudoelementu::after
:q:lang(de)::after{ content: " (German) "; } q:lang(en)::after{ content: " (English) "; } q:lang(fr)::after{ content: " (French) "; } q:not(:lang(fr)):not(:lang(de)):not(:lang(en))::after{ content: " (Unrecognized language) "; }
TL; DR
Pseudoklasy działają jako proste selektory w sekwencji selektorów i tym samym klasyfikują elementy według cech nie prezentacyjnych, pseudoelementy tworzą nowe elementy wirtualne.
Bibliografia
W3C
źródło
:not(.someclass):nth-child(even)
nie oznacza odfiltrowywania elementów, których nie ma.someclass
, a spośród pozostałych elementów odfiltrowywać parzyste wystąpienia. Zamiast tego reprezentuje dowolny element, który jest jednocześnie:not(.someclass)
i jednocześnie:nth-child(even)
jego rodzicem. Bardziej szczegółowe wyjaśnienia można znaleźć w tej i tej odpowiedzi .Pseudoklasa filtruje istniejące elementy.
a:link
oznacza wszystko,<a>
co jest:link
.Pseudoelement to nowy fałszywy element.
div::after
oznacza nieistniejące elementy po<div>
s.::selection
to kolejny przykład pseudoelementu.Nie oznacza to wszystkich wybranych elementów; oznacza zakres wybranych treści, który może obejmować fragmenty wielu elementów.
źródło
div::after
jest dzieckiemdiv
, występuje po jego treści, a nie po samym elemencie.Krótki opis, który pomógł mi zrozumieć różnicę:
źródło
Z dokumentów Sitepoint:
źródło
Poniżej znajduje się prosta odpowiedź:
Używamy pseudoklasy, gdy musimy zastosować css na podstawie stanu elementu. Jak na przykład:
:hover
):focus
). itp.Używamy pseudoelementu, gdy musimy zastosować css do określonych części elementów lub nowo wstawionej treści . Jak na przykład:
::first-letter
)::before
,::after
)Poniżej znajduje się przykład obu:
<html> <head> <style> p::first-letter { /* pseudo-element */ color: #ff0000; } a:hover { /* pseudo-class */ color: red; } </style> </head> <body> <a href="#" >This is a link</a> <p>This is a paragraph.</p> </body> </html>
źródło
Koncepcyjna odpowiedź:
Pseudoelement odnosi się do rzeczy, które są częścią dokumentu, ale jeszcze o tym nie wiesz. Na przykład pierwsza litera. Wcześniej miałeś tylko tekst. Masz teraz pierwszą literę, do której możesz skierować. To nowa koncepcja, ale zawsze była częścią dokumentu. Obejmuje to również takie rzeczy
::before
; chociaż nie ma tam rzeczywistej treści, pojęcie czegoś, zanim coś innego było zawsze obecne - teraz to określasz.Pseudoklasa to stan czegoś w DOM. Tak jak klasa jest znacznikiem, który kojarzysz z elementem, tak pseudoklasa jest klasą, która jest kojarzona przez przeglądarkę, DOM lub cokolwiek innego, zwykle w odpowiedzi na zmianę stanu. Kiedy użytkownik odwiedza łącze - łącze to może przyjąć stan „odwiedzone”. Możesz sobie wyobrazić, że przeglądarka stosuje klasę „odwiedzone” do elementu Anchor.
:visited
byłby wtedy, jak wybierzesz dla tej pseudoklasy.źródło
Pseudoklasa
Pseudoklasa to sposób wybierania pewnych części dokumentu HTML, oparty w zasadzie nie na samym drzewie dokumentu HTML i jego elementach lub cechach, takich jak nazwa, atrybuty lub zawartość, ale na innych warunkach fantomowych, takich jak kodowanie języka lub stan dynamiczny elementu.
Oryginalna pseudoklasa definiowała stany dynamiczne elementu, które są wprowadzane i wychodzące z upływem czasu lub w wyniku interwencji użytkownika. CSS2 rozszerzył tę koncepcję o wirtualne koncepcyjne komponenty dokumentu lub wywnioskowane części drzewa dokumentu, np. Pierwsze dziecko. Pseudoklasy działają tak, jakby klasy fantomowe zostały dodane do różnych elementów.
OGRANICZENIA: W przeciwieństwie do pseudoelementów, pseudoklasy mogą pojawiać się w dowolnym miejscu łańcucha selektorów.
Przykładowy kod pseudoklasy:
a:link /* This selects any "a" element whose target has not been visited.*/ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #99FF99; /* set to a pastel green */ border-top : 2px solid #ccffcc; /* highlight color */ border-left : 2px solid #ccffcc; /* highlight color */ border-bottom : 2px solid #003300; /* shadow color */ border-right : 2px solid #003300; /* shadow color */ } a:visited /* This selects any "a" element whose target has been visited.*/ { padding : 4px; text-decoration : none; color : #000000; /* black text color */ background-color : #ccccff; /* set to a lavender */ border-top : 2px solid #ffffff; /* highlight color */ border-left : 2px solid #ffffff; /* highlight color */ border-bottom : 2px solid #333366; /* shadow color * border-right : 2px solid #333366; /* shadow color */ } a:hover /* This selects any "a" element which is in a hover state. This is a state during pointer movement within the rendering region of an element. The user designates an element but does not activate it. */ { color : #000000; /* black text color */ background-color : #99cc99; /* desaturated color */ border-top : 2px solid #003300; /* shadow color */ border-left : 2px solid #003300; /* shadow color */ border-bottom : 2px solid #ccffcc; /* highlight color */ border-right : 2px solid #ccffcc; /* highlight color */ } a:focus /* This selects any "a" element which currently has focus. Focus is a state during which an element accepts keyboard input or other forms of text input. */ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #ffff99; /* set to a pastel yellow */ border-top : 2px solid #ffffcc; /* highlight color */ border-left : 2px solid #ffffcc; /* highlight color */ border-bottom : 2px solid #666633; /* shadow color */ border-right : 2px solid #666633; /* shadow color */ } a:active /* This selects any "a" element which is in a state of activation. Active is a state during pointer activation (eg: press and release of a mouse) within the rendering region of an element.*/ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #ff99ff; /* set to a pink */ border-top : 2px solid #ffccff; /* highlight color */ border-left : 2px solid #ffccff; /* highlight color */ border-bottom : 2px solid #663366; /* shadow color */ border-right : 2px solid #663366; /* shadow color */ }
Strona, która demonstruje renderowanie powyższego kodu pseudoklasy
Pseudoelementy
PSEUDO-ELEMENTY służą do adresowania pod-części elementów. Pozwalają ustawić styl części zawartości elementu poza tym, co jest określone w dokumentach. Innymi słowy, pozwalają na zdefiniowanie elementów logicznych, które w rzeczywistości nie znajdują się w drzewie elementów dokumentu. Elementy logiczne umożliwiają adresowanie implikowanej struktury semantycznej w selektorach CSS.
OGRANICZENIA: Pseudoelementy mogą być stosowane tylko do kontekstów zewnętrznych i kontekstów na poziomie dokumentu - nie do stylów wbudowanych. Pseudoelementy są ograniczone w miejscu, w którym mogą wystąpić w regule. Mogą pojawić się tylko na końcu łańcucha selektorów (po temacie selektora). Powinny występować po nazwach klas lub identyfikatorów znalezionych w selektorze. Na selektor można określić tylko jeden pseudoelement. Aby zaadresować wiele pseudoelementów w strukturze pojedynczego elementu, należy wykonać wiele instrukcji selektora / deklaracji stylu.
Pseudoelementy mogą być używane do typowych efektów typograficznych, takich jak inicjały i inicjały. Mogą również odnosić się do wygenerowanej treści, której nie ma w dokumencie źródłowym (z „przed” i „po”). Poniżej znajduje się przykładowy arkusz stylów niektórych pseudoelementów z dodanymi właściwościami i wartościami.
/ * Poniższa reguła wybiera pierwszą literę nagłówka 1 i ustawia czcionkę na 2em, kursywą, z zielonym tłem. Pierwsza litera wybiera pierwszą renderowaną literę / znak dla elementu na poziomie bloku. * /
h1:first-letter { font-size : 2em; font-family : "Lucida Handwriting", "Lucida Sans", "Lucida Console", cursive; background-color : #ccffcc; } /* The following rule selects the first displayed line in a paragraph and makes it bold. First-line selects the first rendered line on the output device of a block-level element. */ p:first-line { font-weight : bold; } /* The following rule selects any content placed before a blockquote and inserts the phrase "Quote of the day:" in bold small caps with a green background. */ blockquote:before { content : "Quote of the day:"; background-color : #ccffcc; font-weight : bold; font-variant : small-caps; } /* The following rule selects any content placed before a "q" element and inserts the smart open quote. */ q:before { content : open-quote; } /* The following rule selects any content placed after a "q" element and inserts the smart close quote. */ q:after{ content : close-quote; }
Źródła: Link
źródło
W skrócie, z pseudoklas na MDN:
A z pseudoelementów na MDN:
źródło