Как писать кросс-браузерный код

2008/6/28 15:57 9 cross browser

После того, как вылизана последняя строчка функционального кода проекта, начинается дизайн. Точнее, начинаются танцы с бубном - ибо этот самый дизайн он многолик и непредсказуемо изменчив, если рассматривать его через разные браузеры. Достижение кросс-браузерности - очень трудоемкая и тяжелая в плане крепости психики работа, этой теме посвящены сотни статей, написаны сотни хаков для стилевых таблиц, но из этой троицы - семейства Mozilla, Opera и Internet Explorer хоть один, да доставит несколько неприятных часов при отладке сверстанного и утвержденного макета дизйна. «И в Safari чтобы проверили ...» добавляет свои пять копеек арт-директор. Ага, щаз, только сначала застрелюсь.

Тем не менее есть способ сэкономить огромное количество впустую потраченного времени, чур не плеваться: писать код правильно! Далее - краткий итог статьи How to get Cross Browser Compatibility Every Time - 10 правил кроссбраузерной верстки:

  1. При верстке используем strict doctype и standards-compliant HTML/CSS
  2. Начиная писать css-правила, обнуляйте дефолтные значения (приём, известный как reset)
  3. Используйте -moz-opacity:0.99 в текстовых элементах для Firefox, и text-shadow: #000 0 0 0 в Safari
  4. Никогда не переопределяйте размер изображений средствами CSS или HTML, используйте подготовленные картинки с нужными размерами
  5. Сразу проверяйте, как отображаются выбранные шрифты во всех браузерах. Не используйте Lucida
  6. Указывайте размер шрифтов, используя % и em
  7. Все плавающие слои должны иметь указания display:inline и overflow:hidden
  8. К статичным блокам долно быть применено overflow:auto и использован триггер hasLayout (что это такое - на хабре)
  9. Не используйте новые селекторы из спецификации CSS3
  10. Не используйте прозрачные PNG без специального фильтра для альфа прозрачности (.htc или IE7 например)
Комментарии:

2008/7/4 9:55
Всем хорош strict, но мне не нравится одна вещь. Может, подскажете, как решить.

Приведу пример CSS:
#text {}
#text p {}

При transitional, весь текст внутри тегов , если они находятся внутри id="text", будет брать стиль из #text p {}.

При установке strict нужно к каждому добавлять class="", что несколько раздражает.

Например, я пишу текст, потом подготавливаю его для верстки через typograf.ru, а потом мне нужно ручками вбивать class в каждый абзац.

Реально ли как-то избежать этой ручной работы с добавлением класса в каждый абзац при использовании strict?

2008/7/4 9:58
Имелось в виду:
При transitional, весь текст внутри тегов p…

2008/7/4 17:42
kikaha

kikaha

ну, если вопрос стоит именно так: есть объемный отформатированный текст, к каждому абзацу которого необходимо добавить какое-то свойство, то быстрых и простых вариантов вижу 2.

  1. jQuery. пишем класс .someclass , подключаем библиотеку и в заголовке страницы конфигурируем:
    $("#text p").addClass("someclass");
  2. то же самое без скриптов, если документ формируется запросом к базе - добавляем регулярное выражение:
    $entry = str_replace ('p', 'p class="someclass"', $entry);

2008/7/4 17:52
kikaha

kikaha
ну вообще понятно же, что эти рекомендации - супер консервативные, чтобы железобетонно все работало...
просто начиная проект, определяем для себя - что важнее: наши фичи или 100% кросс-браузерность

2008/7/7 11:7
Честно признаться, это был единственный момент, который заставил меня перейти от strict к transitional.

К сожалению, предложенные вами варианты на данный момент мне не подходят хотя бы потому, что я совсем не разбираюсь в скриптах :)

Но за информацию спасибо.

2008/7/27 20:33
kikaha

kikaha
кстати в тему - новый легкий фикс для прозрачного .png для IE6
Добавить комментарий: