2012-03-23 56 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