2015-11-17 127 views
5

So cosa stai pensando, ci sono almeno un milione di domande come questa, che chiedono informazioni sulle onde nei bordi o le onde ai bordi degli elementi. Tuttavia, ho una domanda diversa. Ciò di cui ho bisogno è una combinazione tra uno zigzag-edge (non ho idea di come chiamarlo, non sono inglese) e uno wave-edge.Bordo d'onda nei CSS

più specifiche: devo generare questa:

enter image description here

La parte superiore dell'elemento blu deve essere un tipo ondulato di confine, dove la parte superiore è trasparente in modo mostra l'immagine sottostante ' attraverso l'elemento ', per così dire.

È questa possibilità con i CSS? Preferirei non usare le immagini, semplicemente perché ci saranno più elementi come questi, con colori diversi (che significa colori di bordo diversi per elemento).

+0

correlati a http://stackoverflow.com/questions/25895895/creating- a-droplet-come-border-effetto-in-css/25903879 # 25903879. Non è possibile produrre esattamente un effetto di bordo simile con i CSS (con uno schema ripetuto, a meno che non si utilizzino molti elementi). Il più vicino è il filo che ho collegato prima. – Harry

+0

Grazie, lo esaminerò. Le persone che mi hanno fatto downvotes potrebbero dirmi qual è la ragione del loro downvote? Ho fatto le mie ricerche, sono finito in un vicolo cieco, finora c'è solo una domanda correlata alla mia (quella che Harry ha collegato), e non l'ho trovata nella ricerca. Cosa dovrei migliorare la prossima volta prima di fare una domanda? – Sean

+0

Scioccante che non hanno mai risposto alla domanda di cui sopra. Perché la comunità SO è così tossica ?! –

risposta

33

E 'relativamente facile tracciare un confine così con un paio di pseudo-elementi.

In primo luogo abbiamo disegnare la parte inferiore dell'onda:

.wave{ 
 
    background: 
 
    linear-gradient(to right, sandybrown, chocolate); 
 
    height: 50px; 
 
    position: relative; 
 
} 
 
.wave::before{ 
 
    content: ""; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    background-repeat: repeat; 
 
    height: 10px; 
 
    background-size: 20px 20px; 
 
    background-image: 
 
    radial-gradient(circle at 10px -5px, transparent 12px, maroon 13px); 
 
}
<div class='wave'></div>

Abbiamo poi riempire ogni altro fosso con lo sfondo di un altro pseudo-elemento. Questo sfondo è largo il doppio, quindi riempiamo solo i fossati dispari.

.wave{ 
 
    background: 
 
    linear-gradient(to right, sandybrown, chocolate); 
 
    height: 50px; 
 
    position: relative; 
 
} 
 
.wave::after{ 
 
    content: ""; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    background-repeat: repeat; 
 
    height: 15px; 
 
    background-size: 40px 20px; 
 
    background-image: 
 
    radial-gradient(circle at 10px 15px, crimson 12px, transparent 13px); 
 
}
<div class='wave'></div>

Combinando i due ci dà l'effetto desiderato:

.wave{ 
 
    background: 
 
    linear-gradient(to right, sandybrown, chocolate); 
 
    height: 50px; 
 
    position: relative; 
 
} 
 
.wave::before{ 
 
    content: ""; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    background-repeat: repeat; 
 
    height: 10px; 
 
    background-size: 20px 20px; 
 
    background-image: 
 
    radial-gradient(circle at 10px -5px, transparent 12px, aquamarine 13px); 
 
} 
 
.wave::after{ 
 
    content: ""; 
 
    position: absolute; 
 
    left: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    background-repeat: repeat; 
 
    height: 15px; 
 
    background-size: 40px 20px; 
 
    background-image: 
 
    radial-gradient(circle at 10px 15px, aquamarine 12px, transparent 13px); 
 
}
<div class='wave'></div>

+0

Risposta molto bella! – vals

+0

Sembra eccellente. Risposta molto bella :) – Harry

+0

Questo sembra fantastico, grazie! Non sono ancora arrivato agli elementi che usano i bordi ondulati, ma sono sicuro che funzionerà perfettamente. Grazie ancora! – Sean

0

Try-

#wave { 
    position: relative; 
    height: 70px; 
    width: 54px; 
    background:#79C5BD none repeat scroll 0% 0%;float:left;margin-top:20px 
} 
#wave::after { 
    content: ""; 
    display: block; 
    position: absolute; 
    border-radius: 100% 100%; 
    height: 70px; 
    background-color: #79C5BD; 
    left: 0px; 
    bottom: 27px; 
    width: 60px; 
} 

#wave { 
 
    position: relative; 
 
    height: 70px; 
 
    width: 54px; 
 
    background:#79C5BD none repeat scroll 0% 0%;float:left;margin-top:20px 
 
} 
 
#wave::after { 
 
    content: ""; 
 
    display: block; 
 
    position: absolute; 
 
    border-radius: 100% 100%; 
 
    height: 70px; 
 
    background-color: #79C5BD; 
 
    left: 0px; 
 
    bottom: 27px; 
 
    width: 60px; 
 
}
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div> 
 
<div id="wave"></div><div id="wave"></div>

+0

È più una goccia che un'onda. Quando si confronta con l'immagine fornita in questione si noterà che la parte inferiore non è curva. – Harry

+0

Quello che Harry ha detto, sì. Ho davvero bisogno dell'onda, questo è ciò che il cliente vuole. Inoltre, al mio Lead Dev non piacerà se utilizzo infiniti div, solo per scopi estetici. EDIT: usare l'ID di questo tipo più volte va contro lo scopo di un ID. – Sean