2012-03-23 73 views
13

标题基本上说明了一切。仅更改悬停时的多个背景中的一个


下面是一个例子:

#element { 
    background: url(image.png) no-repeat center center, 
       linear-gradient(to top, #86a53c, #516520); 
} 

#element:hover { 
    background: url(image.png) no-repeat center center, 
       linear-gradient(to top, #A0C153, #516520); 
} 

#element:active { 
    background: url(image.png) no-repeat center center, 
       linear-gradient(to top, #516520, #A0C153); 
} 

正如你所看到的,只有背景图像的变化之一 - 另一种停留在每一个国家一样,但仍然被宣布次!

那么,是否有可能只改变其中一个背景,而是保持原样 - 而不必一遍又一遍地重新声明它?

我知道其他CSS背景属性(重复,位置等)可以单独设置。这只是一个简单的例子...

+2

我有一种感觉,答案是令人失望... – 2012-03-23 19:18:29

+0

很好的问题,但可能没有 – 2012-03-23 19:20:01

+0

@ WesleyMurch - 现在不是这样了。看到我的答案。 – 2017-02-13 14:25:35

回答

1

这是现在可以通过CSS变量:

#element { 
    --gradient: linear-gradient(to top, #86a53c, #516520); 

    background: url(image.png) no-repeat center center, 
       var(--gradient); 
} 

#element:hover { 
    --gradient: linear-gradient(to top, #A0C153, #516520); 
} 

看到它在这里的行动:https://jsfiddle.net/22zu6oaq/

+0

是的,最好的一点是,它面对我之前提出的担忧:“在语法和级联方面会如何发挥”。 [这是](http://stackoverflow.com/questions/40010597/how-do-i-apply-opacity-to-a-css-color-variable/41265350#41265350)一个更疯狂的例子。 – BoltClock 2017-02-13 14:48:00

5

不,不可以,对不起。这听起来像是你可以提出的一个补充,但我不确定它在语法和级联方面会如何发挥。

+0

我甚至无法想象语法可能是什么。我非常嫉妒那些首先使用多种背景的人,但我依然支持IE7。渐进式增强?当然,试着告诉客户。 – 2012-03-23 19:37:26

+0

令人失望,至少可以说。至于语法:为什么不使用类似数组的数字?例如'background-image-1','background-image-2'等。这对'box-shadow'或任何其他具有多个值的CSS属性也很有用。至于级联:我看没有任何问题。为什么它应该和[IE的'background-position-x'&'background-position-y']不同(http://snook.ca/archives/html_and_css/background-position-x-y)? – 2012-03-25 00:40:30

+1

如果有像'background-position:,0,-20px,'这样的语法修改第三个背景的位置,我会很高兴。 – Pioul 2012-08-28 19:24:19

相关问题