Selektory#

Selektory atrybutów#

Selektory pozwalają reprezentować atrybuty elementów. Kiedy selektor jest używany w celu dopasowania elementu, to selektor atrybutu (attribute selector) jest używany w celu dopasowania elementu posiadającego atrybut, i atrybut ten pasuje do selektor atrybutu.

Wciąż trwa dyskusja, czy zezwolić w selektorach atrybutów na dopasowanie wielu wartości rozdzielonych przecinkami, jak np. [rel ~= next, prev, up, first, last].

Selektory atrybutów można podzielić ze względu na:

We wszystkich przypadkach wartościami atrybutów są CSS-owe identyfikatory lub łańcuchy znakowe.

Składnia selektorów atrybutów jest bardzo elastyczna. Można umieszczać białe znaki wokół wszystkich części składowych wewnątrz nawiasów []. Poniższe przykłady są prawidłowe:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[ att ]
[ att=val ]
[ att = val ]
[att=val i]
[att= val i ]

[att~="val"i]
[att | = "val" i]

Selektory atrybutów i czułość na wielkość liter#

Wpływ wielkości znaków na składnię Selektorów opisałem już wcześniej. Zgodnie z przytoczonymi tam informacjami, domyślnie, czułość na wielkość liter w nazwach i wartościach atrybutów wewnątrz selektorów zależy od języka dokumentu.

Dla przykładu, aplikacje XML są czułe na wielkość liter w nazwach elementów i atrybutów, dlatego polecenia typu DIV i div oraz id="" i ID="" nie są równoważne. Restrykcje te nie obejmują HTML-a, który jest nieczuły na wielkość liter w tych obszarach.

Inaczej wygląda sytuacja w przypadku wartości atrybutów, gdzie wielkość liter zazwyczaj ma znaczenie, dotyczy to zarówno XML-a jak i HTML-a. Umieszczone w kodzie HTML polecenia typu id="test" oraz id="TEST" odnoszą się do dwóch różnych elementów.

Selektory poziomu czwartego wprowadzają specjalny identyfikator i dla niektórych selektorów atrybutów, za pomocą którego dopasowywanie wartości atrybutów jest niezależne od wielkości liter.

Selektory atrybutów i przestrzenie nazw#

Atrybuty w językach znacznikowych, podobnie jak zawierające je elementy, mogą przynależeć do pewnej przestrzeni nazw, dlatego nazwy atrybutów w selektorach atrybutów są podawane w postaci nazwy kwalifikowanej CSS; czyli prefiks przestrzeni nazw, który został uprzednio zadeklarowany, może być umieszczony przed nazwą atrybutu, gdzie separatorem między prefiksem i nazwą jest "pionowa kreska" (U+007C, |).

Zgodnie z przestrzeniami nazw XML, domyślne przestrzenie nazw nie mają zastosowania w atrybutach, dlatego selektory atrybutów bez komponentu przestrzeni nazw stosuje się tylko do atrybutów, które nie przynależą do żadnej przestrzeni nazw (odpowiednik "|attr"). Znak gwiazdki (U +002, *) może być użyty dla prefiksu przestrzeni nazw, wskazując, że selektor pasuje do atrybutów w dowolnej przestrzeni nazw (włącznie z atrybutami bez przestrzeni nazw).

Selektor atrybutu zawierający prefiks przestrzeni nazw, który nie został uprzednio zadeklarowany, jest nieprawidłowym selektorem.

Przykładowy kod CSS:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
@namespace foo "http://www.example.com";

[foo|att=val] { color: blue; }	/* pierwsza reguła */
[*|att] { color: yellow; }		/* druga reguł */
[|att] { color: green; }		/* ...*/
[att] { color: green; }

Powyższy przykład można omówić następująco:

W ramach uzupełnienia zachęcam do przeanalizowania przykładów stosowania przestrzeni nazw w przypadku selektora uniwersalnego i selektora typu.

Domyślne wartości atrybutów wewnątrz DTD#

Selektory atrybutów reprezentują wartości atrybutów z drzewa dokumentu. Zasady konstruowania tego drzewa dokumentu są poza zakresem Selektorów. W niektórych rodzajach dokumentów domyślne wartości atrybutów mogą być definiowane w DTD lub innym miejscu, ale takie atrybuty mogą być wybrane przez selektory atrybutów jedynie w przypadku, kiedy pojawiają się w drzewie dokumentu. Selektory powinny być zaprojektowane tak, aby mogły pracować z lub bez domyślnych wartości atrybutów dołączanych do drzewa dokumentu.

Dla przykładu, aplikacje obsługujące język XML mogą, ale nie jest to wymagane, odczytywać "zewnętrzny podzbiór" DTD, choć wciąż zobowiązane są do poszukiwania domyślnych wartości atrybutów w "wewnętrznym podzbiorze" dokumentu. Definicja podzbioru znajduje się w specyfikacji XML. W zależności od aplikacji klienckiej, domyślne wartości atrybutu zdefiniowane w zewnętrznym podzbiorze DTD mogą, ale nie muszą, pojawiać się w drzewie dokumentu.

Aplikacje klienckie rozpoznające przestrzeń nazw XML mogą (choć nie muszą) wykorzystywać pewne informacje z tej przestrzeni nazw, aby traktować domyślne wartości atrybutów tak, jakby były obecne w dokumencie. Dla przykładu, aplikacje klienckie obsługujące XHTML nie mają obowiązku korzystania ze swoich wbudowanych informacji w XHTML DTD.

Zazwyczaj implementacje ignorują zewnętrzne podzbiory. Jest to zgodne z zachowaniem niewalidujących procesorów określonych w specyfikacji XML.

Rozważmy element EXAMPLE z atrybutem radix, który ma domyślną wartość "decimal". Fragment DTD może wyglądać następująco:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!ATTLIST EXAMPLE radix (decimal,octal) "decimal">

Jeśli arkusz stylów zawiera następujące reguły:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
EXAMPLE[radix=decimal]	{ /*... właściwości dla domyślnych przypadków ...*/ }
EXAMPLE[radix=octal]	{ /*... pozostałe ustawienia ...*/ }

to pierwsza reguła może nie pasować do elementów, których atrybut radix jest ustawiany domyślnie, tzn. nie został jawnie podany w drzewie dokumentu. Aby obsłużyć wszystkie przypadki należy pominąć selektor atrybutu dla domyślnej wartości:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
EXAMPLE					{ /*... właściwości dla domyślnych przypadków ...*/ }
EXAMPLE[radix=octal]	{ /*... pozostałe ustawienia ...*/ }

Ponieważ selektor EXAMPLE[radix=octal] ma wyższą specyficzność niż samodzielny selektor typu, to deklaracje stylu z drugiej reguły nadpiszą te z pierwszej, dla elementów, które posiadają atrybut radix z wartością "octal". Należy zwracać uwagę, aby wszystkie deklaracje właściwości, które mają zastosowanie tylko do domyślnego przypadku, zostały nadpisane przez sprecyzowane reguły stylów.

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Selektory (H1) Selektory atrybutów (H2) Selektory atrybutów i czułość na wielkość liter (H3) Selektory atrybutów i przestrzenie nazw (H3) Domyślne wartości atrybutów wewnątrz DTD (H3)