使用条件注释很容易针对Internet Explorer浏览器特定的CSS规则:
<!--[if IE 6]>
...include IE6-specific stylesheet here...
<![endif]-->
有时是Gecko引擎(Firefox)行为不当。将CSS规则只针对Firefox而不是其他浏览器的最佳方法是什么?也就是说,不仅Internet Explorer应该忽略仅限于firefox的规则,WebKit和Opera也应该忽略。
注:我正在寻找一个“干净”的解决方案。在我看来,使用JavaScript浏览器嗅探器向我的HTML中添加一个“firefox”类并不算干净。我更希望看到一些依赖于浏览器功能的东西,就像条件注释只对IE来说是“特殊的”……
如何应用CSS只Firefox
下面的解决方案为您提供了在更广泛的Firefox浏览器版本中仅支持Firefox的CSS…
@supports (-moz-appearance:button) and (contain:paint) {
body {
background: red;
}
}
早在2006年,Mozilla/Firefox就支持-moz-appearance:按钮。但是@supports规则直到2019年才被支持,所以那将是最早支持该规则的Firefox浏览器。include:paint将Safari浏览器排除在规则之外。Internet Explorer和早期的Trident Edge浏览器不支持@supports,因此也被排除在CSS规则之外。没有已知的Chrome浏览器应该支持-moz-appearance:按钮,所以排除。
一如既往,我所有的CSS解决方案都是100% javascript免费:)
如何应用CSS只Firefox
下面的解决方案为您提供了在更广泛的Firefox浏览器版本中仅支持Firefox的CSS…
@supports (-moz-appearance:button) and (contain:paint) {
body {
background: red;
}
}
早在2006年,Mozilla/Firefox就支持-moz-appearance:按钮。但是@supports规则直到2019年才被支持,所以那将是最早支持该规则的Firefox浏览器。include:paint将Safari浏览器排除在规则之外。Internet Explorer和早期的Trident Edge浏览器不支持@supports,因此也被排除在CSS规则之外。没有已知的Chrome浏览器应该支持-moz-appearance:按钮,所以排除。
一如既往,我所有的CSS解决方案都是100% javascript免费:)
首先,免责声明。我并不提倡下面的解决方案。我写的唯一针对浏览器的CSS是针对IE(尤其是IE6)的,尽管我希望不是这样。
现在是解决方案。你要求它很优雅,所以我不知道它有多优雅,但它肯定只针对Gecko平台。
这个技巧只有在启用JavaScript并使用Mozilla绑定(XBL)时才有效,Mozilla绑定在Firefox和所有其他基于gecko的产品内部大量使用。作为比较,这类似于IE中的CSS属性,但更强大。
我的解决方案涉及三个文件:
Ff.html:要设置样式的文件
xml:包含Gecko绑定的文件
css: Firefox特定的样式
ff.html
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {
-moz-binding: url(ff.xml#load-mozilla-css);
}
</style>
</head>
<body>
<h1>This should be red in FF</h1>
</body>
</html>
ff.xml
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="load-mozilla-css">
<implementation>
<constructor>
<![CDATA[
var link = document.createElement("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
link.setAttribute("href", "ff.css");
document.getElementsByTagName("head")[0]
.appendChild(link);
]]>
</constructor>
</implementation>
</binding>
</bindings>
ff.css
h1 {
color: red;
}
更新:
上面的解决方案不是那么好。如果不是追加一个新的LINK元素,而是在BODY元素上添加“firefox”类会更好。这是可能的,只需将上面的JS替换为以下内容:
this.className += " firefox";
解决方案的灵感来自于Dean Edwards的moz-behaviors。
以下是针对Firefox浏览器的一些浏览器技巧,
使用选择器hacks。
_:-moz-tree-row(hover), .selector {}
JavaScript黑客
var isFF = !!window.sidebar;
var isFF = 'MozAppearance' in document.documentElement.style;
var isFF = !!navigator.userAgent.match(/firefox/i);
媒体查询黑客
这将工作,Firefox 3.6和以后
@media screen and (-moz-images-in-menus:0) {}
如果您需要更多信息,请访问browserhacks