2013-12-17 10 views
5

Come posso creare la seguente forma in CSS3, senza usare pseudo-classi come ": before"?CSS3 Moon Forma di eclissi

Eclipse shape

ho fatto molto facile con: prima, ma la cosa è che io non voglio avere un elemento solido sulla zona grigia (vedi JSFiddle - http://jsfiddle.net/aUdLr/2/)

div{ 
    width: 100px; 
    height: 100px; 
    background-color: red; 
    border-radius: 100%; 
    position: relative; 
} 
div:before{ 
    content: ""; 
    width: 100%; 
    height: 110%; 
    background: gray; 
    position: absolute; 
    left: 5px; 
    top: -5%; 
    border-radius: 100%; 
} 
+0

[questo sito Web] (http://css-tricks.com/examples/ShapesOfCSS/) potrebbe aiutarti. Non c'è un esempio per la tua forma però. – AfromanJ

+0

Ciò può anche aiutare: [Caricatore flessibile in stile Google con CSS] (http://lea.verou.me/2013/11/flexible-google-style-loader-with-css/) – Kobi

risposta

5

È possibile utilizzare larghezza del bordo:

div{ 
    width: 100px; 
    height: 100px; 
    border-radius: 100%; 
    border-width: 0; 
    border-left:solid 10px red; 
} 

Scientificamente imprecisa esempio: http://jsfiddle.net/aUdLr/4/

Ricordare che la forma esterna è non un cerchio perfetto, poiché il bordo viene aggiunto alla larghezza. È possibile compensare riducendo la larghezza o utilizzando Box-sizing: Border-box.

soluzione
+1

n1, inserire un ' transform: scaleX (0.8) 'e tu sei lì – Kos

+0

Grazie, la tua soluzione è rilevante. Tuttavia, voglio che la forma sia esattamente la stessa dell'immagine. Ho provato qualcos'altro, ma ancora, non è quello che mi serve: http://jsfiddle.net/aUdLr/5/ –

1

più semplice CSS3 che mi viene in mente:

div:before { 
    font: 80px serif; 
    color: red; 
    content: "("; 
} 

Here's a fiddle.

(Ora serio- se si vuole una buona quantità di controllo sulla forma, suggerisco di usare SVG.)

2

Per ottenere l'effetto di un piccolo cerchio eclissato da un cerchio più grande, è possibile aggiungere un'ombra a un elemento trasparente:

div{ 
    width: 100px; 
    height: 100px; 
    border-radius: 100%; 
    background-color:transparent; 
    box-shadow: -23px 0 0px -15px #ff8; 
} 

Esempio: http://jsfiddle.net/aUdLr/6/

+0

Esempi con più ombre: http://jsfiddle.net/aUdLr/7, http: // jsfiddle .net/aUdLr/8. Questo è abbastanza divertente. – Kobi

+0

Un'altra opzione sta avendo l'ombra 'inset': http://jsfiddle.net/aUdLr/9/. Sono abbastanza sicuro che puoi ottenere ciò di cui hai bisogno giocando un po 'con i numeri. – Kobi