Arve Bersvendsen - Kto stworzył CSS?

Pytanie "Kto stworzył CSS?" nasunęło mi się w moich sieciowych poszukiwaniach. Bardzo krótka i prosta odpowiedź brzmi: Håkon Wium Lie i Bert Bos, autorzy pierwotnej specyfikacji CSS1.

Ta historia jest jednak dłuższa, Bert i Håkon nie wyciągneli specyfikacji z kapelusza - przedstawię więc mały zbiór historii CSS sprzed CSS1.

Tim Berners-Lee

Według rozdziału 20 książki Håkona Wium Lie i Berta Bosa Kaskadowe Arkusze Stylów, projektowanie dla sieci, pierwotna przeglądarka NeXT Tima Bernersa-Lee miała już prosty język arkuszy stylów. Ów język arkuszy stylów był czymś, co dzisiaj nazwalibyśmy stylem aplikacji użytkownika, dlatego też Tim nigdy nie opublikował jego składni: czuł, że to, jak strona będzie wyświetlana, powinno zależeć od autora Aplikacji Użytkownika (czytaj: przeglądarki).

WWW-Talk

Około roku 1993, na grupie dyskusyjnej WWW-Talk zaczęły pojawiać się listy (w archiwach tej grupy, na portalu W3C brakuje listów z lat 1993 i 1994) z różnymi propozycjami języka arkuszy stylów.

Robert Raisch

10 czerwca 1993 roku Robert Raisch z wydawnictwa O'Reilly wysłał na listę propozycję zatytułowaną Arkusze Stylów dla HTML.

Propozycja Roberta nie zawierała w ogóle pojęcia kaskady, lecz raczej koncentrowała się wokół możliwości stylowania poszczególnych elementów. Składnia Roberta wyglądała mniej więcej tak:

@H1 fo(fa=he,si=32,we=bo) ve(be=1,af=2)

Co przetłumaczone na współczesny CSS, dałoby:

h1 {
font-family: sans-serif;
font-size: 32pt;
font-weight: 900;
padding-top: 1em;
padding-bottom: 2em;
}

Powód dla którego rozmiar czcionki wartością liczbową jest taki, że w propozycji Roberta użyto pięciu różnych rozmiarów czcionek: ultralight, light, medium, demibold, bold.

Propozycja Roberta zwierała też mechanizm osadzania arkusza stylów w dokumencie, tym samym stanowiła coś, co dzisiaj znamy jako autorski arkusz stylów.

Warto zauważyć, że pierwotna propozycja Roberta, podobnie jak późniejsze propozycje innych, nie uściślała czy pionowe spacje przed i pod elementem były tym, co dzisiaj nazywamy marginesem (margin), czy odstępem (padding), dlatego też zakłada się, że chodzi o odstęp.

Pei Wei

Pei-Yuan Wei, twóca przeglądarki ViolaWWW - sławnej dzięki temu, że wprowadziła koncepcję apletów, trzy lata przed pojawieniem się Javy - wysłał swoją własną propozycję arkusza stylów 22 października 1993 roku.

Propozycja Peia zasadniczo różniła się od koncepcji Roberta, tym, że była bardziej opisowa oraz wprowadzała koncepcję dziedziczenia. Oto przykładowy arkusz:

(HEAD,BODY fontSize=normal
BGColor=white
FGColor=black
(H1 fontSize=largest
BGColor=red
FGColor=white)
(STRONG fontWeight=bold))

Przełożone na współczesny CSS:

head, body {
font-size: medium;
background-color: white;
color: black;
}
head h1, body h1 {
font-size: large;
background-color: red;
color: white;
}
head strong, body strong {
font-weight: bold;
}

Jako że pierowtna propozycja Peia była tak krótka, nie do końca jest jasne, czy jego składnia dotycząca dziedziczenia odpowiada elementom descendant selectors czy child selectors.

Håkon Wium Lie

10 października 1994 roku Håkon Wium Lie wydał swój pierwszy zarys tego, co miało stać się później Kaskadowymi Arkuszami Stylów.

Najważniejszą koncepcją wprowadzoną w propozycji Håkona jest kaskada - koncepcja interakcji i zasad pierwszeństwa pomiędzy arkuszami stylów autora, użytkownika i wreszcie arkuszami aplikacji użytkownika (przeglądarki).

Oryginalna składnia Håkona stosowała prostą notację kropkową:

h1.font.size = 18pt 100%
h1.font.family = times;
h1.space.above = 36pt;
h1.space.below = 8pt;

I znów przełożone na dzisiejszy CSS:

h1 {
font-size: 18pt !important;
font-family: serif;
padding-top: 36pt;
padding-bottom: 8pt;
}

Inną koncepcją wprowadzoną przez Håkona były arkusze stylów w zależności od medium:

speech.*.weight = 35db
speech.em.weight = 40db

Joe English

18 listopada 1994 roku (data jest nie do końca pewna, ale wzięta z odnośnego dokumentu), Joe English przedstawił propozycję alternatywną, stosującą składnię opartą na SGML:

<stylesheet>
 <colors>
  <color id=red rgb="#F00">
 </colors>
 <!-- Highlight all code sections in red: -->
 <style gis = "code kbd pre" fgcolor=red>
 </style>
</stylesheet>

Przełożone znów na współczesny CSS:

code, kbd, pre {
color: red;
}

Warto zauważyć, że propozycja Joe stosowała koncepcję definiowania wartości, która jest nieprzekładalna na język CSS. Użyłem słowa kluczowego red, gdyż jest ono predefiniowane dla CSS.

Warto również zauważyć, że chociaż to jest jedyny z przedstawionych tutaj przykładów, który stosuje mechanizm definiowania, pozostałe propozycje również z niego korzystały. Zwłaszcza Pierwszy Zarys korzysta z wartości zdefiniowanych poprzez mechanizm define:

define "My Gray" "191, 191, 191"
P : font.color = "My Gray"

Propozycja Joe'go Englisha nie jest dostępna w formacie HTML, ale można ją sobie ściągnąć:
Joe English: Arkusze stylów dla HTML (format pdf)
Joe English: Arkusze stylów dla HTML (format postscript)

Boczny tor: JSSS

Dopiero na cztery miesiące zanim specyfikacja CSS1 stała się rekomendacją W3C, Netscape zaproponował tej organizacji arkusze stylów oparte na javascripcie - w skrócie JSSS. Ich składnia, jak każdy pewnie zgadł - osadzała arkusze stylów za pomocą JavaScriptu. JSSS miały wszystkie mechanizmy osadzania znane w CSS:

<style type="text/javascript">
tags.p.font.size = "18pt";
tags.p.color = "green";
</style>

albo:

<p style="color = 'green'">Green paragraph</p>

albo:

<link
rel="stylesheet"
type="text/javascript"
href="http://example.com/jssss/">
</link>

JSSS zostały zaimplementowane w Netscape 4 i umarły w ciszy bez znaczącego zastosowania.