2014-04-24 50 views
5

我需要使用全尺寸的图片作为背景,我需要该图片有亮度过滤器。跨浏览器亮度过滤器使用css的img

现在它只在ChromeFirefox上工作,最后一个使用svg。

这是我有:

img.fullscreenIMG 
{ 
    display:block; 
    position:absolute; 
    z-index:1; 
    filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' ><filter id='bright30'><feComponentTransfer><feFuncR type='linear' slope='0.30'/><feFuncG type='linear' slope='0.30' /><feFuncB type='linear' slope='0.30' /></feComponentTransfer></filter></svg>#bright30"); 
    filter: brightness(0.6); 
    -webkit-filter: brightness(0.6); 
    -moz-filter: brightness(0.6); 
    -o-filter: brightness(0.6); 
    -ms-filter: brightness(0.6); 
} 

的Safari 5.1.7 Windows不符合这方面的工作,既不Internet Explorer 11.

我缺少什么?你能推荐我任何其他方式来完成相同的?

感谢

+2

无论是系统的Safari 5.x也IE11支持'filter',请参阅:http://caniuse.com/css-filters – Dai

+3

如果重做IMG作为联SVG内,和SVG走一路那么它将在IE10中工作。 (Safari/Windows是一个死的产品顺便说一句,它停止与版本5) –

回答

6

您可以使用RGBA()或HSLA()色伪覆盖。这在所有浏览器中都是works,对于IE8你可以使用-ms-filter。

body { 
    width: 100%; height: 100%;  
    background: url(#bgimage) no-repeat center top/cover fixed; 
} 
body:before { 
    position: absolute; 
    z-index: 2; 
    display: block; 
    content: ""; 
    top: 0; right: 0; bottom: 0; left: 0; 
    background: hsla(0,0%,0%,0.5);   /*adjust brightness here */ 
} 

http://jsfiddle.net/F79H8/

+2

这不是亮度,但亮度。 – igorpavlov

+1

我认为这是一个很好的解决方案,它适用于所有常见浏览器。我只是将最后一个css行改为'background:rgba(0,0,0,0.5);' 。 – joalcego

+0

如果您将此技巧应用于img标记,则不起作用,因为img不能:before或:after(https://lildude.co.uk/after-css-property-for-img-tag )。 –

1

我也遇到了同样的问题。调查结果,找到了IE11的代码。

<svg id="mySvg"> 
    <defs> 
    <filter id="reduce"> 
     <feComponentTransfer> 
     <feFuncR type="linear" slope="0.5"/> 
     <feFuncG type="linear" slope="0.5"/> 
     <feFuncB type="linear" slope="0.5"/> 
     </feComponentTransfer> 
    </filter> 
    </defs> 
    <image filter="url(#reduce)" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="test.png" width="800" height="600"/> 
</svg>