2014-12-17 18 views
6

Ho cercato in giro e provare per un paio di giorni, ma ho appena cant sembrano per ottenere il 100% giusto ... io sto cercando di realizzare il seguente effetto con gradiente css3:effetto Sunburst con gradiente CSS3

sunburst done in illustrator

la più vicina che ho ottenuto è DEMO:

html { 
 
    background: 
 
    linear-gradient(80deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(90deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(82deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(67deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(52deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(37deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(22deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(7deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-8deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-23deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-38deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-53deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-68deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-83deg, transparent 50%, #ddd 50%, #ddd); 
 
    background-position: center -100%; 
 
    background-color: #eee; 
 
    background-size: 100% 200%; 
 
    min-height: 100%; 
 
}

Continuerò a provarlo .. ogni aiuto è comunque molto apprezzato.

Aggiornamento:

Ci deve essere un modo migliore/riutilizzabile di fare questo ... guardare in una soluzione SCSS, ecco quello che ho finora:

.sunburst { 
    @for $ray from 1 through 26 { 
    $color: #eee; 
    $degree: 7; 
    @if $ray%2 == 0 { 
     $color: #ddd; 
    } 
    background:linear-gradient($degree+deg, transparent 50%, $color 50%, $color), 
    } 
} 

Ora il suo solo la matematica attuale dietro sto cercando di capire ... tentando di rubare la logica da pow.js, ma un po 'difficile se il tuo come terribile in matematica come sono ...

+0

ho convertito il vostro demo in un frammento di codice overflow dello stack. (Non preoccuparti, ho mantenuto il collegamento JSFiddle anche lì). –

+0

wow grazie, non ero a conoscenza di snippet di overflow dello stack ..non sono qui da un po ' –

+0

grazie @ user2570380 ma sto cercando qualcosa che sia un po 'più semplice con i browser più vecchi .. mi sono imbattuto in questo però ... –

risposta

5

È possibile utilizzare :before e : pseudo-elementi per ottenere questo effetto.

html, body { 
 
    width: 100%; 
 
    height: 100%; 
 
    margin: 0; 
 
} 
 
#grad { 
 
    position: relative; 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
#grad:after, #grad:before { 
 
    content: ''; 
 
    position: absolute; 
 
    background: linear-gradient(90deg, transparent 50%, black 50%, black), linear-gradient(82deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(67deg, transparent 50%, #000000 50%, #000000), linear-gradient(52deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(37deg, transparent 50%, #000000 50%, #000000), linear-gradient(22deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(7deg, transparent 50%, #000000 50%, #000000), linear-gradient(-8deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-23deg, transparent 50%, #000000 50%, #000000), linear-gradient(-38deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-53deg, transparent 50%, #000000 50%, #000000), linear-gradient(-68deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-83deg, transparent 50%, #000000 50%, #000000), linear-gradient(-90deg, transparent 50%, #12E0DB 50%, #12E0DB); 
 
    background-position: 0% 0%; 
 
    background-size: 200% 100%; 
 
    height: 100%; 
 
    width: 50%; 
 
} 
 
#grad:before { 
 
    left: 50%; 
 
    transform: rotate(180deg); 
 
}
<div id="grad"></div>

1

il tuo background-postition è impostato su center -100%;. Basta usare

background-position: center center; 

Ora con questa modifica e il codice fornito metà dell'immagine è già stata eseguita;). Basta aggiungere la seconda metà con più linear-gradients

+0

ben individuato, sto proseguendo ma dannazione, è difficile da tenere traccia .. grazie ancora però. –

1

@ chipChocolate.py ha dato una soluzione brillante! Questo è un miglioramento basato sul suo.

  1. In Firefox transparent si comporta come rgba(0,0,0,0) che lascia una sottile linea grigia sul bordo. Passare a rgba(255,255,255,0) sembra migliore.

  2. Rendi l'effetto visivo più vicino allo screenshot di OP: 36 strisce, ognuna occupata da un angolo di 10 gradi.

  3. Efficace sul tag <html>, come la prova di OP.

BTW: il motore di rendering di Chrome fa schifo, ottimizzato per Firefox.

html { 
 
    height: 100%; 
 
    position: relative; 
 
} 
 

 
html:before, html:after { 
 
    content: ''; 
 
    height: 100%; 
 
    width: 50%; 
 
    position: absolute; 
 
    top: 0; 
 
    background-size: 200% 100%; 
 
    background-image: linear-gradient(85deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(75deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(65deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(55deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(45deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(35deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(25deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(15deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(5deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-5deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-15deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-25deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-35deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-45deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-55deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-65deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-75deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-85deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-95deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db); 
 
} 
 

 
html:before { 
 
    left: 50%; 
 
    transform: rotate(180deg); 
 
}