:not()
Pseudoklasa negacji :not() pozwala odnosić się do elementów, które nie pasują do selektora w nawiasie.
Przykładowo, jeśli chcesz nadać styl wszystkim elementom input, oprócz tych, które są guzikami „submit”, możesz skorzystać poniższego selektora.
| input:not([type="submit"]) { width: 200px; padding: 3px; border: 1px solid #000000; } |
Kolejny przykład: chcesz ustalić większą czcionkę wszystkim akapitom, oprócz tego, który wyświetla datę i czas? Nic prostszego:
| p:not(.date) { font-size: 13px; } |
Obsługa przez przeglądarki
Pseudoklasa :not() nie jest obsługiwana nawet przez IE8. Niestety, oznacza to, że minie prawdopodobnie jeszcze sporo czasu zanim zacznie się ona często pojawiać w naszych arkuszach CSS.
Pseudoelementy
Użycie pseudoelementów to sposób na odniesienie się do elementów, które tak naprawdę nie istnieją w kodzie HTML, takich jak pierwsza litera czy też pierwsza linia bloku tekstu.
Pseudoelementy występowały w CSS 2.1, ale specyfikacja trzeciego wydania określa, że powinny być zapisywane z podwójnym dwukropkiem, dla odróżnienia od pseudoklas. Te pseudoelementy, które występowały w CSS 2.1, były zapisywane przy użyciu pojedynczego dwukropka, przeglądarki powinny więc obsługiwać obydwa sposoby zapisu („:” oraz „::”). Natomiast nowe pseudoelementy, wprowadzone w CSS3, będą musiały być zapisywane tylko i wyłącznie z podwójnym dwukropkiem.
::first-line
Odnosi się do pierwszej linii bloku lub nagłówka/elementu tabeli.
Najczęściej jest stosowany, aby „upiększyć” blok tekstu, np. zmieniając pierwszą linię w kapitaliki.
| h1 + p::first-line { font-variant: small-caps; } |
Jeśli czytałeś dokładanie ten artykuł, wiesz z pewnością, że powyższy selektor odnosi się do pierwszej linii akapitu, który występuje zaraz za tagiem <h1>.
Krokiem dalej jest zmiana stylu konkretnego akapitu, w tym przypadku pierwszego dziecka DIV-a o klasie post.
| div.post > p:first-child::first-line { font-variant: small-caps; } |
::first-letter
Ten pseudoelement odnosi się do pierwszego znaku (litery) danego bloku tekstu. Podobnie jak ::first-line jest często stosowany, aby wyróżnić ten element tekstu. Jeśli zastosujesz oba pseudoelementy, zarówno ::first-letter, jak i ::first-line, właściwości tego pierwszego będą ważniejsze niż te, odziedziczone od ::first-line.
| p { font-size: 12px; } p::first-letter { font-size: 24px; float: left; } |
Ten selektor ma najdłuższą specyfikację, spośród wszystkich w CSS. Warto przeczytać ją przed zastosowaniem tego pseudoelementu (to odnosi się także do każdego innego, który stosujesz).
::before and ::after
::before oraz ::after są stosowane, aby dodać treści do dokumentu poprzez CSS. Treść wstawiona odziedziczy większość właściwości elementu, do którego jest wstawiana.
Teraz wyobraź sobie, że do opisu każdego z wykresów na Twojej stronie chcesz dodać tekst „Wykres numer X”. Możesz osiągnąć to bez konieczności stosowania języków skryptowych, a nawet bez ingerencji w HTML.
| .post { counter-reset: image; } p.description::before { content: "Wykres numer " counter(image) ": "; counter-increment: image; } |
Ale o co chodzi? Najpierw tworzymy licznik o nazwie image. Następnie, przed każdym akapitem o klasie description wstawiamy, korzystając z pseudoelementu ::before treść „Wykres numer” oraz obecną wartość licznika. Dodatkowo, po każdym użyciu należy wartość licznika inkrementować (counter-increment: image;).
:before oraz ::after są najczęściej stosowane z właściwością content, aby dodać krótkie zdania lub elementy do określonych miejsc na stronie. W powyższym przykładzie pokazałem, jak można je wykorzystać w poważniejszych zadaniach.
Obsługa przez przeglądarki
Pseudoelementy są obsługiwane przez IE8, pod warunkiem zapisu z jednym dwukropkiem. Wszystkie inne przeglądarki również obsługują te selektory.
Podsumowanie
Jeśli przebrnąłeś przez gąszcz pseudoklas, pseudoelementów i innych dziwnych selektorów, nadszedł czas abyś wypróbował je w praktyce. W razie problemów, czytaj specyfikacje W3C i pytaj na naszym forum.
A jeśli masz ochotę na eksperymenty, do swojego następnego projektu, zamiast stosować klasy i identyfikatory, przemyć kilka spośród opisanych selektorów CSS. Obiecuję, już nigdy nie będziesz chciał komplikować swojego kodu tymi niepotrzebnymi klasami i ID.
Przydatne linki
• Keeping Your Elements’ Kids in Line with Offspring — A List Apart
• Selectutorial - CSS selectors
• A Look at Some of the New Selectors Introduced in CSS3
• Selektory CSS 2.1, część pierwsza i druga
• CSS 3 selectors explained
• CSS selectors and pseudo selectors browser compatibility
• 10 Useful CSS Properties Not Supported By Internet Explorer
• Styling a Poem with Advanced CSS Selectors
Ładowanie





Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
dAREuS
Browser: Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.2.15 Version/10.00
Browser: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1) Gecko/20090805 Firefox/3.5.2
Pozdrawiam
Browser: Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.2.15 Version/10.00
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 FirePHP/0.3
dobra robota!
Browser: Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.2.15 Version/10.00
Oczywiście, jak zwykle wszystkie nowoczesne przeglądarki oprócz IE obsługują powyższe pseudoklasy."
Browser: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.2) Gecko/20090820 Iceweasel/3.5.3 (Debian-3.5.3-1)
Odnośnie specyficzności. Klasy i pseudoklasy mają tą samą hierarchię. Tak twierdzą inne źródła i firebug.
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.2 Safari/533.2