Не нарушен ли стандарт CSS? - PullRequest
3 голосов
/ 09 апреля 2009

Разные браузеры выбирают рендеринг CSS по своему предпочтению, какой смысл иметь стандарт?

Простые вещи, такие как создание гибкой 3-колоночной разметки, которая работает во всех браузерах, могут испытать разочарование. Как вы справляетесь с этим или делаете кросс-браузерную совместимую разработку не такой болезненной?

Ответы [ 9 ]

7 голосов
/ 09 апреля 2009

Как всегда, за всем этим стоит причина.

Стандарт не нарушен (стандарт не может быть нарушен), просто некоторые браузеры, такие как IE, не придерживаются его полностью.

Это главным образом потому, что IE разрабатывался до того, как был создан какой-либо стандарт, и в то время это был лучший браузер с почти нулевым конкурентом (я читал, что netscape был другим вариантом и что он намного хуже, чем IE).

Затем люди поняли, что нужен стандарт, и создали его, очевидно, без учета какого-либо проприетарного кода и функций IE. IE был вынужден выбрать обратную совместимость с предыдущими версиями или придерживаться этого нового «стандарта», они абсолютно управляли рынком браузеров, поэтому выбор был очевиден.

В новых версиях IE старался быть более совместимым со стандартами, и они утверждают, что IE8 успешно проходит тест ACID2, поэтому стандартная утопия (медленно) становится реальностью.

А пока проверьте этот сайт -> quirksmode , который содержит полезную информацию о разных браузерах. Также попробуйте проверить любые статьи о "модели коробки IE" онлайн, и держитесь подальше от заполнения в IE. Если вы также используете стороннюю библиотеку javascript (JQuery, Prototype, Dojo), у вас все будет в порядке (или так хорошо, как любой из нас).

Привет.

4 голосов
/ 09 апреля 2009

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

Когда вы пытаетесь создать стандарт до реализации, у вас есть несколько проблем:

  • Долгая задержка до появления полезных реализаций. Ни у кого нет работающей реализации, на которую можно ссылаться, и, поскольку никто не использует какие-либо функции стандарта (поскольку он еще не существует), существует небольшой стимул для его реализации. Проблема типа курица-яйцо.
  • Потенциал для стандартов, которые на самом деле не могут быть реализованы. Кто знает наверняка, пока кто-нибудь не попробует? Стандарт HLA был хорошим примером этого, и в тот момент Министерство обороны должно было написать меморандум о «интерпретациях», который попытался установить стандарт де-факто, замаскировав некоторые ошибки в настоящем стандарте.
  • Потенциал для стандартов, которые не служат никакой практической необходимости. Люди на самом деле хотят этого? Посмотрите пример на XForms, который попал в странную нишу на стороне сервера. Или я не могу вспомнить никого из тех, кого встречал, которые посчитали, что блочная модель CSS «ширина без учета отступов» интуитивно понятна.
  • Невозможность для реализаторов стандарта, чтобы отличить свою продукцию от своих конкурентов, в результате чего упорного желания порвать со стандартом в практических или запирании в-поощрении путей. Смотрите пример на CORBA.

Я думаю, что W3C научился этому нелегко в последние годы. Некоторые из наиболее заметных для конечных пользователей инноваций пришли из новой войны браузеров: примерами могут быть HTML5 (несколько поставщиков), canvas (Apple), XMLHttpRequest (команда Microsoft Outlook Web Access), диапазон ввода (встроенный в Safari RSS Reader) и видеоэлемент (Firefox) - они пришли с запатентованного уровня вверх, а не с башни стандартов вниз. И эти новые «стандарты» были подделаны, глядя на эти прошлые отдельные реализации (Firefox скопировал Microsoft в основном для XMLHttpRequest и т. Д.), А не каким-то широко раскрытым аналитическим центром, размышляющим о будущем. (ISAPI, API плагинов Netscape и SQL - все это примеры стандартов снизу вверх, в которых критические изменения выполняются постепенно, шаг за шагом.)

Стандарт должен быть наименьшим общим знаменателем, сглаживающим основные различия в реализациях, языком пиджина, который работает во всех из них, а не перечислением предписывающих правил в стиле Роберта Лоута о языке или системе, потому что тогда вы в итоге получаются правила, которые не всегда имеют смысл, или применяются нереалистичные идеалы (например, попытка применить правила грамматики на основе латинского языка к языку на германском языке, например попытка применить правила грамматики на основе XML к языку на основе SGML ). Ну что ж, это то, что у нас есть.

Вероятно, самый большой недостаток в стандарте CSS на данный момент заключается в том, что действительно нет хорошего способа указать, что страница была написана в соответствии с определенной версией стандарта. Мы можем указать DOCTYPE для наших документов HTML, почему я не могу указать, что документ был написан для CSS 2.1? Это станет еще важнее, когда мы начнем добавлять все новые и новые причудливые функции в CSS, которые влияют на фактическое содержимое страницы, например CSS: before псевдоэлементы. В будущей версии стандарта однажды будут возникать ошибки, которые могут нарушить совместимость, и было бы неплохо позволить автору документа запрашивать определенное поведение, а не пытаться выяснить намерение браузеров.

С другой стороны, теперь, когда IE8 и IE7 вышли, вещи на самом деле не так плохи, как, скажем, в 2005 году. Конкретная таблица стилей IE6, снабженная условными комментариями, действительно может пройти долгий путь к созданию Возможна реализация на основе CSS / стандартов. Другой совет - использовать Google, чтобы взять пример макета с 3 колонками, и надеяться, что кто-то другой выполнил большую часть проблем для вас.

Создание веб-сайта, совместимого с различными браузерами, сложно, стандартно или не стандартно. Вы можете облегчить себе задачу, если согласитесь с тем, что различные браузеры отображают ваш сайт. Не бойтесь каких-либо проприетарных расширений (для пользователей, не являющихся IE, закругленные углы вполне допустимы), но есть запасной вариант, когда их не существует (например, закругленные углы не существуют). критически важно для использования сайта), и пусть ваши пользователи выбирают, как они хотели бы использовать ваш контент.

4 голосов
/ 09 апреля 2009

Один из важных моментов, связанных со стандартами, заключается в том, чтобы не допустить нас в новую войну браузеров. Вы знаете тот, где Netscape и Microsoft продолжали добавлять как можно больше проприетарных функций в браузеры. Кросс-браузерная разработка на сегодняшний день более легкая, чем тогда ...

Еще одна веская причина наличия стандартов в том, что вы знаете, куда пойдут будущие версии браузеров. Следование стандартам - лучший прогноз того, как будут работать будущие браузеры.

В этом вопросе вы можете найти множество советов для разных браузеров: Как добиться согласованного макета во всех браузерах?

2 голосов
/ 09 апреля 2009

Другие ответы на этот вопрос в значительной степени охватывают все вопросы о том, почему CSS не является проблемой, но что касается того, как I справляется с кросс-браузерными трудностями, обычно это примерно за 4 шага. :

  1. Дизайн сайта с использованием Firefox, так как он имеет множество полезных расширений (особенно Firebug, который сообщает вам, какие правила CSS применяются, которые переопределяются другими правилами и т. Д.)
  2. Проверьте сайт быстро в Safari и Opera, чтобы убедиться, что в дизайне нет недостатков. Обычно это будет нормально работать как - благодаря веб-стандарту CSS - эти браузеры отображают веб-страницы практически одинаковыми способами
  3. Просмотр дизайна в ie7 и использование фильтра * + html css для исправления ошибок
  4. Просмотр проекта в ie6 и использование * html css фильтра для исправления ошибок

для выполнения пунктов 3 и 4 лет было бы что-то вроде этого

.box {css rules}
*+html .box {css rules to override in ie7}
* html .box {css rules to override in ie6}

В конце всего этого у вас останется действующий CSS, работающий в основных браузерах.

Надеюсь, это поможет

* edit - забыл добавить, что ietester - отличная программа, которая позволяет устанавливать несколько версий, например, на Windows XP или Vista: http://www.my -debugbar.com / wiki / IETester / HomePage

1 голос
/ 22 апреля 2009

Да CSS не работает - хотя семантически вы не можете назвать его «нарушенным стандартом». Но вопрос на самом деле не в семантике.

Опыт оказания помощи в определении стандарта UNICODE в конце 80-х и начале 90-х годов был хорошей тренировкой для изучения того, как правильно писать стандарт. Я столько раз закатывал глаза, что написал документацию по стандартам, которая оставляет огромные дыры в определениях, которые приводят к тому, что браузеры интерпретируют вещи по-разному. Существует много взаимоисключающих частей стандарта CSS, даже в версии 3, которые возникли, потому что мы все еще должны поддерживать совместимость с пре-CSS1.

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

  1. Модель Box - в ней все еще есть огромные дыры, даже когда подходит CSS 3.
  2. Расчеты «специфичность». «специфичность» была реализована для исправления пробела в стандарте CSS, а затем для того, чтобы попытаться поддержать постоянно противоречащие правила. Если таблицы стилей действительно каскадные, то «специфичность» должна быть отменена. До тех пор, пока это не CSS, он должен называться SWISMCCS (иногда «когда это подходит мне»). Конечно, чтобы отменить эту функцию, все остающиеся проблемы со свободным языком в стандартах должны быть исправлены - что в действительности означает, что это никогда не произойдет.
  3. Соглашения об именах для классов, селекторов и т. Д. Позволяют использовать символы, которые являются проблемой для динамической обработки. Наиболее очевидным является использование символа «-» в именах. Если вы не понимаете, почему я призываю вас читать и разбирать компиляторы байт-кода и синтаксический анализ языка компилятора.

Таким образом, ответ заключается в том, что стандарт CSS не нарушен, предпосылка обоснована, но реализация документации по стандартам (не браузеры, документация) показывает, как завоевание комитетом редко дает вам что-то полностью пригодное для цели. Я полагаю, это произошло потому, что CSS не был создан для обученных программистов, он был создан для веб-дизайнеров - странная порода, которая на самом деле не программисты и не настоящие дизайнеры. Есть настоящие веб-разработчики, которые отличаются друг от друга, но тратят меньше времени на красивую графику.

ИМХО: CSS не работает. С другой стороны, альтернативы намного хуже. Лучше дьявол-мы-знаем. Роль на замену HTML.

1 голос
/ 09 апреля 2009

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

Если бы не было абсолютно никаких стандартов для соответствия, то не было бы и Всемирной паутины. Подобно тому, как эгалитарное общество является недостижимым идеалом, все же стремление к этому недостижимому идеалу привело к огромному социальному прогрессу на протяжении десятилетий, также как и рекомендации W3C и открытые веб-стандарты привели к ощутимому прогрессу в течение всей жизни сети. Без таких стандартов, как CSS, совместимость, от которой зависит процветание сети, не существовала бы.

1 голос
/ 09 апреля 2009

Мне кажется, что вы только начинаете с CSS. Поскольку браузеры не полностью соблюдают спецификацию CSS, существует множество надежных оснований, которые вы можете использовать с уверенностью. Эта безопасная площадка в настоящее время намного больше, чем десять лет назад, когда программирование для веб-сайтов было поистине королевской болью. И новые версии браузеров все больше и больше придерживаются спецификации, и именно поэтому стандарт имеет значение. Это своего рода теоретический идеал, которого браузеры, вероятно, никогда не достигнут в полной мере, но даже 90–95 процентов из них весьма полезны в реальном мире.

Я также хотел бы, чтобы в IE была лучшая реализация CSS, но как только вы изучите несколько странных вещей, вы сможете кодировать большинство обычных макетов без серьезных сбоев. Наиболее распространенные макеты также обсуждались до смерти на различных форумах по CSS в Интернете, и всегда есть какое-то хорошее решение, так что вам не придется придумывать его самостоятельно.

Стандарт CSS - ИМХО не проблема [по крайней мере, в смысле Вашего вопроса], проблема - реальность рынка браузеров и рынка программного обеспечения в целом. Что касается разочарования, оно в основном должно исчезнуть после того, как вы приобретете некоторый опыт. Ограничения всегда будут, но есть много безопасного места.

1 голос
/ 09 апреля 2009

Стандарт открыт, так что браузеры, которые не подтверждают стандарт, могут смотреть и учиться. Стандарт важен, потому что это единственный способ, с помощью которого вы можете НАДЕЖДУ создать веб-страницу, которая будет правильно отображаться на всех страницах.

Также помните, что разработанный стандарт никогда не бывает в прошлом, он только в будущем. Если в прошлом некоторые браузеры не подтверждали стандарт, это не значит, что у нас не должно быть стандарта.

Фактически, стандарт появился на свет, потому что все браузеры делали свои собственные штуки, и тогда возникла потребность в стандарте.

Если вы кодируете стандарт, браузеры подтвердят его.

Есть надежда приятель!

1 голос
/ 09 апреля 2009

Стандарт имеет некоторые недостатки. Это также довольно сложная вещь для реализации. Проблема в реализации более чем стандартная.

Используйте такие вещи, как YUI, где многие умные люди проделали большую тяжелую работу, чтобы заставить эти вещи работать в различных браузерах.

...