Фильтр CSS – это способ применения или сокрытия заданных правил CSS взависимости от типа или группы типов браузеров. Фильтры основаны на недостатках браузеров , таких, как ошибки синтаксического разбора кода или некорректная реализация правил CSS. Используя их, фильтр при меняет или скрывает правила от браузера.
Трюк – это неэлегантный или некорректный способ заставить браузер сделать что либо желаемым образом. Обычно трюки применяются для нивелирования специфичных ошибок и недостатков браузеров , например ошибок нестандартной патентованной модели контейнеров в браузерах IE.
Термин “трюк” (hack) звучит довольно неодобрительно. В нем чувствуется намек на то, что лучше было бы сделать это ” нормальным” образом, но раз уж не выходит ничего не поделаешь, придется прибегнуть к неэлегантному приему. Некоторые дизайнеры предпочитают термин “заплатка” (patch), поскольку в нем явно чувствуется намек на то, что исправляется специфичная ошибка браузера, однако мы считаем, что термин “заплатка ” относится к выполняемым кодам , а не кодам CSS и (X)HTML.
В трюках CSS могут и спользоваться фильтры для применения правила в одном браузере и отмены в другом. В некоторых трюках неправильная реализация правил CSS в отдельных браузерах используется для того , чтобы “заманить” браузер в фрагмент кода, предназначенный специально для него. В сущности, фильтры CSS – это разиовидность трюков , используемых для учета типа браузера. К сожалению, вследствие этого многие дизайнеры неправильно используют обобщенное понятие “трюк” для обозначения фильтров. Поэтому во многих случаях, говоря ” трюк”, имеют в виду “фильтр”.
Предупреждение о трюках и фильтрах css.
Спецификация CSS разрабатывалась с прицелом на совместимость с будущими версиями, Если браузер не поддерживает некоторый селектор , он игнорирует все правило. Аналогично : если браузер не поддерживает некоторое свойство или значение, он игнорирует все объявление. Это означает, что добавление новых селекторов, свойств и значений не должно оказать разрушающего влияния на вывод страницы устаревшими браузерами. Вы можете использовать это для предоставления правил и объявлений современным браузерам , будучи твердо уверенным в том, что устаревшие браузеры деградируют достаточно плавно. Если выйдет новая версия браузера, поддерживающая правило CSS, которое вы используете в качестве фильтра, он (новый браузер) будет работать так, как Вы ожидаете.
Если более современное правило CSS используется для предотвращения проблемы в старых браузерах, то, скорее всего, эта проблема в новой версии браузера уже устранена. Благодаря этому использование неподдерживаемых правил CSS в качестве механизма фильтрации – сравнительно безопасный метод.
Мы написали “сравнительно” , поскольку всегда есть некоторая вероятность того , что новый браузер будет поддерживать используемое вами новое правило CSS, но в то же время будет содержать ошибку, которую вы пытаетесь нивелировать. Использование фильтров , основанных на ошибках синтаксического анализа в браузере , более опасный способ, чем применение неподдерживаемых правил CSS. Это – объясняется тем , что в данном случае вы полагаетесь на ошибку, а не на средство CSS. Аналогично предыдущему методу, если ошибка синтаксического анализа будет исправлена, а ошибка, которую вы пытаетесь нивелировать, останется, ваш код будет работать неправильно. Однако вероятность того , что ошибка синтаксического анализа “проникнет” в новую версию браузе ра, довольно высока.
Многие дизайнеры , особенно начинающие, слишком неосмотрительно полагаются на фильтры и трюки. Когда что-то не работает в некотором браузере, они немедленно применяют трюк, видя в нем своего рода палочку – выручалочку. Существует даже тенденция судить о квалификации дизайнера по количеству известных ему трюков и фильтров. Однако не все проблемы с кодом CSS являются результатом ошибок в браузерах, многие проблемы возникают вследствие ошибок в коде и недостаточного понимания спецификации CSS. Даже если проблема возникла вследствие ошибки в браузере, использовать трюк не обязательно.
В отличие от страницы, напечатанных на бумаге, вывод Web-страницы зависит не только от ее создателя, но также от типа и параметров браузера, установленных посетителем. Если в IE 6 элементы макета прижались, друг к другу без зазора или даже перекрылись на пару пикселей, а в остальных браузерах макет выглядит удовлетворительно, то решать эту проблему, видимо, не имеет смысла. Если вы будете применять трюки для решения незначительных проблем, вы не только добавите себе работы , но и создадите потенциальные проблемы с будущими браузерами. Не забывайте, что во многих случаях виноват браузер, плохо поддерживающий спецификацию CSS, а не ваша страница.
В большинстве случаев существует много способов упростить код CSS, поэтому при возникновении проблем порой достаточно просто применить другой метод. Многие ошибки в коде CSS вызваны чрезмерной сложностью кода и разметки. Если вы будете поддерживать код простым и чистым, необходимости в трюках можно избежать. Если после некоторых размышлений и перебора вариантов вы все же видите, что избежать использования трюка или фильтра не удастся, применяйте его осмотрительно и не теряйте контроль над ним.
Если файлы CSS небольшие и простые, а количество трюков не более двух или трех, безопаснее разместить их в главном файле CSS. Обычно код трюка довольно сложный, что существенно затрудняет чтение остального кода. Если файлы CSS длинные или используется много трюков, лучше разместить трюки в их собственных, отдельных таблицах стилей. Тогда при возникновении проблем в будущих браузерах код будет легче читать. Кроме того, вы легко выясните, где размещены трюки. Аналогично этому, если в будущем вы решите прекратить поддерживать некоторый браузер, то для удаления предназначенных для него трюков вам будет достаточно удалить файл CSS.