webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> kursy online >> kurs css >> Lekcja 8

Hacki, czyli jak ominąć niedoskonałości przeglądarek

autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2007-10-16

szukaj: hacki hacki kurs css kurs css

Jak z pewnością spostrzegłeś podczas kursu wielokrotnie pisałem, że tego nie obsługuje jedna przeglądarka, a tego inna. Najczęściej jednak problemy stwarza MSIE, dlatego głównie na nim skupimy się podczas tej lekcji. Hacki najczęściej wykorzystują dziurę w jakiejś przeglądarce. Zobacz przykłady:

Ukrywanie fragmentów kodu CSS dla MSIE:

/* w pliku css */
table {
width: 100px;
voice-family: "\"}\""; // 1
voice-family: inherit; // 2
width: 200px; } // 3

Opis:

/* tak to czyta MSIE: */
table {
width: 100px;
voice-family: "\"}\""; // i już kończy, dalej nie będzie sprawdzał tej reguły - skoczy do następnej
voice-family: inherit;
width: 200px; }

/* a nowoczesne przeglądarki: */
table {
width: 100px;
voice-family: "}"; // nieprawidłowa wartośc, ale czyta dalej, bo to przecież nie koniec świata:-)
voice-family: inherit;
width: 200px; }

Chyba wszystko jasne. Efekt jest bardzo ciekawy. Choć w przykładzie może się wydawać, że daje niewiele możliwości, to można dzięki niemu czasem rozwiązać pewne problemy. Ja osobiście rzadko używam tego hacka, gdyż częściej zdarza mi się sytuacja, kiedy to MSIE wymaga więcej kodu niż nowoczesne przeglądarki. A teraz kolejny ciekawy efekt:

table {
właściwości: wartości czytane przez wszystkie przeglądarki;
}

/*
Komentarz wieloliniowy, jednak przez dodanie '\' na końcu MSIE przeoczy
koniec i będzie uważał cały pozostały kod za komentarz
\*/
table {
właściwości: czytane tylko przez nowsze przeglądarki;
}

/* Komentarz wieloliniowy zamknięty normalnie
MSIE będzie uważał zamknięcie tego komentarza jako zamknięcie poprzedniego,
a otwierające '\*' zignoruje */

Oczywiście można - używając hacków - tworzyć reguły dla innych selektorów niż 'table'. Zasada działania tego hacku jest podobna, gdyż ukrywa się fragmenty kodu dla MSIE. Z tą różnicą, że poprzedniego używa się do ukrywania pojedynczych właściwości, a tego do całych reguł.

Osobny arkusz stylów dla MSIE:

No już probowałeś wszystkiego - prośbą, groźbą - a on nic! To "jak nie młotem, to pałą" i daj mu osobny plik CSS

...
<head>
<link rel="stylesheet" href="style-normal.css" type="text/css" />
<!-- [if IE]> // 1
<style type="text/css"> // 2
table { width: 100px; } // 2
</style> // 2
<![endif] --> // 3
</head>
...

Ten sposób jest używany przez mnie najczęściej, ponieważ daje mi to, czego ja najbardziej chcę - opis właściwości tylko dla MSIE. Teraz wróć do lekcji "Pozycjonowanie - gotowa strona" i dodaj tam odpowiednie linie kodu [HTML i CSS], aby sprawić, by strona w Operze/FF była "elastyczna", a w MSIE prezentowała się nieźle.

Osobny arkusz stylów, ale za pomocą JS

...
<head>
<script type="text/javaScript"> // 1
if (-1 != navigator.userAgent.indexOf("MSIE")) { // 2
document.write(''); } // 3
</script> // 1
</head>
...

Opis:

Można oczywiście dopisać tym sposobem tylko fragment kodu - jedną regułę, a można wstawić cały plik. Zasada jest taka sama jak w przykładzie powyżej - i efekt tez identyczny. Uwaga! Niektórzy mają wyłączoną obsługę JS, przez co ten sposób wydaje się być gorszy. Jednak jeśli ktoś używa MSIE, to raczej nie wyłącza obsługi JS [to domena bardziej doświadczonych internautów, kórzy używają lepszych programów niż MSIE].

Patryk 'yarpo' Jar

Zagadnienia poruszane w tej części kursu:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org