Проблемы кросс-браузерной совместимости - PullRequest
8 голосов
/ 29 ноября 2010

Я вижу, что у многих людей возникают проблемы с совместимостью между браузерами.

Мой вопрос: почему браузеры по-разному отображают html, css или js?

Это из-за DOM?Бокс-модель?

Почему возникают проблемы с совместимостью между браузерами при наличии стандартов от W3C и т. Д.

Существуют ли различия в отображении основных интернет-браузеровHTML-контент?Почему Internet Explorer, Firefox (Mozilla), Opera могут отображать один и тот же контент по-разному?

Что следует помнить при создании веб-сайта, совместимого с различными браузерами?

Ответы [ 5 ]

5 голосов
/ 29 ноября 2010

Существует множество причин или несовместимости:

  • Спецификации часто пишутся в ответ на разработку соответствующих компонентов определенными поставщиками,
  • Спецификациииногда могут быть плохо написаны, иметь двусмысленность или не были написаны в ожидании конкретных случаев конечного использования.
  • Производители браузеров иногда игнорируют спецификацию по своим собственным причинам.

Дополнительные факторы:

  • Многие из этих вещей сложно реализовать, пусть и правильно реализовать,
  • Это также должно быть реализовано для обработки плохо сформированного HTML, обратной совместимости и т. Д. Иногда производители браузеровпожертвуйте «правильностью» ради «совместимости»,
  • История, политика и личности.
4 голосов
/ 29 ноября 2010

Я уверен, что кто-то ответит на это намного лучше, но вот начало:

Да, существуют стандарты, которые должны соблюдаться в отношении CSS-рендеринга. Проблема в том, что некоторые браузерные редакторы ( кашель Microsoft кашель ) не считают приоритетом правильную реализацию спецификаций (или даже полностью, если на то пошло). Даже когда над механизмом компоновки ведется работа по обеспечению совместимости, он может получить довольно неприятные сведения о том, как правильно отображать объекты при смешивании различных свойств и элементов CSS (см., Например, тест ACID http://en.wikipedia.org/wiki/Acid3)

Чтобы иметь кросс-браузерный веб-сайт, вам, в основном, необходимо проверить правильность отображения всех страниц вашего веб-сайта в браузерах, которые используют ваши посетители (или которые вы поддерживаете). В этом могут помочь различные инструменты, такие как Selenium (seleniumhq.org).

Вы в основном должны решить, что вы собираетесь делать

  • дизайн для наименьшего общего знаменателя (если это IE6, вы мало что сможете сделать)
  • дизайн с использованием валидации CSS и использованием хаков (например, clearfix) для исправления ошибочного поведения в определенных браузерах
  • решает не поддерживать определенные браузеры (IE6 является основным кандидатом)
  • анализировать браузер и соответственно адаптировать дисплей (НЕ предпочтительный способ сделать это)

Что касается различий в манипулировании DOM, библиотеки, такие как jQuery, очень помогают, так как скрывают от вас различия в реализации.

Для справки, неплохо бы протестировать ваш сайт, по крайней мере, в следующем:

  • Браузер на основе WebKit (Chrome, Safari)
  • Браузер на базе Gecko (Firefox)
  • IE
  • Opera
3 голосов
/ 29 ноября 2010

Это последствия Великой браузерной войны.Теперь Netscape Communications лежит в руинах, но причудливые оппоненты, призванные превзойти друг друга, все еще остаются в кодовой базе браузеров, а люди все еще находятся в команде разработчиков.Подумайте о просмотре лекции Крокфорда , в которой он освещает тему.(вы захотите сохранить файл вместо потоковой передачи)

2 голосов
/ 29 ноября 2010

Все, что сказал Хэмиш, плюс еще одна важная проблема, на которую он ссылался, это то, как браузеры обрабатывают некорректный HTML. Например, во времена IE4 / NS4 элемент был очень проблематичным. Если вы не закрыли тег, IE4 закроет его для вас. Netscape 4 будет молча игнорировать таблицу.

Это все еще верно сегодня, когда один браузер исправит неправильную разметку иначе, чем другой. Да, разметка должна быть исправлена, но браузеры сделают все возможное, чтобы сделать что-то.

2 голосов
/ 29 ноября 2010

Стандарт определяет, как HTML / CSS-разметка должна быть визуализированной в , отображаемой как визуальные элементы. Он не определяет, как рендеринг должен работать конкретно. Много разных людей и компаний создали разные способы визуальной разметки. Поскольку рендеринг HTML - чрезвычайно сложная задача, конечно, они не все сходятся в одном и том же решении. Все движки рендеринга нацелены на одну и ту же цель, но часто спецификации достаточно расплывчаты, чтобы учесть небольшие различия (будь то просто пиксельный уровень), и ошибки также неизбежны.

Добавьте к этому, что в те времена поставщики браузеров меньше заботились о стандартах, а больше о том, чтобы быстро завоевать долю рынка, и что некоторые компании очень медленно обращались к стандартам (вы знаете, кто вы).

В конце, спецификации, которые являются довольно сложными, и браузеры, которые являются еще более сложными, написаны многими разными людьми ; вы не можете ожидать абсолютного совершенства в результате этого процесса. И совершенство также не является целью HTML; он должен быть простым, независимым от поставщика и платформы языком разметки для представления информации на различных устройствах, что он делает замечательно хорошо. Если вам нужны превосходные по пикселям результаты, вам необходимо использовать технологию, которая должна была обеспечить это, например Adobe Flash (которая не зависит ни от платформы, ни от поставщика, ни от простого).

Попытайтесь взглянуть на это с наполовину полной точки зрения: тысячи разных людей написали миллионы строк кода, выполняя совершенно разные вещи на разных платформах с разными целями и задачами, и все же, в конце концов, все отрисовывают HTML-разметка почти идентична, зачастую с небольшими, практически несущественными отличиями. Конечно, в каждом движке есть слабые места, и если вам удастся поразить их все сразу, ваш сайт будет ломаться во всех браузерах по-разному. Но этого можно избежать с небольшим опытом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...