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.

W jaki sposób stworzyć na stronie bloki, które będą zawierały automatyczne numerowanie i do tego numerki będą w środku i z prawej strony? Można by użyć generowanej zawartości oraz liczników albo wstawić jakimś skryptem. Co powiecie jednak na rozwiązanie najprostsze - lista numerowana <ol/> oraz trochę CSS:

ol' good html ;)

Działa w Firefoksie 1.5 oraz Internet Explorerze 6. Opera robi mi znowu na złość, podobnie jak wcześniej gdy używałem tylko marginesów. Szkoda. :(

Zaczynamy od podstawowej struktury - lista <ol/>, pozycje <li/> z blokami <div/> w środku. Wszystko pozbawione odstępów, tak na zaś (Explorer…). Po zresetowaniu odstępów i zaaplikowaniu podstawowych stylów określających tekst i kolory - efekt. Numerowanie jest tak duże, ponieważ zwiększyłem font-size dla li i pomniejszyłem dla li div.

Teraz zrobimy coś takiego: pozycje listy przesuniemy w prawo o jakąś wartość (wybrałem 96% żeby zostawić trochę miejsca) a <div/> który jest w niej przesuwamy z powrotem w lewo o tą samą wartość. Ustawiamy pozycję markera listy w środku.

  1. li {
  2. position: relative;
  3. list-style-position: inside;
  4. left: 96%;
  5. }
  6. li div {
  7. position: relative;
  8. left: -96%;
  9. }

Otrzymujemy już jakiś efekt naszych działań. Bije po oczach pasek przewijania - ponieważ w <li/> jest nadal zarezerwowane miejsce na ten nasz tekst - my go tylko przesunęliśmy. Należy to naprawić przed odpowiedni overflow. Należy też wyrównać zawartość listy z jej markerem (top) oraz zmniejszyć odstępy między pozycjami listy (margines ujemny). Na końcu dodamy odpowiednie dopełnienie z prawej oraz dopełnienie z góry całej listy, żeby nam pierwszej pozycji nie ucięło przez ujemny margines.

  1. ol {
  2. overflow: hidden;
  3. padding-top: 3em; /* 3 x 100% = 300% font-size dla li = wysokość markera */
  4. }
  5. li {
  6. position: relative;
  7. list-style-position: inside;
  8. left: 96%;
  9. margin: -1em 0 0 0; /* wysokość markera */
  10. }
  11. li div {
  12. position: relative;
  13. left: -96%;
  14. top: -4em; /* wysokość markera (4 x 25% = 1em) */
  15. padding: 1em 4% 1em 0; /* 4% dodane do 96% */
  16. }

Dodałem komentarze, żeby było widać, że dobrane wartości nie są z kosmosu - obejrzycie presentation.css aby rozwiać wątpliwości. Pozostaje poprawić całkiem dobrze działającą stronę dla IE. Stosujemy nieśmiertelne komentarze warunkowe, kopiujemy reguły i je zerujemy. Po paru modyfikacjach doszedłem do końcowego efektu.

Nie jest on idealny, ale już mówię czemu - pierwsza linijka tekstu wariowała (i wcale nie przez :first-line), więc ustawiłem pojemnikowi hasLayout (zoom). Przez to marker znajduje się na dole boksu, a nie u góry. Wybór należy do Was. Zaznaczę jeszcze, że prawy padding jest opcjonalny - gdy go nie dodamy tekst znajdzie się nad markerem. W IE overflow nie obcina wystającego markera, więc będzie widać też kropkę. Miłej zabawy z kodem, może uda się Wam poprawić moje rozwiązanie. :)

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 23 maja 2006 o 17:50

Kategorie: CSS, HTML & Semantyka, 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. ChosenOne 1 23 maja 2006, 18:38

    Pomysł ciekawy, lecz jak napisałeś w Operze się wykrzacza, a strona chyba powinna być jak najbardziej uniwersalna.

  2. W Konquerorze tez sie sypie: http://czlug.icis.pcz.pl/~pbm/konq-riddle.png

  3. Ja wiem, że głupie ptanie, ale... Dlaczego zawsze jak napiszesz coś fajnego, oryginalnego ewentualnie wyjątkowo interesującego, to nie działa to pod Operą?
    Obrażam się. :P
    Dlaczego ja nie mogę mieć u siebie takich ładnych rzeczy, tylko zawsze wychodzi jakaś papka antyoperowa? :(
    Wierzę, że jakoś uda się pogodzić Twój sposób z moją ulubioną przeglądarką...

  4. Anoriell: Może Opera 9 pomoże?
    Pbm: Nie jest tak źle ;) Znaczy sposób nie działa, ale strona się nie sypie. :P

    Może coś się uda z tego wykrzesać, posiedzę jeszcze przy CSS-ie i sprawdzę.

  5. I tak btw: jogg tez sie sypie troszke w Konquerorze: te krzaki u gory zaczynaja sie na srodku strony i wyjezdzaja w prawo.

  6. Cóż… Konq ma pecha: http://browsershots.org/website/1078656/ albo poważną niedoróbkę pozycjonowania relatywnego (co by się zgadzało z tym przykładem z wpisu).

    edit: Wróć… pewnie chodzi o background-position: center top;… jeśli on bierze pod uwagę centrowanie względem lewej krawędzi obrazka to łolaboga… co to za pomysły?

  7. http://mcv.mulabs.org/img/konqueror-riddle-1.png

    Centruje dobrze, bo z jakiegoś powodu szerokość strony mu wychodzi za duża (i wtedy obrazek jest na prawo; zauważ poziomy scrollbar na dole). Może to jednak to pozycjonowanie? (BTW ten Konqueror ze shota przechodzi ACID2).

    U mnie sypie się w Konquerorze menu, gdzies w okolicach ujemnych marginesów którychś tam wewnętrznych divów z kolei. Ten sam błąd jest w Safari < 2.0, w 2.0 działa już tak jakbym chciał.

  8. Strasznie masz małe czcionki… no i brak JS-a też widać. ;)
    Kolumn nie pozycjonuję, więc nie mam pojęcia co jest nie tak. :( Gdybyś zechciał przez UserCSS wyłączyć display:nonem po kolei na zmianę #top, #top h1, #access to byśmy się dowiedzieli czy top psuje, czy coś na dole.

    A o Acid2 mi nie mow ;) Mam o tym bardzo sceptyczne zdanie.

  9. Niestety aktualny Weekly Opery 9 sobie nie radzi :(

  10. Riddle: „winowajcą” jest #top h1 { text-indent: -1000px; } Nie wiem czy Konqueror normalnie sobie z tym nie radzi, czy tylko tutaj fochy pokazuje ;-)

  11. [mcv]: „U mnie sypie się w Konquerorze menu, gdzies w okolicach ujemnych marginesów którychś tam wewnętrznych divów z kolei. Ten sam błąd jest w Safari < 2.0, w 2.0 działa już tak jakbym chciał.”

    a u mnie w Konquerorze wszystko działa tak jak powinno i stronka się nie rozchodzi

  12. Skoro stosujesz osobne style dla IE i przeglądarek, to może zrób dla IE obecną wersję, a dla przeglądarek zabaw się z ::before (uwaga na Gecko).

  13. Firefox 1.5.0.3 - porażka: poobcinane różowe numerki
    MSIE 7.0 beta 2 - porażka: różowe numerki wjeżdzają na sąsiadujące bloki
    Opera 9.0 beta 2 - porażka: brak różowych numerków.

    Podsumowując: Porażka całkowita. Szkoda potu i łez. Efekt opłakany.

  14. MSIE 7.0 beta 2 nie jest stabilną wersją przeglądarki, nie piszę pod nią - zwłaszcza takich rzeczy (najpewniej wystarczyłoby parę reguł z CSS dla IE6). Firefox 1.5 ucina, bo chciałem żeby część uciął - czytaj uważnie proszę.

  15. > MSIE 7.0 beta 2 nie jest stabilną wersją przeglądarki,

    MSIE 7.0 beta 2 jest bliższa temu co będzie zawierała finalna wersja niż 6.0.

    > Firefox 1.5 ucina, bo chciałem żeby część uciął - czytaj uważnie proszę.

    Gdzie jest napisane, że ucięcie jest zamierzonym efektem?

    Poza tym:

    > W jaki sposób stworzyć na stronie bloki, które będą zawierały automatyczne numerowanie i do tego numerki będą w środku i z prawej strony?

    Efekt końcowy nie odpowiada założeniom. Numerki są z prawej strony, ale wcale nie w środku tylko na górze.

  16. Boż… Quiris, czytaj zanim skomentujesz, ok? :(

    [quiris]: „Gdzie jest napisane, że ucięcie jest zamierzonym efektem? ”

    „W IE overflow nie obcina wystającego markera, więc będzie widać też kropkę.”

    I miałoby być właśnie „w środku” a nie „na środku”!

  17. > „W IE overflow nie obcina wystającego markera, więc będzie widać też kropkę.”

    No tak, z tego rzeczywiście widać, że w Firefoksie obcięte literki (również od góry - czy tam też masz kropki?) to zamierzony efekt.

    > I miałoby być właśnie „w środku” a nie „na środku”!

    Akurat w środku znaczy dokładnie w środku. Jeśli chcesz, żeby był wewnątrz bloku, to napisz „wewnątrz bloku”

  18. Chyba trochę przekombinowane to rozwiązanie. W ogóle ładniej wygląda dla mnie step1 od step4 (przy jedynce kropka cała, przy czwórce jej kawałek (FF 1.5) naprawdę wygląda to tak jakby się coś krzaczyło).
    Jeśli bardzo by mi zależało na numerkach z prawej strony, chyba bym wolał to zmodyfikować poprzez JS a nie poprzez dodawanie markupu i tasowanie struktury CSS'em i co z tego, że te pare procent, które nie obsługuje JS będzie miało numerki z lewej strony.. istota strony będzie widoczna dla wszystkich.
    Odnośnie IE7 to nie pamiętam dokładnie ale chyba nawet Meyer pisał, że beta2 jest w zasadzie finalna jeśli chodzi o implementację CSS i można a nawet powinno się już pod nią testować strony, pod tym kątem finalny IE7 już nic nowego nie wniesie.

  19. Masakrycznie się czepiacie, a quiris bije wszelkie rekordy. :) Dobra, walić to - nie używajcie. Wpis nie ma pokazać jak do dupy jest Opera, tylko jak fajnie się można CSS-em pobawić. Zero empatii, null.

  20. Riddle "poluzuj tam gdzie Cię ciśnie, jo" :DD

  21. Niestety pod najnowsza Safari tez przyklad nie dziala. Pozdro

  22. Już dość dawno było ogłaszane, że IE7b2 jest "layout complete", to znaczy, że w silniku renderującym już nic nie będzie zmieniane (żeby nie zamęczać designerów ciągłymi modyfikacjami i dać im czas na poprawienie CSS przed pojawieniem się wersji finalnej).

  23. Riddle to pod czym działa ten Twój kod bo 3/4 przeglądarek już odpadło... Pod lynx'em też nie działa :) Pod Epiphany również...

  24. Szkoda. ;) Ale proof-of-concepts mają to do siebie. Pocieszam się myślą, że jak pozycjonowanie relatywne zostanie w tych innych oglądarkach naprawione to będzie lepiej. :P

    Serafin: 3/4 != 75%. Pozdro 600.

  25. anoriell 25 25 maja 2006, 05:49

    Riddle? Ja tutaj tak bardziej prywatnie i mało w związku z wpisem... Wiem, że niezgodnie z 'regulaminem', ale... Nie zauważyłeś, że nogami i rękami bronisz się przed każdym choćby lekko negatywnym zdaniem? Zazwyczaj używasz argumentów: "Czytaj! Zmień przeglądarkę"
    Nie wygodniej byłoby po staro-internetowemu napisać:
    "Tego bloga oglądaj w jedynej i słusznej przeglądarce FireFox i nie zadawaj żadnych dodatkowych pytań?"

    Wpis rozumiem i nie czepiam się Twoich pomysłów, które uważam za naprawdę dobre. Osobiście twierdzę, że WSZYSTKO SIĘ DA i jeśli gdzieś nie działa, to po prostu potrzeba poprawek.

  26. Czasem się nie da… to tylko oprogramowanie. Jeśli chodzi o CSS3 nikt się nie dziwi, że coś nie działa w większości przeglądarek… lecz wcześniejsze wersje jakoś już tak nie oddziałują na ludzi.

    Najlepiej podpowiedział PablO… ale to już zupełnie inna bajka, nie na ten przykład i wpis.

    Lecz tak, bardzo mnie irytuje jak ktoś uderza w ton, którego ja nie zamierzałem wcale zaczynać - i to odniosę do pierwszych komentarzy że gdzieś nie działa. :-)

    I jako że tu się robi paskudny (nic osobistego) offtopik, zamykam komentarze.

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ę.