2014-08-29 19 views
12

Ho bisogno di fondere i colori di sfondo di 2 elementi usando i CSS Ho giocato con il background-blend-mode:multiply ma funziona solo quando ho i 2 colori nello stesso elemento.Miscelare i colori di sfondo a 2 elementi utilizzando il CSS

Ho bisogno di realizzare qualcosa di simile -


enter image description here

Ho cercato un sacco, ma non sono stati in grado di capirlo. La risorsa più utile che ho trovato è stata http://blogs.adobe.com/webplatform/2012/07/17/new-blending-features-in-css/ che mostra come farlo usando Canvas. È possibile fare la stessa cosa usando i CSS?

EDIT


I cerchi sopra erano semplicemente un esempio per mostrare quello che mi serviva. Come ho detto, cercavo di fondere i colori per 2 elementi diversi. Ho creato un violino per le mie forme reali che ho bisogno di fondere. http://jsfiddle.net/fmgfsr4o/2/

+0

Ho trovato [questa domanda] (http://stackoverflow.com/questions/23986063/using-css-blend-mode-on-dom-element-above-the-element-with-the-background-image) quello potrebbe aiutare. –

+1

hai provato a utilizzare più sfondi sullo stesso elemento? qualcosa di simile: il primo sfondo è un cerchio rosso sulla sinistra, il secondo è un cerchio verde sulla destra. Penso che tu possa disegnarlo in puro CSS, magari con alcuni gradienti o simili. Puoi anche provare a giocare con gli pseudo elementi CSS (': after' e': before') – pomeh

+0

Fondamentalmente ... No. Le modalità di fusione non sono ancora disponibili in CSS e non esiste un'alternativa CSS. Potresti ** essere in grado di fare qualcosa in JS. –

risposta

1

È possibile combinare CSS sfondo multipla con radiali-pendenze per ottenere questo effetto:

CSS

div { 
    /* adjust the width of the container to adjust circle's 
    overlap size and shape */ 
    width: 80px; 
    height: 50px; 
    /* for debug purpose only */ 
    border: solid blue 1px; 

    background: 
    /* draw the red circle */ 
    radial-gradient(red 0%, red 70%, transparent 70%, transparent 100%) 0 0, 
    /* draw the green circle */ 
    radial-gradient(green 0%, green 70%, transparent 70%, transparent 100%) 0 0; 
    /* the red on the left, the green on the right */ 
    background-position: top left, top right; 

    /* you can make then bigger or smaller */ 
    /* but you have to change width size above too */ 
    background-size: 50px 50px; 
    /* You want both circles to appears once only */ 
    background-repeat: no-repeat; 

    /* you can try with other values too */ 
    /* https://developer.mozilla.org/en-US/docs/Web/CSS/background-blend-mode */ 
    background-blend-mode: multiply; 
} 

HTML

<div></div> 

Ho fatto un JSFiddle per provare: http://jsfiddle.net/pomeh/07nLpwwj/

Questo è il risultato che ottengo utilizzando Firefox 31:

circles

Anche se il supporto del browser sembra "corretto" (vedi qui http://caniuse.com/#feat=css-backgroundblendmode), si prega di nota che la proprietà background-blend-mode ha lo stato di Candidate Recommendation per ora, quindi fai attenzione quando lo usi (grazie a @Paulie_D per averlo indicato).

+0

Come ho già detto, ho bisogno di unire il colore di sfondo dei cerchi "2 elementi" era solo un esempio, le mie forme sono un po 'più complesse e richiedono di essere create usando diversi elementi HTML (per esempio, considera 2 forme di diamante che si sovrappongono) . È possibile farlo con i CSS? –

+0

@KshitizShankar Non sono sicuro che sia possibile, 'background-blend-mode' funziona solo su un elemento. Aggiorna la tua domanda e aggiungi dettagli su ciò che ti serve ** esattamente **: la mia risposta sembra corrispondere alla tua domanda, ma la tua domanda non corrisponde a ciò di cui hai veramente bisogno, quindi non troverai mai una risposta utile in questo modo. – pomeh

+0

Ho modificato la domanda e ho allegato un violino per le mie forme reali che ho bisogno di fondere. Non sono sicuro se riuscirò a ottenerlo usando il CSS però .. –

1

Provate questo puro CSS3, anche se avrete bisogno di capire come posizionare i cerchi.

html { 
height: 100%; 
background: 
    repeating-radial-gradient(
     circle, 
     transparent, 
     transparent 3.5em, 
     tomato 1em, 
     tomato 4.5em 
    ), 
    repeating-radial-gradient(
     circle, 
     transparent, 
     transparent 3.5em, 
     dodgerblue 3.5em, 
     dodgerblue 4.5em 
    ); 

background-blend-mode: multiply; 
background-size: 10em 10em; 
background-position: 
    0 0, 
    5em 5em, 
    10em 5em; 
} 

JSFiddle

+0

Sto cercando una risposta per farlo con i CSS. So già che posso realizzarlo usando JS e Canvas –

+1

DyspraxicDesigner la modifica è stata una modifica troppo radicale alla tua risposta, cambia totalmente il contenuto della tua risposta (da una soluzione JavaScript a una CSS). In futuro, prestate attenzione a questo, perché ora @KshitizShankar deve riconsiderare la vostra risposta. Se vuoi veramente fare un cambiamento così radicale, per favore pubblica una nuova risposta e poi cancella la prima. Grazie. – pomeh