修改您的 CSS 以获得特定于浏览器的支持永远不会出错 - 只要您可以轻松地包含它。正如您会注意到的,符合标准的浏览器,*咳*除MSIE 之外的所有内容,都不会在未来的版本中中断。新的 W3C 标准也不会破坏以前的标准,它们通常最多弃用或扩展以前的标准。
人们提到了非常适合处理 IE 的条件注释。但是您需要更多的东西来处理所有浏览器(移动、壁虎、webkit、opera 等)。通常,您将解析传入的请求标头以从 User-Agent 参数中获取浏览器类型和版本。基于此,您可以开始加载 CSS 文件。
我相信我们大多数人的做法是:
- 首先开发一个符合标准的浏览器(我们以 FF 为例)
- 一旦 CSS 完成,您就可以为 IE 提供支持(这可以通过条件注释轻松完成,如前所述)
- 首先创建一个 CSS 文件,它将为 IE6 和以下任何其他版本微调所有内容
- 然后创建一个 CSS 文件来处理 IE7 的所有内容
- 最后,创建一个 CSS 文件来处理 IE8 及更高版本的所有内容
- IE9 发布后,确保将 IE8+ 处理设置为特定于 IE8,并创建一个包含所需修复的 IE9+ CSS 文件
- 最后,为 webkit 修复创建一个额外的 CSS 文件
- 如果需要,您还可以创建其他文件以专门针对 Chrome 或 Safari(如果需要)
关于特定于浏览器的 CSS 实现,我通常将所有这些组合到我的主 css 文件中(如果需要,您可以轻松地搜索它们并在一个文档中替换它们)。所以如果某些东西必须是透明的,我会在同一个块中设置不透明度和过滤器(MSIE)。浏览器只是忽略他们不支持的实现,所以你的安全。我倾向于避免的具体实现是自定义实现(嘿,我喜欢 W3C 上面的 -moz 框,但我只是不想依赖它)。
与 CSS 继承和覆盖一样,您不必重新定义每个 CSS 文件中的所有 CSS 声明和定义。每个连续加载的 CSS 文件应该只包含修复所需的选择器和特定定义,没有其他内容。
你最终得到的是你的(巨大的)主 css 文件和其他文件,每个文件包含几行,用于特定的浏览器修复 - 总结起来并不是很难维护和跟踪。这是个人喜好,您的基本 css 文件将基于哪个浏览器,但通常您将定位一个浏览器,该浏览器将为其他浏览器产生最少的问题(所以是的,为 IE6 开发将是一个非常糟糕的决定观点)。
与往常一样,遵循良好实践,对每个类的选择器和细节以及使用框架保持务实和细致,这将引导你走上善意的道路,而很少需要修复。除非您想以无序无意义的混乱结束,否则结构化您的 CSS 文件是一个巨大的优势。