Обычно, когда я просматриваю Интернет, я обнаруживаю, что люди обычно используют CSS-хаки, чтобы их веб-сайт выглядел одинаково во всех браузерах. Лично я обнаружил, что поиск всех этих хаков и их тестирование занимает довольно много времени; каждое вносимое вами изменение необходимо тестировать в более чем 4 браузерах, чтобы убедиться, что оно ничего не сломало.
Около года назад я поискал в Интернете информацию о том, что используют другие крупные сайты (Yahoo, Google, BBC и т. д.), И обнаружил, что большинство из них выполняют определенную форму обнаружения браузером (JS, операторы if в HTML, на основе сервера). Я тоже начал это делать. Почти на всех сайтах, над которыми я работал в последнее время, я использую jQuery, поэтому использую встроенное обнаружение браузера.
Есть ли причина, по которой вы используете или не пользуетесь одним из них?






Проблема в том, что у вас действительно есть только один шанс на css (поскольку это в значительной степени статический контент на клиенте) ... вы не можете (легко) адаптировать его на лету на клиенте - так что для тех, кто сложно несовместимых случаев (а их слишком много), обнаружение, к сожалению, лучший путь. Я не думаю, что это скоро изменится.
С javascript вы часто можете избежать большей части этой боли с помощью библиотек, таких как (как вы утверждаете) jQuery, и проверки поддержки функциональность, а не определения конкретного браузера (большую часть времени). В некоторых случаях вам необходимо точно знать (например, коробчатая модель).
Что ж, взломы выполняются быстрее для браузера, но обнаружение браузера обеспечивает лучшую читаемость вашего CSS, если вы правильно его структурируете. Если вы можете сделать обнаружение браузера и в то же время можете совместно использовать CSS между браузерами и иметь только разные CSS в отдельных файлах или что-то еще, тогда я бы использовал обнаружение браузера - так как это то, что новичок может понять, где взламывает CSS трудно понять, если ты их не знаешь
Я предпочитаю использовать обнаружение браузера и помещать независимый от браузера CSS в отдельный файл.
Однако лучшее решение - найти CSS, который по умолчанию является кросс-совместимым, и просто использовать его.
Есть третий вариант:
Сведите к минимуму или исключите необходимость обнаружения браузера и взлома CSS.
Я стараюсь использовать такие вещи, как плагины jQuery, которые позаботятся о любых различиях в браузерах за вас (для виджетов и т.п.). Это не заботится обо всем, но делает многое и делегирует усилия по поддержке нескольких браузеров тому, кто потратил и потратит на это гораздо больше усилий, чем вы можете себе позволить или хотите.
После этого я следую этим принципам:
После этого я делю браузеры на уровни:
1-го уровня:
Мой сайт должен работает над этим.
Уровень 2:
Мой сайт должен работает над этим. Это может обидеть некоторых людей, но, честно говоря, рыночная доля этих браузеров настолько мала, что они не так важны, как Firefox 3 или IE7.
Уровень 3:
Для работы над ними будут прилагаться минимальные усилия, если это, например, не является требованием компании. IE6 - кошмар, но его доля рынка по состоянию на декабрь составлял 20% и быстро падал. Кроме того, существуют серьезные проблемы безопасности (например, на финансовых веб-сайтах), чтобы отговорить или даже запретить использование IE6, например, на таких сайтах, как Paypal заблокировал IE6 и Google говорит пользователям отказаться от IE6.
Использование IE6, вероятно, намного превышает 20% (за исключением посетителей w3schools). Многие люди никогда не обновляют Windows, а просто используют IE в комплекте с их операционной системой. Поэтому я думаю, что процент использования IE6 должен быть примерно равен доле рынка Windows XP.
Примерно год назад Microsoft принудительно обновила IE7 на XP infoworld.com/archives/emailPrint.jsp?R=printThis&A=/…
Да, я знаю это. Я говорил о людях, которые не обновляют все, включая автообновление. Их довольно много. Они будут придерживаться IE6, пока у них Windows XP. Думаю, нам придется подождать, пока Windows 7 станет таким же обычным явлением, как XP, прежде чем мы сможем полностью отказаться от поддержки IE6.
К сожалению, крупные корпорации (такие как самый важный клиент моей компании) очень часто придерживаются политики «только IE6». Кроме того, использование «минимального CSS» похоже на использование наименьшего общего знаменателя, который снижает удобство работы пользователя по очевидным причинам. Вместо этого я предпочитаю иметь "запасной" механизм.
@Darryl: Я уверен, что можно сотрудничать с вашими дизайнерами, чтобы дизайн не требовал уродливых приемов и при этом выглядел красиво. Я имею в виду, что мы это делаем, и этот подход обычно работает для нас.
@DrJokepu: да, это наименьший общий знаменатель, но фактически есть ничего такого, который вы не можете сделать в IE6, что вы можете сделать в современном браузере. Вопрос в том, что как вы это делаете, поэтому я предлагаю такие вещи, как макет таблицы для сложного параллельного макета (максимальная совместимость).
@DrJokepu Дизайн, с которым я работал в то время, когда я задал этот вопрос, был уже готов, и каждое небольшое изменение, которое я хотел внести, даже те, которые касались удобства использования, встречалось с большим сопротивлением.
@cletus, не могли бы вы реорганизовать свои уровни с учетом текущих рыночных долей браузеров и тенденций? Смотрите здесь: en.wikipedia.org/wiki/Usage_share_of_web_browsers. Chrome и Safari значительно увеличили количество пользователей, в то время как Explorer и Firefox быстро теряют пользователей.
Is there a reason you use or don't use either of these?
Да. Обнаружение браузера на стороне клиента прерывается, если отключен JavaScript, и может некорректно работать с будущими версиями браузера. Последняя причина также верна для хаков CSS. Обнаружение браузера на стороне сервера прерывается, если пользователь явно пытается его нарушить, но это все еще может быть жизнеспособной альтернативой.
Что я бы порекомендовал:
Убедитесь, что ваш код работает в браузерах, совместимых со стандартами, т.е. разработайте один или два из них, а затем проверьте browsershots.org. Скорее всего, удастся реализовать желаемый результат во всех из них с помощью одной таблицы стилей.
Затем есть IE. Если есть только несколько проблем, вы можете пойти с хаком CSS. В противном случае используйте условные комментарии.
Редактировать:
Если мне также нужно поддерживать старые браузеры, я обычно иду по пути постепенной деградации: я просто позволяю им показывать чистый html с базовой таблицей стилей (размеры шрифтов, цвета, ...). Все навороты будут скрыты правилом @import.
К сожалению, все сайты, которые я разрабатываю, должны полностью работать во всех браузерах, поэтому мне обычно требуется много хаков CSS и много-многочасовая настройка.
@Darryl: добавил кое-что о поддержке устаревших версий; по моему опыту, нет необходимости в этом тидлинге, если это не мешает ...
+1 Часто это наиболее реалистичный подход. Вы можете пройти долгий путь с единой таблицей стилей, охватывающей все текущие браузеры. Часто -1 поколение тоже работает нормально. На самом деле самая большая проблема - это IE6-. Иногда вы также можете охватить это в своей единственной таблице стилей, иначе используйте условные комментарии.
«Все сайты, которые я разрабатываю, должны полностью работать во всех браузерах» - чушь. Вы не тестируете в IE 2 или Netscape 4, потому что заставить сайт работать в них так же, как он работает в новых браузерах, потребует очень много времени, а их использует не так много людей, чтобы это стоило дополнительных усилий. В какой-то момент это будет верно и для IE 6.
Обычно мне нравится иметь таблицу стилей для браузеров, соответствующих стандартам, таких как Firefox и Safari, а затем использовать условные комментарии для обнаружения Internet Explorer и предоставления ему дополнительного файла CSS, содержащего специфичные для IE исправления и переопределения.
Personally, I have found this to be quite time consuming to find all of these hacks and test them; each change you make you have to test in 4+ browsers to make sure it didn't break anything else.
Вам не нужно тестировать «правильные» хаки CSS в каждом браузере.
Идея состоит в том, что вы пишете код, соответствующий стандартам, а затем добавляете определенные хаки для нацеливания на один и только один браузер (или движок рендеринга), который делает ошибку. Например, написание «* html #myelement» для исключения исключения только для IE6: ни один другой браузер никогда не пострадает от этого взлома, поэтому нет необходимости его исчерпывающе тестировать. Все могло пойти не так, как надо, если появился какой-нибудь новый малоизвестный браузер и совершил ту же ошибку, что и IE6, что крайне маловероятно, это не ваша вина, и что-то, что вы можете ожидать, быстро исправят.
Есть некоторые вещи, которые называют себя хаками CSS, но используют недопустимые конструкции, например хак "_propertyname". Это может нарушить работу всех браузеров, поскольку при использовании недопустимого кода каждый браузер может интерпретировать его по-разному. Не используйте это.
Честно говоря, это в любом случае не та проблема, которая когда-то была, прежде всего потому, что IE5 мертв. Если вы используете doctype стандартного режима и пишете в соответствии со стандартами, он в основном будет работать в текущем раунде браузеров. Единственный реальный остающийся проблемный случай - это IE6, на который вы можете нацеливаться с помощью "* html"; маловероятно, что вам понадобится гораздо больше в способах взлома CSS, чем это. К счастью, дни взлома Box Model закончились.
Я тоже стараюсь не использовать. Во многих случаях проблем, которые есть в IE, можно избежать, несколько упростив структуру разметки.
Также помогает, если вы используете приличный сброс CSS, например Эрик Мейер.
Я также медленно, но верно отказываюсь от поддержки IE6 из принципиальных соображений, особенно с учетом последних проблем с безопасностью IE6 и IE7 - мы не собираемся менять привычки просмотра и настройки браузера, если мы продолжим поддерживать дрянные браузеры.
Слушайте свой код! Кент Бек говорит это. А в Вин-Цун говорят: будь как вода, которая изгибается! Или что-то.
Послушайте, вот CSS-хак, чтобы IE5 понимал html5: http://blog.whatwg.org/styling-ie-noscript.
И вот то же самое с использованием JS: http://blog.whatwg.org/supporting-new-elements-in-ie.
Сравните 5 страниц объяснения взлома с 5 строками понятного кода. Итак, используйте JS.
У вещей есть свои преимущества и свои недостатки. И ваше понимание сути дела и элегантность самого кода определяют путь.
Внимательно рассмотрите все вышесказанное, особенно указатели на doctype. Если вы должны применить хакерский CSS-код для конкретного браузера, знайте, что взлома почти всегда можно избежать. Специально для сухой статичной страницы.
Исходя из ограниченного опыта разработки этих вещей ... Я предполагаю, что вы хотите создать красивую веб-страницу, которая мигает без грязного купленного ПО Adoobi:
Op3ra 9.6, S @ fari 3, Chr0me 1, 1 Internet Xpl0rer 6, 7 и 8, Firefux 1.5
Используйте правило @import css, чтобы отказаться от css в старых браузерах и позволить им есть пирожные.
Используйте комбинацию обнаружения объектов и анализа браузера для поиска и устранения проблемных браузеров (все версии ниже указанных выше). Также поймайте древние браузеры, которые, как вы знаете, не в курсе (свойство css, которое вы можете протестировать и сравнить с известным значением) на тот случай, если они пройдут мимо сниффера, также используйте условные комментарии, чтобы выгнать 1E5, подавая ему некоторый анти-CSS для успокойте его в пути, аналогично ie6, за исключением того, что оставьте его в jQu3ry, если это вообще возможно.
Используйте динамический элемент для загрузки библиотеки jQu3ry в разрешенные браузеры (любые, которые не прошли ваши тщательные тесты). Т.е. мы даже не импортируем библиотеку, когда знаем, что она не будет работать / мы впускаем всех остальных.
Используйте jQu3ry для решения любых проблем в поддерживаемых вами браузерах, большинство из которых обнаружится только тогда, когда ваши страницы станут динамическими. Используйте jQu3ry для улучшения макета и добавления в свой интерфейс и т. д.
Расширьте это с помощью операторов мультимедиа, и вы можете протестировать значение css, уникальное для этих устройств, теперь у вас будет больше знаний, которые можно использовать при настройке макета (т. Е. Уничтожить эти столбцы и сжать эти изображения). Отключите анимацию и тд.
Держите его доступным, всегда используя текстовые метки и некоторые уловки позиционирования, чтобы они исчезли, если вам нужно, мистер красочный парень с меню ... только не полагайтесь только на изображения или Javascript для просмотра ваших сайтов.
Достаточно легко заблокировать все, что находится ниже Netsc @ pe 4. Предоставление им только базовой сети, такой, какой она должна была быть изначально. Т.е. даже не указывайте фон, цвет, шрифт или что-нибудь для них. Настройки браузера по умолчанию должны работать нормально. Информация будет доступна.
Фактически, я предлагаю, чтобы все "доступные" браузеры идентифицировали себя как N $ 4, чтобы мы могли легко исключить их из динамического представления и не допустить обмана людей с ограниченными возможностями.
Увы, это был хороший корабль, но даже хороший корабль, чтобы напугать вечно лежащих M $, должен умереть. Не бойтесь, теперь у нас есть еще лучший;)
Только мои 2 цента, обращайтесь с осторожностью.
Хаки CSS не подходят, потому что браузеры постоянно обновляются, а новые обновления могут сломать ваши взломы, в то время как с обнаружением браузера Javascript вы можете точно подтвердить возможности браузера. Однако другой вариант - использовать минимальный CSS, чтобы убедиться, что все работает во всех ситуациях. JQuery и другие библиотеки javascript, предназначенные для пользовательского интерфейса, имеют встроенное определение возможностей браузеров, поэтому вам следует их проверить.
Что не так с обнаружением серверной части браузера? Кажется очень эффективным и надежным (за исключением того, что пользователь меняет строку своего пользовательского агента). Вы можете использовать PHP либо для выбора таблицы стилей для страницы, либо для динамической генерации ее для каждого запроса - не уверен, что другие языки позволяют выводить непосредственно в файл и позволяют вам устанавливать заголовки вручную, но я не могу представить, что они не позволят вам идентифицируйте пользовательский агент, поэтому один из этих вариантов, вероятно, применим для любой серверной среды.
хаки всегда будут добавлять к вашим рабочим усилиям, и рабочие усилия должны быть оптимизированы
сначала вы добавляете хаки, а затем начинаете беспокоиться о том, как они будут вести себя в разных браузерах и на разных машинах.
вместо этого вы можете полагаться на расширения css конкретных поставщиков http://reference.sitepoint.com/css/vendorspecific
Я видел некоторые используемые расширения Mozilla / FF, но не многие другие. Может ли кто-нибудь еще подтвердить, что эти работы и должны использоваться?
[Мой подход] [1] с использованием класса PHP для определения ОС, браузера и версии браузера.
[1]: Мой подход с использованием класса PHP для определения версии ОС, браузера и браузера http://reinholdweber.com/css/css-hacks-browser-version-detection-a-new-approach/
За 6 лет написания HTML и CSS подавляющее большинство моих проблем с CSS возникло из Internet Explorer.
Как указано в других ответах, вы можете использовать условные комментарии для обслуживания дополнительных таблиц стилей в IE (или для добавления класса в строку <body> или <html>`` element, if you don’t like multiple stylesheets). Unlike CSS hacks, conditional comments are explicit and supported. Unlike trying to detect IE from theuser-agent`, они гарантированно будут работать.
Что касается проблем CSS, отличных от IE, я не нашел ни одной, которая стоила бы обнаружения браузером.
Я бы хотел, чтобы дизайнеры были более склонны менять свой дизайн, чтобы мне не приходилось использовать хаки или детектирование :)