如您所想,这不是属性继承的问题。
过滤器的工作方式使得修复 CSS 中不断变化的属性变得不可能:渲染受过滤器影响的元素,渲染所有子元素,然后应用过滤器的结果(作为图像)。
所以剩下的唯一选择是:
1) 按照 Lowkase 的建议更改 HTML
2)在您的情况下,您似乎只想将背景图像设为灰色。在这种情况下,您可以保持 HTML 不变,在伪元素中显示图像,然后将过滤器应用于该伪元素。
CSS
.cell{
opacity:0.7;
width:420px;
height:420px;
transition: opacity .3s ease-in-out;
-moz-transition: opacity .3s ease-in-out;
-webkit-transition: opacity .3s ease-in-out;
}
.A1 {
position: relative;
}
.A1:before {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background-image:url('http://i.imgur.com/NNKxZ5R.jpg');
filter: url(filters.svg#grayscale); /* Firefox 3.5+ */
filter: gray; /* IE6-9 */
-webkit-filter: blur(15px); /* Google Chrome, Safari 6+ & Opera 15+ */
z-index: -1;
}
#text {
color:#ffffff;
text-align:center;
font:18px sans serif;
text-decoration:none;
}
.cell:hover {
opacity:1.0;
}
.A1:hover:before {
filter: none;
-webkit-filter: grayscale(0);
transition: opacity .3s ease-in-out;
-moz-transition: opacity .3s ease-in-out;
-webkit-transition: opacity .3s ease-in-out;
}
小提琴
我还将您的过滤器更改为模糊,以使文本不受过滤器影响更清晰。由于您还设置了一些不透明度,文本看起来仍然是灰色的,只是因为您看到了它下面的灰色。
添加了使用亮度过滤器的示例(用于 webkit)
演示 2