2014-08-29 6 views
12

Ich brauche die Hintergrundfarben aus 2 Elementen mischen CSS Ich habe mit den background-blend-mode:multiply Hantieren aber das funktioniert nur, wenn ich die 2 Farben im gleichen Elemente habe.Blending 2 Elemente Hintergrundfarben mit CSS

Ich brauche so etwas zu erreichen -


enter image description here

Ich habe viel gesucht, aber nicht in der Lage, es herauszufinden. Die hilfreichste Ressource, die ich gefunden habe, war http://blogs.adobe.com/webplatform/2012/07/17/new-blending-features-in-css/, die zeigt, wie man es mit Canvas macht. Ist es möglich, dasselbe mit CSS zu tun?

EDIT


Die Kreise waren über nur ein Beispiel zu zeigen, was ich brauchte. Wie gesagt, ich habe nach Farben für 2 verschiedene Elemente gesucht. Ich habe eine Geige für meine tatsächlichen Formen geschaffen, die ich vermischen muss. http://jsfiddle.net/fmgfsr4o/2/

+0

Ich fand [diese Frage] (http://stackoverflow.com/questions/23986063/using-css-blend-mode-on-dom-element-above-the-element-with-the-background-image) das könnte helfen. –

+1

haben Sie versucht, mehrere Hintergründe für dasselbe Element zu verwenden? etwas wie das: erster Hintergrund ist ein roter Kreis auf dem links, zweiter ist ein grüner Kreis auf dem Recht. Ich denke, du kannst es in reinem CSS zeichnen, vielleicht mit einigen Farbverläufen oder ähnlichem. Sie können auch versuchen, mit CSS - Pseudoelementen zu spielen (': after' und': before') – pomeh

+0

Grundsätzlich ... No. Mischmodi sind in CSS noch nicht verfügbar und es gibt keine CSS-Alternative. Sie ** könnten ** in der Lage sein, etwas in JS zu tun. –

Antwort

1

Sie können CSS mehrere Hintergrund mit Radial-Gradienten kombinieren, um diese Wirkung zu erzielen:

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> 

Ich habe eine JSFiddle für Sie getan, um zu versuchen: http://jsfiddle.net/pomeh/07nLpwwj/

Dies ist das Ergebnis, das ich Firefox 31 mit bekommen:

circles

Auch wenn die Browser-Unterstützung „richtige“ (siehe hier http://caniuse.com/#feat=css-backgroundblendmode) scheint, bitte Beachten Sie, dass die Eigenschaft background-blend-mode den Status der Kandidatenempfehlungen hat. Seien Sie also vorsichtig, wenn Sie sie verwenden (dank @Paulie_D, um dies zu verdeutlichen).

+0

Wie ich bereits erwähnt habe, muss ich die Hintergrundfarbe von "2 elements" Kreisen zusammenführen, ist nur ein Beispiel, meine Shapes sind etwas komplexer und müssen mit verschiedenen HTML Elementen erstellt werden (zB 2 übereinanderliegende Rautenformen berücksichtigen) . Ist das mit CSS möglich? –

+0

@KshitizShankar Ich bin nicht sicher, dass es möglich ist, 'Hintergrund-Blend-Modus' arbeitet nur an einem Element. Bitte aktualisieren Sie Ihre Frage und fügen Sie Details hinzu, was Sie brauchen ** genau **: meine Antwort scheint Ihrer Frage zu entsprechen, aber Ihre Frage entspricht nicht dem, was Sie wirklich brauchen, so dass Sie nie eine nützliche Antwort auf diese Weise finden werden. – pomeh

+0

Ich habe die Frage bearbeitet und eine Geige für meine tatsächlichen Formen angebracht, die ich vermischen muss. Ich bin mir nicht sicher, ob ich es mit CSS erreichen kann. –

1

Probieren Sie dieses reine CSS3, obwohl Sie herausfinden müssen, wie Sie die Kreise positionieren.

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

Ich bin auf der Suche nach einer Antwort, um es mit CSS zu tun. Ich weiß bereits, dass ich es mit JS und Canvas erreichen kann –

+1

DyspraxicDesigner Ihre Bearbeitung war eine zu radikale Änderung Ihrer Antwort, es ändert sich total den Inhalt Ihrer Antwort (von einer JavaScript-Lösung zu einer CSS). Bitte beachten Sie dies in der Zukunft, denn jetzt müssen @KshitizShankar Ihre Antwort überdenken. Wenn Sie wirklich eine solch radikale Änderung vornehmen möchten, geben Sie bitte eine neue Antwort ein und löschen Sie die erste. Vielen Dank. – pomeh