Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

Zmiana koloru markera elementu listy

11 października 2006

Rozwiązania czysto CSS-owe są super. Obrazki dodają wigoru arkuszom stylów, ale na przykład sztuczki z CSS Play powalają pomysłowością autora. Wracając do tematu - chciałem zmienić kolor markera listy. Specyfikacja mówi, że tego koloru nie można ręcznie określić:

The list properties (…) do not allow authors to specify distinct style (colors, fonts, alignment, etc.) for the list marker or adjust its position with respect to the principal box.

W3C: Lists: the 'list-style-type (…) properties

Mimo wszystko przeglądarki wypełniają go kolorem tekstu.

Zastananowiło mnie to. Stosowałem już kiedyś sztuczki polegające na zmianie koloru tekstu w elemencie listy korzystając z dodatkowego tagu - spana albo linka. W ten sposób otrzymywałem kolorowy bullet bez obrazka.

Teraz jeśli udałoby mi się zmienić kolor tekstu w elemencie listy bez dodatkowego elementu możnaby kolorować CSS-em markery list.

Wypróbowałem w końcu pseudoklasę :first-line.

  1. li {
  2. color: #F00;
  3. }
  4. li:first-line {
  5. color: #000;
  6. }

Eksperyment przyniósł ciekawe wyniki. Firefox oraz Konqueror (zakładam, że Safari też) zmieniły kolor markera na czerwony zgodnie z regułą dla li, a pierwszą linijkę tekstu potraktowały kolorem czarnym.

Internet Explorer i Opera zamalowały kropkę na czarno. Wygląda to tak, jakby pierwsza linijka tekstu oddziaływała na kolor markera, bądź sam marker był uznawany za część tekstową elementu.

Postanowiłem sprawdzić jeszcze jedną rzecz - otoczyłem element li przez outline i border. O ile border był przewidywalny, tak outline w Firefoksie otoczył główny element oraz marker, a Opera zrobiła z outline drugi border.

Różnice w interpretacji outline dla li w Operze i Firefoksie

I teraz zastanawia mnie co jest poprawne, bo specyfikacja nie mówi dokładnie jak się za to zabrać. O wiele bardziej wygodne wydaje się zachowanie Firefoksa, zarówno możliwość stworzenia kolorowych kropek dla prostej listy jak i otoczenie całości za pomocą outline - wykorzystywane przez rozszerzenia Fx i jego interfejs także. Czemu Opera znowu robi po swojemu? Albo czy istnieje zapis w specyfikacji, który usprawiedliwia taki wybór?


Czy kolorowanie markera tylko dla elementów listy składających się z jednej linijki ma sens? Możliwe; na pewno czasem mogłoby się to przydać, na przykład w listach, które nie zajmują wiele miejsca na ekranie. Chyba, że znacie inną metodę na zmianę koloru markera? :>

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 11 października 2006 o 20:37

Kategorie: CSS, Webdesign na luzie

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position
    outside: The marker box is outside the principal block box.

    http://www.w3.org/TR/CSS21/ui.html#dynamic-outlines
    (...) the outline is the minimum outline that encloses all the element's boxes.

    MZ Gecko popełnia błąd.

  2. A widzisz - Principal box to blok główny, czyli wszystko poza markerem. Ale nie oznacza to, że marker nie wytwarza pojemnika, nawet eterycznego (czy jak kto woli - niewpływającego na inne elementy). Bo gdyby tak nie było, to marker znajdowałby się zawsze w pozycji, którą określa list-style-position: inside. Dlatego outline jest także wokoło markera.

    Tzn ja to tak widzę.

  3. Hm, jakby to ująć... Babę byście sobie znaleźli, bo już naprawdę nie macie co robić :-)

  4. Nieścisłości w specyfikacji - tak to można ująć. Widać już to na przykładzie, że programiści różnych przeglądarek inaczej to zrozumieli ;-).

  5. Marker box jest jak światło ze swoim dualizmem korpuskularno-falowym i próba zgłębienia jego faktycznego stanu w świetle tego co oferuje nam specyfikacja CSS 2.1 jest z góry skazana na niepowodzenie. Przykład dyskusji: http://my.opera.com/quiris/blog/show.dml/284859

    To jakie zachowanie jest poprawne, powinny rozstrzygnąć oficjalne zestawy testów CSS, a takich niestety ciągle brak. A te kandydujące na nie, do tej pory istniejące są często już nieprawidłowe w świetle zmian w specyfikacji CSS 2.1

  6. To na fora z tym - zarówno forum Mozilla jak i Opery. Opisać i zostawić do przedyskutowania. :)

  7. Riddle: marker wytwarza pojemnik, ale wyraźnie masz napisane że domyślnie poza li, więc jakim prawem outline obrysowuje element previousSibling?
    Teoretycznie powinno zadziałać ustawienie innego koloru dla ul i li, ale nie działa na świętej trójcy ;]

  8. A niby Opera najpoprawniej interpretuje. Zgadzam się, dla mnie również zachowanie firefoxa jest bardziej poprawne ;)

  9. Cytaty z artykułu:
    "I teraz zastanawia mnie co jest poprawne, bo specyfikacja nie mówi dokładnie jak się za to zabrać."
    i
    "Czemu Opera znowu robi po swojemu?"

    1. Czy tylko ja widzę tu sprzeczność wypowiedzi?
    2. Co znaczy poprawność? Skoro coś jest nie określone to nie może byc poprawne lub nie poprawne z technicznego punktu widzenia.

  10. widze, ze odkopalem stary temat, ale zmiana koloru markera jest banalnie prosta(jak wpomnial wczesniej PablO) , wystarczy okreslic ‘color’ dla elementu ‘ul/ol’ np. na red a pozniej ustawic dla ‘li’ wlasciwosc ‘color’ na zadana wartosc, np. black i juz ogotowe – mamy liste z czerwonymi markerami i a tekst an czarno.Na dzien dzisiejszy dziala chyba wszedzie :-) (FF2,O9.23,IE6,7)

  11. wcale że nie działa :/ jeśli dla li nie ustawię koloru to marker zmienia swój kolor, ale kiedy ustawię, to nie działa (FF2,O9)

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.