Изменение вашего CSS для поддержки конкретного браузера никогда не бывает неправильным - до тех пор, пока вы можете легко его содержать. Как вы заметите, совместимые со стандартами браузеры, * кашляющие * все за исключением MSIE, никогда не сломаются с будущими выпусками. Новые стандарты W3C также не нарушают предыдущие стандарты, они обычно не поддерживают или расширяют предыдущие стандарты в лучшем случае.
Люди упомянули условные комментарии, которые отлично подходят для работы с IE. Но вам понадобится немного больше для работы со всеми браузерами (мобильный, геккон, веб-набор, опера и т. Д.). Обычно вы анализируете заголовки входящих запросов, чтобы выбрать тип и версию браузера из параметра User-Agent. Исходя из этого, вы можете начать загрузку файлов CSS.
Я верю так, как это делает большинство из нас:
- Первая разработка для одного совместимого со стандартами браузера (например, FF)
- Как только CSS завершен, вы подходите к поддержке IE для обеспечения (это можно легко сделать с помощью условных комментариев, как уже упоминалось)
- Сначала создайте файл CSS, который точно настроит все для IE6 и любой другой версии ниже
- Затем создайте файл CSS, который будет обрабатывать все для IE7
- Наконец, создайте файл CSS, который будет обрабатывать все для IE версий IE8 и выше
- Как только выйдет IE9, убедитесь, что вы установили обработку IE8 + в соответствии с IE8 и создаете файл IE9 + CSS с необходимыми исправлениями
- Наконец, создайте дополнительный файл CSS для исправлений веб-набора
- При необходимости вы также можете создавать дополнительные файлы, специально предназначенные для Chrome или Safari, если требуется
Что касается специфических для браузера реализаций CSS, я обычно группирую их все в моем основном файле CSS (вы можете легко выполнить их поиск и заменить их в одном документе, если это необходимо). Поэтому, если что-то должно быть прозрачным, я бы установил прозрачность и фильтры (MSIE) в одном блоке. Браузеры просто игнорируют реализации, которые они не поддерживают, так что вы в безопасности. Конкретные реализации, которых я бы хотел избежать, - это пользовательские реализации (эй, мне нравится поле -moz над W3C, но я просто не хочу на него полагаться).
Что касается наследования и переопределения CSS, вам не нужно переопределять все объявления и определения CSS в каждом файле CSS. Каждый последовательно загруженный файл CSS должен только содержать селектор и конкретные определения, необходимые для исправления, и ничего больше.
В итоге вы получите ваш (огромный) основной файл css и другие, содержащие по несколько строк каждая, для конкретных исправлений браузера - что подводит итог чему-то, что не так уж сложно поддерживать и отслеживать. Это личное предпочтение, на каком браузере будет базироваться ваш базовый CSS-файл, но обычно вы будете ориентироваться на браузер, который создаст наименьшее количество проблем для других браузеров (так что да, разработка для IE6 будет очень плохим решением в этом случае точка).
Как всегда, следование передовой практике и прагматичность и тщательность с селекторами и особенностями каждого класса и использованием фреймворков приведут вас на путь совершенства с редкими необходимыми исправлениями. Структурирование ваших CSS-файлов является огромным плюсом, если только вы не хотите закончить беспорядочным бесполезным беспорядком.