»Статьи - Веб-Дизайн - Кросс-браузерный CSS без хаков »https://artwedis.com/page.php?id=246 |
Автор: Отправлено: 03.11.2008 21:13 |
Часто использование хаков (в частности для IE – когда же он умрёт, как браузер?!), ну и для остальных навигатор оправдано и так намного проще. Но случается, что заказчик (ну или просто кому-то само название «хак» не нравится) требует вёрстку без использование хаков. Что тогда делать, неужели придется смириться с некроссбраузерностью под определённые версии браузеров?! Нет, конечно… Конечно же, никакой революции в себе статья не несёт и кто-то из Вас уже делал нечто подобное. Но большинство найдёт здесь хорошие советы, да и освежать знания иногда полезно. Суть идеи заключается в использовании серверного языка PHP для «кроссбраузерности» нашей вёрстки. Конечно же, можно использовать любой другой язык (Perl, Java и т.д.). Итак, перед тэгом <body> в нашем файле помещаем такой код: <?php $sBrowserClass = ""; if (preg_match("/Opera\W*(\d+(:?\.\d+)?)/",@$_SERVER["HTTP_USER_AGENT"], $aMatch)) { $sBrowserClass = "isOpera"; if (@$aMatch[1] && $aMatch[1] < 9) { $sBrowserClass .= " isOpera8"; } } elseif (preg_match("/MSIE\W*(\d+(:?\.\d+)?)/",@$_SERVER["HTTP_USER_AGENT"], $aMatch)) { $sBrowserClass = "isIE"; if (@$aMatch[1] && $aMatch[1] < 7) { $sBrowserClass .= " isIE6"; } } if ($sBrowserClass) { $sBrowserClass = ' class="' . $sBrowserClass . '"'; } ?> <body<?=$sBrowserClass?>> Теперь для Internet Explorer 7 тэг <body> будет выглядеть следующим образом: <body class="isIE">. Для его более старой версии IE6 body будет выглядеть как: <body class="isIE isIE6"> Для Opera9 и выше будет выглядеть так: <body class="isOpera"> Для Opera ниже 9-й версии тэг body будет выглядеть так: <body class="isOpera isOpera8"> Для остальных браузеров тег будет выглядеть просто: <body>. Список можно продолжить или заменить пункты на названия «непокорных» браузеров. Вот так теперь должен выглядеть наш css-файл: #top_menu { margin: 0px 5px; overflow: hidden; background: #DAE0D2 url("/images/m_bg.gif") repeat-x bottom; padding-bottom: 1px; display: block; } .isIE #top_menu { height: 28px; } .isIE6 #top_menu { height: 30px; overflow: auto; } .isOpera #top_menu { margin-bottom: 6px; } Теперь я думаю всем понятна структура этого CSS-файла. Порядок работы Для начала пишем полную версию CSS-файла и делаем его отладку, например на последней версии Mozilla Firefox; Затем пишем дополнения/изменения отдельных для Opera, Safari или Internet Explorer; Удобство данного способа заключается в том, что Вам нет необходимости использовать хаки, поэтому, с большой долей вероятности код будет правильно работать и в более поздних версиях браузеров. Так же намного удобнее будет вносить какие-либо изменения в сам css-файл, так как все стили лежат рядом с друг другом. Незначительное увеличение CSS-файла никак не повлияет на общую скорость загрузки сайта, т.к. эти дополнения составляют, как правило, 5-10% от исходного размера CSS-файла. А иногда и того меньше. Если же Вы по каким-либо причинам не хотите использовать php: не знаете, лень и т.д., или же просто напросто Ваш сервер не поддерживает их, можно воспользоваться таким способом: <!--[if gte IE 7]><body class="isIE"><![endif]--> <!--[if lt IE 7]><body class="isIE isIE6"><![endif]--> <!--[if !IE]>--><body><!--<![endif]--> Комментарии #1 Ivan 2008-10-1119:37:58 Цитата: в частности для IE – когда же он умрёт, как браузер?! эту цитату нужно сделать своей подписью ))) автору 5+ RSS лента комментариев этой записи. |