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.

Składając strony internetowe na podstawie przygotowanych plików graficznych (mówi się: tnąc je) często dochodzi się do wniosku, że danego efektu nie można osiągnąć przez CSS, bądź nie wszędzie. Styl linii border-style: dotted jest jednym z nich. Do tego różni się znacznie w trzech głównych przeglądarkach co jeszcze bardziej pogarsza sprawę.

Szerokość obramowania 1px, kolor #666 dla pojemnika na tle #EFEFEF o automatycznej szerokości i wysokości ustawionej przez parę <br/>:

Jak widać Firefox traktuje serio grubość i gęstość - linia złożona jest z jednopikselowych kropek występujących z jednopikselową przerwą pomiędzy nimi. Explorer pomylił się straszliwie i pokazał coś w rodzaju kresek. Opera za to obliczyła inaczej odległości między pojedynczymi pikselami i całość jest bardziej rozciągnięta.

Teraz zróbmy ten sam test, ale szerokość linii zwiększmy do 10px:

Explorer tym razem bardzo serio definicję dotted i pokazał kropki. Firefox dalej twardo się trzyma i renderuje „kwadratowe piksele” powiększone 10x. Opera robi podobnie, ale w przykładzie odległość w poziomych liniach między kropkami to 8px a w pionowych 11px. Z tych uciętych obrazków może wynikać, że najładniej wygląda to w Operze. No dobrze, ale zmniejszmy pojemnik do 40px na 40px i pokażmy zrzut:

Firefox stara się znormalizować nachodzenie na siebie lini sąsiadujących przez wycięcie koloru nachodzących kropek na rogach. Tworzą się prostokątne ubytki. Opera natomiast ucina zaś, z mojego punktu widzenia, dziwacznie - czasem pod skos, czasem prostokątnie. Oczyma projektanta Opera psuje wygląd stron w tym miejscu.

A jak jest na Explorerze?

Tło wyskoczyło spod linii. Czemu? Bo takie działanie tła wykazują elementy z hasLayout = true. Obiekt dostał layout bo zaaplikowaliśmy mu wymiary (szerokość i wysokość). Da się to obejść, ale należy popsuć sobie kod dodatkowymi znacznikami.

Otoczyłem element div'em i nadałem mu wymiary zamiast temu z obramowaniem. hasLayout nie jest dziedziczne, więc podziałało. Jednak teraz zawartość decyduje o wysokości i szerokości pojemnika w środku. Należy więc wstawić jeszcze jeden <div/> i też nadać mu wymiary. Mamy więc element otoczony z dwóch stron pancerzem. Warte wysiłku tylko w niektórych przypadkach.

Jako projektanta martwi mnie kreskowanie zamiast kropkowania w IE, więc postanowiłem użyć niedoskonałości oka w przypadku 1px obramowania. Skoro Firefox co drugi piksel opuszcza, to tworząc linię ciągłą o kolorze 2 razy mniej nasyconym (#AAA) uda się odwzorować wrażenie lekkości. Nie jest to identyczny efekt, ale może się przydać:

A może Wy też macie jakieś sztuczki i hacki na różnice w renderowaniu obramowań między przeglądarkami?

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 27 stycznia 2006 o 19:35

Kategorie: CSS, Design, Internet Explorer, Przeglądarki

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. Rónież zauważyłem ten problem, iż przeglądarki nie do końca wiedzą, co znaczy "dotted". O ile może i w FF i Operze inaczej to wygląda, ale wg mnie pomimo to jest OK, to jednak IE nie wie chyba, że kropka to wcale nie jest taka krótka linia. Jeśli chodzi o wygląd pogrubionego obramowania, nachodzącego na siebie (wysokość i szerokość 40px), to przyznam sczerze, że wcale nie sądzę, iż Opera źle z tego wychodzi. Firefox również musi "wciąć" kawałek, żeby jakoś to wyglądało. Opera robi to inaczej i myślę, że tutaj nie ma się co czepiać, gdyż w 100% tego problemu się nie rozwiąże.

    Ale jaki świat byłby piękny, jakby wszystkie przeglądarki identycznie wyświetlały obramowania. :)

    Ciekawą sprawę poruszyłeś, o której również już myślałem. Niby nic, a jednak może być z tym problem przy tworzeniu stron.

  2. Widzisz, biorąc pod uwagę design o wiele lepszym wyjściem jest symetria niż chaos. Dlatego popieram tutaj Firefoksa. W sumie chyba (ważne słowo - chyba) specyfikacje nie mówią dokładnie jak to ma działać.

  3. A Explorer rozpieprza pionowe ramki przy scrollowaniu.

  4. Zauważyłem również rzecz taką, że w przypadku gdy strona posiada pionowe, długie linie o stylu dotted IE nie potrafi tego porządnie wyrenderować i podczas przewijania strony często z kropek robią się "smugi" ciągłej linii. Prawie zawsze kiedy muszę wykropkować coś pionową linią na stronie to robie to przy użyciu gifa wstawionego jako tło.

  5. ciekawe :) szczerze mowiac nie wiedzialem ze IE obsluguje w ogole dotted, acz tylko dla wiekszych ramek.

  6. a ja uwazam, ze zarowno w operze jak i ff w przypadku 40x40 jest zle [tyle, ze w ff zaczyna sie ten problem wczesniej - jak widac na shotach] - JA wiem lepiej jak ma wygladac MOJA strona z MOIM designem i MOIM stylem css - jak pisze dotted, to ma byc dotted, a nie programisci dorabiaja sobie ideologie, ze trzeba te kwadraciki na rogach powcinac, zeby jakos symetrycznie fajnie wygladalo - skoro piksel uwazaja za dot, to ten dot ma wygladac tak samo niezaleznie od tego czy jest na rogu czy na srodku krawedzi. ok - w ff 40x40 wyglada lepiej, bo symetrycznie, ale czemu oni wiedza lepiej, ze ja chce miec takie wciecia na rogach, a nie pelne kwadraciki [zgodnie ze stylem - "dotted", a nie "partial dotted without narrow dots which shoud be cutted-in to get cool design-look" :P]

  7. a co gdybyśmy zrobili tło z szachownicą o rozmiarze kropek i przerw 1px, dali je jako tło diva?

    do tego diva włożylibyśmy drugiego diva z background-color: white i margin: 1px

  8. r.d. - celne, chodzilo mi o dashed, napisalem dotted ;]

  9. mroq, ale ja sie odnosilem do wpisu Riddle'a :) a smugi z dashed robią się u mnie zarówno pod IE jak i FF, ale obstawiam tutaj karte graficzną, nie przeglądarkę.

  10. To z tymi stylami ramek też zauważyłem, chciałbym zapytać o kolory:
    Co znaczy #666 i od kiedy tak można? myślałem, że kolor podaje się w formacie RGB gdzie za wartość czerwieni, zieleni i niebieskiego odpowiadają dwa miejsca, widać jestem bardzo nie na czasie :)

  11. Można podać tylko trzy cyfry, wtedy każda znaczy dwie takie same.
    Na przykład #666 = #666666, a #ABC = #AABBCC. :)

  12. warpech, miałem ten sam pomysł
    .grids {
    background: url('grid.gif');
    padding: 1px;
    }

    <div class="grids">
    <div class="cokolwiek">
    Tutaj jest tekst
    </div>
    </div>

  13. shw: to nie takie latwe... Algorytm wycina nie dlatego, ze cos chcemy fajnego osiagnac, tylko dlatego, ze chcemy uniknac nachodzenia pikseli.

    Generalnie to o czym pisze riddle, to ogromne pole minowe do dyskusji.

    Prosty przyklad na obalenie Twojego twierdzenia "JA WIEM LEPIEJ"... Zalozmy, ze kazesz browserowi narysowac double border o grubosci jednego piksela. Co powinna zrobic przegladarka?
    W Gecko akurat obsluge tego przypadku ja pisalem, i wybralem zmiane typu double na single w przypadku gdy grubosc jest mniejsza niz 2 px, ale tego typu sprzecznosci sa naprawde trudne do opisania algorytmem...

  14. A powiesz mi może czemu tylko IE zdaje się rozumieć kropkę jak kropkę? Bo akurat że sąsiadujące linie powinny się ścinać, żeby dwa kolory obok siebie nie wyglądały paskudnie, to rozumiem

  15. To juz chyba ich wlasna interpretacja. W W3C afair nigdzie nie ma informacji ze dotted ma byc rysowane kropkami, tylko ze punktami oddzielonymi przestrzenia.

  16. moze troche off ale:

    denerwuje mnie ze w ff nie zawsze dziala drag&drop (a w IE dziala dobrze)

  17. Hehe, wlasnie dlatego staram sie unikac dotted [;

    I mam pytanko troche niezwiazane z tematem..
    dlaczego, w Operze, jak mam obramowanie dashed (nie cale tylko na przyklad samo dolne), to roznie to wyswietla? [obramowanie jest 1px; kreseczki maja 2px dlugosci, a przerwy miedzy nimi sa raz 2 a raz 4 pikselowe - na tej samej stronie]

  18. Na monitorze LCD zamiana dotted -> 50% solid już nie jest taka różowa.

  19. BRAINIAC JEST OK TO MUJ ULUBIONY PROGRAM

  20. (ad. zastępowania dotted tłem)
    Wyłączamy obrazki - nie ma obramowania. Gdy użyjemy bordera, to obramowanie zostanie.

    Wówczas dostępność jest w pewnym sensie zaburzona.

  21. archas@elomza.pl 21 24 lutego 2007, 01:09

    niesamowita strona. wielkie gratulacje i podziekowania za to ze ci sie chce to robic i pomagasz innym. brawo.

  22. wstawilam filmik na stronke o adresie
    <object width=„425” height=„355”><param name=„movie” value=„http://www.youtube.com/v/h87xwPhIN94&rel=1”></param><param name=„wmode” value=„transparent”></param><embed src=„http://www.youtube.com/v/h87xwPhIN94&rel=1” type=„application/x-shockwave-flash” wmode=„transparent” width=„425” height=„355”></embed></object>
    i nie wyswietla sie jego zawartosc po umieszczeniu na stronke co zrobic??
    bardzo prosze o pomoc dziekuje z gory

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