Kaskadowe Arkusze Atrybutów (CAS, Cascading Attribute Sheets) to - według autora propozycji (nie jest autorem samego pomysłu, a jedynie zebrał go w jedną, sensownie skonstruowaną propozycję i zgłosił ją do WebApps Working Group), którym jest Tab Atkins - sposób na łatwiejsze zarządzanie atrybutami w dokumencie HTML. Brzmi interesująco, zobaczmy więc na czym miałoby to polegać.

Powstałe z potrzeby

Atkins wiele razy miał do czynienia z sytuacjami, w których ktoś chciał dodać pewną funkcjonalność poprzez atrybuty elementu DOM, jednak decydował się na CSSowe właściwości, ponieważ było to o wiele wygodniejsze. Właśnie dlatego postanowił zaproponować rozwiązanie w postaci arkuszy atrybutów - dzięki temu mógłby użyć konstrukcji CSS do nadawania atrybutów elementom w strukturze dokumentu HTML.

Jak to ma działać

Propozycja CAS zakłada, że język będzie miał taką samą konstrukcję, jaką ma teraz CSS, więc nie będzie potrzeby uczenia się nowych rzeczy. Dołączenie pliku CAS będzie możliwe za pomocą <script type="text/cas"> - Tab specjalnie wybiera <script> zamiast <style>, ponieważ twierdzi, że CAS będzie wykonywany tylko raz, a także z definicji będzie asynchroniczny. Zobaczmy więc jego przykład demonstrujący możliwości arkuszy atrybutów w akcji:

video {
preload: metadata;
}
#content video {
preload: auto;
}

Powyższy przykład nadaje atrybut preload="metadata" wszystkim tagom video w dokumencie, natomiast atrybut preload="auto" nadawany jest wszystkim tagom video wewnątrz kontenera o ID równym content. Wygląda to całkiem sensownie.

Istnieją trzy specyficzne wartości, których można użyć w dokumencie CAS do ustawienia wartości dla atrybutu: pierwszy to !on, który ustawia wartość atrybutu na jego nazwę, a więc coś w stylu controls="controls". Drugim jest !off, który usuwa taki atrybut. Trzeci to !initial, który ustawia wartość domyślną nadpisując mniej specyficzne reguły.

W teorii pliki CAS są statyczne i nie reagują na zmiany w strukturze DOM, czym różnią się od plików CSS i znacznie ułatwiają zarządzanie samymi atrybutami. Działanie pliku z arkuszem atrybutów można sprowadzić do jednej linijki JavaScriptu:

document.querySelectorAll(<selektor>).forEach(<nadaj atrybuty>);

Czy to ma sens?

Czy trzeba tworzyć nowy język tylko po to, by używać oddzielnego dokumentu zamiast starych, dobrych setAttribute() i attr()? Większość osób komentujących tą propozycję twierdzi, że CAS nie jest potrzebny. Wszystko to da się bez problemu załatwić za pomocą języka JavaScript lub w pewien sposób także za pomocą CSSa. Po co komplikować sobie życie, skoro dostępne rozwiązania już istnieją? Propozycję można traktować bardziej jako ciekawostkę, niż coś niezbędnego.

Przydatność CAS może być wątpliwa, ale jedna rzecz warta jest podkreślenia i docenienia - to ciągłe dążenie do rozwoju, tworzenia narzędzi, które ułatwiają nam codzienną pracę. Jeśli znajdą się osoby, którym ta propozycja pomoże w codziennych czynnościach, to ja jestem za jej wprowadzeniem. Inni mogą ją po prostu zignorować i kodować według wypracowanych wcześniej metod.