2012-03-23 5 views
13

Der Titel sagt es im Grunde alles.auf nur eine von mehreren Hintergründen ändern schweben


Hier ist ein Beispiel:

#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); 
} 

Wie Sie sehen können, nur eines der Hintergrundbilder ändern - der andere das gleiche in jedem Zustand bleibt, aber immer noch erklärt werden wird vier mal!

So ist es möglich, nur einen der Hintergründe zu ändern, aber die andere lassen wie es ist - ohne dass es über neu zu erklären und immer wieder?

Ich weiß, dass die anderen CSS-Hintergrundeigenschaften (Wiederholung, Position etc.) können separat eingestellt werden. Dies ist nur ein kleines Beispiel ...

+2

Ich habe die Antwort Gefühl enttäuschend sein ... –

+0

gute Frage, aber wahrscheinlich keine –

+0

@ WesleyMurch - nicht mehr ist es nicht. Siehe meine Antwort. –

Antwort

1

Dies ist mit CSS Variablen jetzt möglich:

#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); 
} 

es hier in Aktion sehen: https://jsfiddle.net/22zu6oaq/

+0

Ja, und das Beste daran ist, dass es den Bedenken, die ich zuvor angesprochen habe, direkt ins Auge springt: "Wie es sich in Bezug auf Syntax und Kaskade ausnehmen würde". [Hier ist] (http://stackoverflow.com/questions/40010597/how-do-i-apply-opacity-to-a-css-color-variable/41265350#41265350) ein noch verrückteres Beispiel. – BoltClock

5

Nö, keine kann noch tun, sorry. Das klingt nach einer Ergänzung, die Sie vorschlagen können, obwohl ich mir nicht sicher bin, wie es in Bezug auf Syntax und Kaskade ausgeht.

+0

Ich kann mir nicht vorstellen, wie die Syntax sein könnte. Ich bin ziemlich eifersüchtig auf jemanden, der tatsächlich mehrere Hintergründe verwendet, ich bin immer noch an den IE7-Support gebunden. Progressive Enhancement? Klar, versuche dem Kunden das zu sagen. –

+0

Enttäuschend, um es milde auszudrücken. Zur Syntax: Warum nicht eine Array-ähnliche Zahl verwenden? Zum Beispiel 'background-image-1',' background-image-2' usw. Dies wäre auch nützlich für 'box-shadow' oder irgendeine andere CSS-Eigenschaft, die mehrere Werte annimmt. Was die Kaskade angeht: Ich sehe keinerlei Probleme. Warum sollte es anders sein als [IE 'background-position-x' &' background-position-y'] (http://snook.ca/archives/html_and_css/background-position-x-y)? –

+1

Ich würde mich freuen, wenn es eine Syntax wie 'Hintergrund-Position war:,, 0 -20px,,' die Position des dritten Hintergrund unter vier zu ändern. – Pioul