2015-08-10 164 views
6

Sto provando a visualizzare un elemento li come un'onda. Non voglio usare alcuna immagine di sfondo, ma il raggio del bordo non supporta valori negativi. Spero che puoi aiutarmi.Come creare una forma d'onda usando css

is this possible in CSS

+0

Cos'altro hai provato? Potresti postare qualche codice di esempio? – evolutionxbox

+2

Sono dubbioso che tu possa creare curve lisce casuali con i CSS, penso che senza SVG non sia possibile – Andrey

+0

Dai un'occhiata a [questo thread] (http://stackoverflow.com/questions/27777470/wave-or-shape- with-border-on-css3/27780572 # 27780572) e provare le opzioni menzionate lì. – Harry

risposta

5

Il più vicino che può ottenere è questo utilizzando solo i CSS.

.one { 
 
    position: absolute; 
 
    top: 22px; 
 
    left: 19px; 
 
    width: 230px; 
 
    height: 180px; 
 
    background: #0F1E3C; 
 
    border-radius: 100%; 
 
    clip: rect(70px, auto, auto, 45px); 
 
    transform:rotate(90deg); 
 
} 
 

 
.one:before { 
 
    content: ''; 
 
    position: absolute; 
 
    top: -15px; 
 
    left: -62px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: white; 
 
    border-radius: 100%; 
 
} 
 

 
.two { 
 
    position: absolute; 
 
    top: 156px; 
 
    left: 59px; 
 
    width: 230px; 
 
    height: 180px; 
 
    background: #0F1E3C; 
 
    border-radius: 100%; 
 
    clip: rect(70px, auto, auto, 45px); 
 
    transform:rotate(-90deg); 
 
} 
 

 
.two:before { 
 
    content: ''; 
 
    position: absolute; 
 
    top: -15px; 
 
    left: -62px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: white; 
 
    border-radius: 100%; 
 
}
<div class="one"></div> 
 
<div class="two"></div>

+1

Bel tentativo di accoppiamento (anche se consiglierei comunque di usare SVG) :) – Harry

+0

yo ma l'ho appena provato potrebbe essere utile per qualcuno che è limitato ad usare svgs – Suresh

+1

Niente di sbagliato accoppiarsi, assolutamente nulla. Adoro le forme CSS :) – Harry

2

Mentre SVG sarebbe un molto scelta migliore qui, si potrebbe usare un hack confine simile per creare la base di questa forma.

Ecco un esempio di base per questo tipo di forma, anche se devo dire che c'è un sacco di spazio per migliorare:

div { 
 
    position:relative; 
 
    height:100px; 
 
    width:100px; 
 
    background:lightgray; 
 
    overflow:hidden; 
 
} 
 

 
div:before { 
 
    content:""; 
 
    position:absolute; 
 
    top:calc(-100% - 25px); 
 
    left:00%; 
 
    height:200%; 
 
    width:200%; 
 
    border-radius:50%; 
 
    background:cornflowerblue; 
 
    border-bottom:50px solid blue; 
 
} 
 
div:nth-child(2) { 
 
    transform:rotate(180deg); 
 
    margin-left:40px; 
 
    margin-top:-25px; 
 
}
<div></div> 
 
<div></div>


Una versione in formato SVG rapida:

<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="407pt" height="126pt" viewBox="0 0 407 126"> 
 
    <g transform="translate(0,126) scale(0.1,-0.1)" fill="#000000" stroke="none"> 
 
    <path d="M43 1223 c-4 -21 -8 -119 -7 -218 0 -169 2 -185 28 -265 153 -466 
 
545 -728 1030 -689 276 23 694 112 1116 239 175 53 375 99 501 116 149 19 363 
 
15 453 -10 134 -37 273 -132 351 -241 26 -36 42 -51 46 -42 4 7 13 58 20 115 
 
29 239 -44 492 -201 700 -99 132 -238 236 -405 303 l-76 30 -417 -3 -417 -4 
 
-190 -37 c-104 -21 -275 -58 -380 -82 -316 -73 -466 -96 -678 -102 -124 -4 
 
-218 -2 -280 7 -175 23 -341 91 -437 177 l-49 44 -8 -38z" /> 
 
    </g> 
 
</svg>

+2

Vota per SVG e in particolare vota per JB utilizzando SVG: D – Harry

+0

"vote for" sta correndo per il presidente? – Persijn

Problemi correlati