Stosowanie kilku klas - czy naprawdę niezbędne?
06 lipca 2006
W CSS możliwe jest przyporządkowanie elementowi paru klas, rozdzielając ich nazwy spacjami. Wygląda przykładowo to tak:
<div class="body multicolumn decorated">...</div><span class="unimportant striked">Jakiś tekst</span>
Teraz dzięki tym paru deklaracjom możemy po pierwsze zadeklarować oddzielne style dla każdej z klas i łączyć w dowolne kombinacje. Po drugie możemy zadecydować, czy występowanie dwóch (albo i więcej) klas na raz ma włączać specjalne właściwości CSS, niedostępne pojedynczym odwołaniom.
W pierwszym przypadku moglibyśmy stworzyć fragment strony (dajmy na to) podzielony na kolumny i udekorowany (class="multicolumn decorated") obrazkiem oraz następny fragment z samym obazkiem i stylowaniem tekstu (class="body decorated").
Drugie zastosowanie jest możliwe przy pomocy selektora .klasa1.klasa2 (bez spacji pomiędzy).
Tyle tytułem wstępu dla mniej zaawansowanych w CSS-ie. Przechodzimy bowiem do pytania postawionego w tytule. Zastosowanie powyższej teorii w praktyce niewątpliwie mogłoby okazać się interesujące - gdyby było zawsze możliwe.
Praktyka jednak zazwyczaj nie ma litości dla niepełnego wsparcia CSS w przeglądarkach. IE/win do wersji 6 nie zrozumie odwołania do kilku klas jednocześnie - zastosuje jedynie ostatnią (dla .unimportant.striked tylko .striked). IE5/mac ma także problemy z wielokrotnymi klasami - spacje powodują błędne dopasowywanie selektorów klas o podobnych nazwach.
Argumentem przemawiającym za stosowaniem wielokrotnych klas jest zmniejszenie ilości CSS i zwiększenie jego czytelności. Zgodzę się z ostatnim - lecz pierwszy cel możemy także łatwo osiągnąć za pomocą grupowania nowych selektorów po przecinku. Stosowanie kilku klas może być rozsądne w niektórych zastosowaniach, jednak większość przykładów użycia jest bezmyślnym kopiowaniem pewnych wzorców programistycznych - a dla końcowego użytkownika starszych wersji przeglądarek (zwłaszcza Explorera na Maca) niepotrzebnym problemem.
Nie namawiam do porzucenia na dobre zaprezentowanych możliwości - chciałbym tylko, aby nie stosować rozbijania reguł stylów na klasy wszędzie gdzie się da. Oprócz tej techniki istnieje też wspomniane wyżej grupowanie selektorów, które zarówno nic nie znaczy dla użytkownika, jak i nie sprawia mu problemów.


