大多数人都知道简单的 opacity
CSS 规则,但最近我发现了 filter
,它可以将 opacity(amount)
作为其值 - 其他方面也有用途。但两者之间到底有什么区别呢?
大多数人都知道简单的 opacity
CSS 规则,但最近我发现了 filter
,它可以将 opacity(amount)
作为其值 - 其他方面也有用途。但两者之间到底有什么区别呢?
来源:https://css-tricks.com/almanac/properties/f/filter/
/*
* -----------
* filter: opacity([ <number> or <percentage> ])
* -----------
*/
.filter-opacity {
filter: opacity(0.3);
height: 5rem;
width: 5rem;
background-color: mediumvioletred;
}
/*
* -----------
* standard opacity
* -----------
*/
.just-opacity {
opacity: 0.3;
height: 5rem;
width: 5rem;
background-color: lawngreen;
}
<div class="filter-opacity">
filter-opacity
</div>
<div class="just-opacity">
just-opacity
</div>
opacity
属性设置为iframe
标签,则我们将无法单击该帧内的任何链接(我猜这是防止clickjacking
攻击的保护措施),而filter: opacity(0)
则允许我们单击任何链接。 我不知道,也许这是Chrome开发人员的疏忽。CSS
中的filter
在FireFox和MSIE中有一些不同的运行方式。
filter
,又称为Alpha Filter
,实际上使用了MSIE的DX Filter(no longer supported)。但是,为了更符合CSS2.1标准,在IE8中,MS引入了-ms-filter
来替换filter
。其语法不同之处在于-ms-filter
的value必须用引号括起来。最终,IE9淘汰了这种方法,在IE10中也不再使用。
filter
和 -ms-filter
的使用非常具体。例如,以下代码在运行 IE7 兼容模式的 IE8 中无效:
element {
filter: alpha(opacity=50);
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
}
-ms-filter
必须在filter
之前,以便获得更好的旧版IE兼容性。像这样:
element {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: alpha(opacity=50);
}
FireFox曾经试图利用filter
进行实验,但结果并不如意。我相信最初的想法是模仿IE使用Direct X引擎的做法。甚至有一个特定于浏览器的版本,就像大多数浏览器一样。最终,HTML5/CSS3宣布使用filter
命名空间,现在它有了新的用途。
从CSS3开始,filter
现在有了全新的含义!Firefox文档保持开放状态,似乎计划对此进行扩展,尽管我还没有看到它(但是如果您的CSS不符合其要求,它们会崩溃JS!)。 Webkit(可能成为CSS3下一个更新的标准)已经开始实现filter
,以至于您几乎可以为网站"photoshop"图像!
由于filter
正在发生如此多的变化,opacity
将是使用的首选方法,然而,正如您所看到的,要完全跨浏览器兼容意味着非常彻底。
浏览器特定的替代方案:
opacity
兼容?filter
兼容?
filter
不同opacity:0.2
和filter:opacity(20%)
之间有什么区别? - Matthias Burgerfilter
而不是opacity
。 - AdrienKfilter
只适用于IE 5-7,而-ms-filter-
适用于IE 9以下版本。对于其他所有浏览器,只需使用opacity
即可。我鼓励更多的“您的浏览器不兼容,请升级”类型的页面,针对任何IE<=9的情况。 - SpYk3HH
filter: opacity()
和filter: opacity()
。 - Ivanfilter: opacity()
和opacity
CSS 属性。 - Arman Nisch