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.

Internet Explorer - ukochana przeglądarka, której nie sposób zignorować (jaka szkoda, prawda?). Piszesz zgodnie ze specyfikacją, skończyłeś - klikasz na niebieskie „e” i pozostaje wyrwać sobie włosy. Postanowiłem więc zebrać kilka porad dotyczących tworzenia stron zgodnych ze standardami, nie powodujących u IE czkawki.

Termin „pisanie stron pod IE” który pojawia się tutaj nie odnosi się oczywiście do oldschoolowych napisów „Tę stronę należy oglądać w IE 3.0 i rozdzielczości 916x666px”. Po prostu znając tylko standardy sieciowe trudno jest zmusić poprawny dokument żeby dobrze wyświetlił się w przeglądarce nastawionej na niepoprawne strony. W artykule założyłem operowanie na IE6.0/win. Wiem, że czasem potrzeba zgodności z IE5.x, lecz należałoby napisać wiele więcej tekstu o różnicach. Gdzie będę mógł, zaznaczę problem z poprzednimi wersjami przeglądarki MS.

Wypisane tutaj porady są bardziej podpowiedziami niż wytycznymi. W większości przypadków da się znaleźć inny sposób rozwiązania problemu, bądź ugryźć go od drugiej strony. To co zebrałem to osobiste doświadczenia w takim pisaniu stron, aby dostosowywanie ich pod IE było kwestią kilku linijek CSS-a w oddzielnym arkuszu niż kilkugodzinnym hakowaniem.


Pierwszą zasadą jaką stosuję podczas projektowania stron które mają działać poprawnie na IE jest „nie przesadzać”. Chodzi o to, że pomimo istnienia wielu sposobów napisania fragmentu HTML-a albo CSS-a, nie powinniśmy rzucać się od razu na ten najlepszy. Najlepszy biorąc pod uwagę standardy, semantykę, oszczędność kodu i tak dalej.

Nie jest to złota reguła i jeśli posiadasz doświadczenie na temat zachowań naszej ulubionej przeglądarki, to spokojnie można spróbować wycisnąć z niej więcej. Jednak jeśli coś zaczyna nie grać, to najlepiej wrócić do podstawowej konfiguracji - a dopiero potem miarowo usuwać zbędny kod i jeśli nic się nie rozsypuje, podmieniać.

Doctype

Doctype to świętość, zgodzisz się raczej. Kto czyta ten artykuł wie o przełączniku typu dokumentu. Jest on bardzo ważny; bardzo ważne są też dodatkowe reguły, o których należy pamiętać pisząc strony pod IE.

Mając styczność z wieloma typami dokumentu założyłem, że najkorzystaniej pisać w XHTML 1.0 Strict i nijak ma się do tego moda. Czemu? Aby pisać strony i oczekiwać takich samych wyników należy dokładnie wiedzieć w jakim trybie będzie strona wyświetlana w różnych przeglądarkach.

Internet Explorer włącza tryb zgodny ze standardami gdy wykryje deklarację XHTML 1.0 w dowolnej wersji (Strict, Transitional, Frameset), XHTML 1.1 albo HTML 4.01 Strict. Doctype XHTML 1.0 Transitional i Frameset oraz HTML 4.01 Strict włączają w przeglądarkach Gecko tryb prawie standardowy - emulację zgodnego ze standardami wyświetlania stron Explorera1. Możnaby używać dowolnego XHTML albo ścisłego HTML 4.01 - ale pozostaje kwestia innych przeglądarek zgodnych ze standardami - na przykład Opery i Safari. Dlatego aby zapewnić sobie podstawę do bojów wybrałem XHTML 1.0 Strict. Nie musisz się z tym zgadzać, możesz wybrać inaczej. Mój wybór natomiast jeszcze mnie nie zawiódł.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Co do samego Doctype - musi być to deklaracja kompletna, z bezwzględną ścieżką do DTD. Musi być to pierwsza linijka dokumentu. Odpada prolog XML. Jeśli jesteś w stanie użyć (na przykład) PHP możesz dodać prolog dla przeglądarek innych niż IE2:

  1. <?php
  2. if ((isset($_SERVER["HTTP_ACCEPT"])
  3. and stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml"))
  4. or stristr($_SERVER["HTTP_USER_AGENT"],"W3C_Validator")) {
  5. header("Content-Type: application/xhtml+xml; charset=utf-8");
  6. echo '<?xml version="1.0" encoding="utf-8"?>';
  7. echo "\n";
  8. else { header("Content-Type: text/html; charset=utf-8"); }
  9. ?>

W innym przypadku gdy IE nie zobaczy w pierwszej linijce Doctype dla XHTML 1.0 Strict nie włączy Standards Mode. No cookie.

hasLayout

Ustawianie layoutu było już przeze mnie opisywane. Teraz jednak parę test case'ów.

Pozycjonowanie
Jeśli potrzebujemy wypozycjonować jakiś element w odniesieniu do swojego rodzica (relativeabsolute), który to ma włączone pływanie bądź inne trochę bardziej zaawansowane przekształcenia, możemy natknąć się na problem. Explorer źle odnosi się do krawędzi boksu, przez co użycie na przykład left: 100px nie będzie wyglądało tak samo jak w innych przeglądarkach. Okej - można próbować ustawiać wartości tylko dla przeglądarki MS - lecz moim zdaniem nie tędy droga. Bo wystarczy zaaplikować rodzicowi pozycjonowanego elementu hasLayout przez zoom: 1 (nie działa w IE5.x - tam używaj czegoś innego). Wyświetlanie wraca do normy. Wielokrotnie spotykałem się z tym błędem (także tutaj na blogu), a jego rozwiązanie jest jak widać dość proste.
Tło
Czasem tak się zdarza, że tło elementu zaczyna mrugać podczas przewijania, zaznaczania tekstu albo uaktywniania :hover linków. Explorer zjada połowę, przemieszcza obrazek i wyprawia inne podobne dziwacwa. Rozwiązanie jak wyżej - zoom: 1 i po sprawie.
Inne
Problemy z listami, już przeze mnie opisane. I inne, insze.

Resetowanie CSS

Resetowanie domyślnych stylów przeglądarki jest dobrym pomysłem, chociaż zależy to też od stopnia złożoności strony, nad którą pracujesz. Przykładowo IE wcina pozycje list za pomocą lewego marginesu, a Firefox używa padding. Sprowadzenie wszystkich marginesów i dopełnień do zera ułatwia pracę - od razu widać prostotę box modelu gdy włączasz float; nie rozpraszają cię też zagnieżdżone elementy. A pamiętając o zasadzie zapadania się pionowych marginesów możesz spokojnie odtworzyć style dla akapitów, etc.

Gdy nie przejmujesz się IE5.x pisz:

  1. * { margin: 0; padding: 0; }

Selektor uniwersalny działa w IE6 i nowoczesnym świecie. W innym przypadku wypisz elementy po przecinkach. Ja sam mam zwyczaj wypisywania - to nie kosztuje zbyt wiele (zwłaszcza jak się te linijki kopiuje), a wpływa zbawiennie na dokument w starszych IE.

Overflow

Mam taką zasadę, że nie używam overflow jeśli nie muszę - oczywiście nie jest powiedziane, że jest ona zawsze słuszna. Jednakże modyfikacje sposobu wyświetlania zawartości wystającej spoza boksu zwykle powodują różnorakie dziwactwa w IE. Wartość auto albo hidden ustawiam tylko dla elementów które są wypełniane losową treścią i jej za duża ilość może popsuć resztę layoutu - listing kodu albo div z obrazkiem.

W przypadku rozciągnięcia nadrzędnego diva zawierającego na przykład dwa pływające pojemniki stosuję trzeci element i ustawiam mu clear: both. Jest to niesemantyczne rozwiązanie - jednak jak pisałem wcześniej w początkowej fazie projektowania strony najlepiej nie faszerować Explorera za dużą ilością zaawansowanego CSSa. Potem można wrócić i zobaczyć czy dokument nie dziwaczeje po zmianach.

CSS dla IE

Poradziłbym na początek jedno - nie używaj hacków. Jakkolwiek to nazwiesz: czy będzie to _underscore czy !important czy może * html, to błędy rozpoznawania CSS i już w IE7 się z wieloma z nich uporali. Testowanie strony, proces jej tworzenia - można sobie przyspieszyć pisząc _height: 200px, ok. Wypuszczając jednak gotowe dzieło nie dodawaj sobie masy pracy w przyszłości, gdy możesz załatwić problemy w IE za pomocą podlinkowania CSS w komentarzach warunkowych.

Przezroczystość

Ośmiobitowe PNG są alternatywą dla przezroczystych GIFów - IE wspiera je bez przeszkód. IE potrafi wyświetlać także transparentne PNG z kanałem alpha - za pomocą odpowiedniego filtra jesteśmy w stanie go do tego zmusić. Na ten temat powiedziano dużo słów, więc nie będę się dublował.

Jednak ciekawym, a zarazem prostym wyjściem bez obciążania przeglądarki filtrami, jest dithering. Przygotowałem prezentację kolejnych poziomów przezroczystości3:

Wystarczy usunąć białe tło i zapisać jako GIF / PNG8 z przezroczystością i dostajemy w rezultacie maskę, która nałożona na zdjęcie bądź tekst przesłoni go częściowo i stworzy iluzję przezroczystości. Zamiana czarnego na inny kolor oczywiście jest możliwa - wszystko zależy od tego co chcemy uzyskać (pamiętajmy jednak że bazą jest kolor 100% nieprzezroczysty).

Expressions

Expressions są kawałkami JavaScriptu wrzuconymi do CSSa. Dzięki nim można osiągnąć wiele niedostępnych zwyczajnie rezultatów. Na przykład max-width. Użytkownicy IE w większości nie wyłączają JavaScript, więc strona dostosowana za ich pomocą nie powinna sprawiać im problemów. Trzeba jednak pamiętać, że użyte w niewłaściwych własnościach mogą zawiesić przeglądarkę.

Więcej informacji o expressions.

Wyjątki i tipsy

Opisane przykłady rozwiązań prowadzących do w miarę znormalizowanych rezultatów w Internet Explorerze są podstawą do dalszych badań. Wszystkiego nie da się sklasyfikować, a IE posiada masę różnych dziwactw. Większość z nich można wyleczyć przez hasLayout, o części należy poczytać w mądrych publikacjach. Na inne wpadniesz sam.


Tak czy inaczej pozostaje mi życzyć powodzenia przy okiełznywaniu najstraszniejszej przeglądarki świata. ;) Po jakimś czasie wpada się w dobre nawyki i muszę przyznać, że jest to bardzo miłe uczucie. :)

  • 1) Oksymoron. ;)
  • 2) Kod ukradłem stąd, bo żaden ze mnie koder PHP. :)
  • 3) Także plik źródłowy, jeśli chcesz wykorzystać wzorki (należy tylko pozbyć się białego tła).

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 09 maja 2006 o 13:24

Kategorie: CSS, HTML & Semantyka, Internet Explorer

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. Ok, _underscore nie jest błędem parsowania CSS… zapędziłem się, ale i tak polecam komentarze warunkowe. :)

  2. Materiał rewelacja, z pewności parę sztuczek się przyda. Mam nadzieję, że wkrótce o IE7 podobny napiszesz. Zadziwiłeś mnie, że na PHP się nie znasz...

  3. <p>Gdy <strong>nie</strong> przejmujesz się IE5.x pisz:/<p> mały bug ;) nie używasz http://users.skynet.be/mgueury/mozilla/ ? jak mi się dwa zielone światła nie palą to nie updatuję :)

  4. ...no a sam artykuł jak zwykle bomba - i znowu się czegoś dowiedziałem nowego ! :)

  5. na 1 rzut oka blad w kodzie php - nie wyescape'owany cudzyslow po PUBLIC.
    no fajnie fajnie - przydaja sie takie rzeczy. gorzej jak tworzy sie cos, tworzy, odswieza i strona wyglada ZUPELNIE inaczej niz sie spodziewalismy :)
    ogolnie frameworki itp. pisane na IE sa dziwne i trudno sie w nich polapac. np. DotNetNuke - robie sobie modul na div'ach i div, mimo zadnych position'ow wchodzi pod formularz. calosc nie jest wielce skomplikowana, kod czysty. podejrzewam, ze gdzies, ktos nie domknal czegos, ale ulepszyl w css'ie. na szczescie margin-bottom i po krzyku bez wglebiania sie :P

  6. Mała Mi 6 09 maja 2006, 14:31

    ...Takie nieśmiałe pytanie...skoro wiesz, jak pisać strony pod IE, to dlaczego ten blog za cholerę nie chce mi tu poprawnie działać ??

  7. Ok, poprawiłem… jak zwykle przydał się zoom dla wrappera (position: relative sprawiało problem). :) Odśwież stronę bez cache plz.

    Jeszcze muszę zapanować nad szerokością elementów we wpisie (albo komentarzami), żeby na 800x600 nie przemieszczało prawej kolumny pod treść.

    Aha… mówię o IE6.0/win

  8. > ereg( "MSIE", $HTTP_USER_AGENT)

    Dodałbym jeszcze warunek, że w zmiennej HTTP_USER_AGENT nie ma "Opera".

  9. No i pięknie. Gorzej jeśli trafią się dziwactwa, których nikt za nic zrozumieć nie może - a zapewniam, że takie czasami są :-)

    PS. Gdybym nie zauważył tego wpisu via 10przykazań, a potem nie spojrzał na miniblog, to bym się nie domyślił, że Ty coś piszesz, a ja żadnych powiadomień nie dostaję, bo mnie wyrzucono z listy. Za co to było, co? :-)

  10. Nie można dać prologu XML za DOCTYPE. Co to za wynalazek!? Testowałeś to cudo w trybie innym niż text/html/ze/slashami?
    A już największą plamą jest ereg( "MSIE", $HTTP_USER_AGENT):
    * ereg jest stary i dawno został porzucony na rzecz preg (patrz duuuża ramka w manualu)
    * ereg do sprawdzania obecności prostych ciągów tekstowych jest nie na miejscu. false!==strpos()
    * wykrywanie po samym "MSIE" niezbyt działa. Trzeba by dodać conajmniej !Opera
    * wykrywanie po user-agent to i tak wiocha. Przecież wystarczy poszukac xhtml+xml w Accept, bo przecież to idealnie pokrywa się z akceptowniem prologu XML.
    * register_globals jest dla PHPowych cieniasów
    * od dawna w PHP jedyną słuszną jest superglobalna _SERVER zamiast

  11. @Ktos: Też się zdziwiłem nieco, gdy zobaczyłem nowe wpisy, a powiadomień brak. Albo Riddle robił porządki, albo zupełny przypadek. I miejmy nadzieję, że to nie joggerowy bug. :)

    Update: pewnie przypadek, wystarczy spojrzeć na miniblog.

    @Riddle: Żeby nie był to całkowity off-topic, to:

    1. Dzięki za kilka nowych informacji.
    2. Osobiście uważam, że jednak warto nieco stracić na wodotryskach layoutu, aby mieć w pełni czysty kod.
    3. Niestety, IE posiada często gęsto zastanawiające sytuacje, z których nie daje się wybrnąć samym hasLayout. Nauczyło mnie to stosowania w ograniczonej ilości floatów, clearów pod nimi i wymyślnego css-a, a za to użycia position: absolute w razie możliwości.

  12. porneL:
    1. Z uwagami się zgadzam, ale Riddle sam przeca napisał, że nie programuje w PHP i użył kodu z innej strony :-)
    2. Czy przypadkiem nie ucięło trochę Twojego komentarza?

  13. Bardzo ciekawe i przydatne... jak zawsze ;)

  14. Jeśli ktoś posiada lepszy kod do wykrywania (a na pewno istnieje, zwłaszcza po tym co wypisał porneL), to chętnie podmienię w artykule. No i oczywiście nie ja go pisałem. :-)

  15. Czy w ogóle ten prolog XML jest konieczny dla XHTML'a? Bez niego strona i tak się waliduję, dobrze wyświetla, a wszystkich problemów z IE się unika (głównie, gdy nie ma się do dyspozycji PHP).

    Problem, by się pewnie dopiero pojawił, gdyby ktoś chciał dokument przeparsować.

  16. Speedy: Nie wiem na pewno, ale np. jeśli zapiszesz stronę na dysku, to po czym potem przeglądarka ma rozpoznać, w jakiej wersji i w jakim kodowaniu jest ten XML?

  17. "An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol."

    http://www.w3.org/TR/xhtml1/#normative

    W XHTML 1.1 i wyższych prolog XML jest już obowiązkiem, tak samo, jak application/xhtml+xml.

  18. "W XHTML 1.1 i wyższych prolog XML jest już obowiązkiem, tak samo, jak application/xhtml+xml."

    Application/xhtml+xml nie jest obowiązkiem dla XHTML 1.1. W specyfikacji masz SHOULD a nie MUST. :)

    Edit: Czyli możesz, ale ogólnie nie powinieneś używać text/html.

  19. I dokument wysłany jako text/html jest interpretowany jako html ze slashami :-)

  20. @Riddle: W XHTML w wersji 2 się też niewiele zmienia. Znaleziona informacja o prologu to kopia poprzedniczki z drafta poprzedniej wersji, a zalecenia co do mimetype nie są zdefiniowane.

    "Although the spec is not finalized yet, all indications are that XHTML 2.0 must not be served as text/html."

    http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html

    Poza tym, w poniższym linku znajduje się przykład kodu w PHP negocjującego mimetype oraz prolog. IMO linijkę tagiem <xml-stylesheet />
    można wyrzucić.

    http://www.six27.com/christian/properxhtml.php

  21. Dzięki za link. Podmieniłem w poście kod.

  22. mcv:
    "jeśli zapiszesz stronę na dysku, to po czym potem przeglądarka ma rozpoznać, w jakiej wersji i w jakim kodowaniu jest ten XML?"

    Jeśli XML jest kodowany w UTF-8, lub UTF-16, które jest domyślnym kodowaniem dokumentów XML, to deklaracji kodowania w prologu być nie musi.
    Jeśli dokument jest pisany wg standardu XML 1.0, to prolog z deklaracją wersji dokumentu nie jest potrzebny. XML 1.0 jest domyślną wartością.

    Prolog należy zatem stosować, gdy mamy dokument XML 1.1+, lub gdy kodowanie dokumentu jest inne niż uTF-8, lub UTF-16 i nie jest ono podane w inny, nadrzędny jeszcze sposób (np. w nagłówkach HTTP w przypadku www).

    Upraszczając.. jeśli masz zamiar wstawić na stronę prolog w takiej postaci:
    <?xml version="1.0" encoding="utf-8"?>
    to wg specyfikacji równie dobrze możesz sobie go podarować.
    Poleca się jednak umieszczać prolog zawsze.


    Michał Moroz:
    "W XHTML 1.1 i wyższych prolog XML jest już obowiązkiem"

    XHTML został sformułowany w XML 1.0, a w XHTML 1.1 nic się w tym względzie nie zmieniło, więc prolog nie jest potrzebny.


    riddle:
    "Application/xhtml+xml nie jest obowiązkiem dla XHTML 1.1. W specyfikacji masz SHOULD a nie MUST. :)
    Edit: Czyli możesz, ale ogólnie nie powinieneś używać text/html."

    Nie napisałeś raczej nic złego, ale..
    Jeśli ma to być Strictly Conforming XHTML Document, to nie może to być text/html.
    Jeśli dana rekomendacja ma status should, to znaczy, że tak to powinno być robione, ale nie jest to wymagane - w szczególnych okolicznościach dopuszcza się wyjątki.

  23. > Jeśli dana rekomendacja ma status should, to znaczy, że tak to powinno być robione, ale nie jest to wymagane - w szczególnych okolicznościach dopuszcza się wyjątki.

    A w tym przypadku tym wyjątkiem jest serwowanie XHTML przeglądarkom, które go nie obsługują :-)

  24. Co do deklaracji XML to może jak sama nazwa wskazuje warto zajrzeć do specyfikacji XML... A tam znajdziemy takie informacje: jeśli jest to dokument XML 1.0 to _powinno_ (should) używać deklaracji XML a jeśli to jest dokument XML 1.1 to _musimy_ (must) używać deklaracji XML. I nie ma nic do rzeczy co jest napisane w niższej specyfikacji czyli np w specyfikacji XHTML bo to jest tylko implikacja specyfikacji XML. Deklaracja XML to problem well-formed a nie valid, więc sięgnijcie do gramatyki języka XML. Dlatego też każdy język, zdefiniowany dla XML 1.0 może być przedstawiany w XML 1.1 (oczywiście z zachowaniem założeń dla parsera takich jak specyficzne znaki Unicode'owe itp). Zupełnie inną sprawą jest to, że poszczególne specyfikacje najczęściej odwołują się w przykładach do XML 1.0 (z różnych powodów np. z takich, że jak były tworzone to XML 1.1 nie istniał). Zupełnie nie ma się czym sugerować, że odwołania w specyfikacji XHTML 1.0 są w XML 1.0 a w SMIL 2.1 są w XML 1.1 (a najprawdopodobniej w XHTML 2.0 będą i do jednej i do drugiej wersji).

  25. "* { margin: 0; padding: 0; }"

    WTF? Pisałem już o tym, że stosowanie selektora gwiazdkowego to jedna z najgłupszych rzeczy jaką można zrobić. Raz, że jest to kiepskie rozwiązanie z punktu widzenia optymalności kodu (za każdym razem loopujesz się po wszystkich elementach strony) a dwa, że psujesz sobie w ten sposób zachowanie elementów w niektórych przeglądarkach.

    Zatem - wydaje ci się, że coś udało ci się opanować (zachowanie boxów) i nagle wstawiasz jakiś input, który wygląda jak psu z gardła wyjęty.

  26. Piotr Usewicz 26 10 maja 2006, 21:09

    Świetny artykuł. Zawsze dobrze miec sciagawke.

  27. Dzięki Riddle. Nacodzień zajmuję się tworzeniem wizualizacji dla różnych aplikacji webowych (korporacyjnych), a tam wymogiem jest IE (5.5 albo 6, z tym bywa różnie). To mi troszkę ułatwi prace.

  28. Tak z tydzien wczesniej... No, ale okazalo sie, ze moje nowe dzielo nadal pod IE ma pewne hm... "problemy", wiec moze jak bede mniej senny i zapracowany to przeczytam dokladniej. Tymczasem po wstepie i rzuceniu okiem wnioskuje, ze ciekawe i przydatne :)

  29. "Zatem - wydaje ci się, że coś udało ci się opanować (zachowanie boxów) i nagle wstawiasz jakiś input, który wygląda jak psu z gardła wyjęty."
    Wszak Riddle napisał, że POLECA WPISAĆ wszystkie używane elementy z przecinkami, zamiast używać *, ale * działa w większości przeglądarek i jak się komuś nie chce, to niech da *.

    A tak przy okazji tego hasLayout - może ktoś mi wyjaśnić zachowanie pod IE elementów menu tutaj: http://kucyk-89.blog.pl/ ? Bo jak się na niektóre elementy najedzie myszką, to przeskakują, inne przeskakują po kliknięciu, a "zoom: 1" pomogło tylko trochę (skok jest mniejszy). Chyba nie trzeba wyjaśniać, że w innych przeglądarkach (Gecko, Opera 8.53 i 9.0b) działa doskonale.

  30. Mam pytanie: jak pisać bloga w przypadku Opery? Mam problem, bo mam Operę i nie mogę zmieniać koloru i rozmiaru czcionki. Nawiększym jednak problemem jest to, że nie mogę dodawać obrazków. Proszę o pomoc.

  31. KAROLINA 31 26 lutego 2007, 19:41

    (Komentarz zmodyfikowany 27.02.2007 o 00:40)

    Witam, jak usunąc link,który zapisał się w wyszukiwarce Internet Eksplorer na stronie głownej.
    Proszę o odpowiedz.
    Z góry dziekuję

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