2013-06-28 15 views
13

è possibile, so che tutte le seguenti forme sono possibili in questo link:Creare una forma di croce in CSS

http://css-tricks.com/examples/ShapesOfCSS/

ma croce deve essere possibile anche. Quando dico croce voglio dire in questo modo:

enter image description here

+3

Utilizzare due elementi sovrapposti uno sull'altro? O ancora meglio: un elemento con un :: pseudo elemento (o :: prima) – Kyle

+1

Non puoi farlo con un singolo elemento .. Meglio andare su SVG o su tela ... –

+2

La croce è stata effettivamente aggiunta ai css-tricks ora: https://css-tricks.com/examples/ShapesOfCSS/ – tsiorn

risposta

38

si potrebbe ottenere qualcosa di simile con solo pseudoelements:

http://jsbin.com/upiyoc/1/edit

#cross { 
    width: 100px; 
    height: 100px; 
    position: relative; 
} 

#cross:before, #cross:after { 
    content: ""; 
    position: absolute; 
    z-index: -1; 
    background: #d00; 
} 

#cross:before { 
    left: 50%; 
    width: 30%; 
    margin-left: -15%; 
    height: 100%; 
} 

#cross:after { 
    top: 50%; 
    height: 30%; 
    margin-top: -15%; 
    width: 100%; 
} 

La dimensione della croce sarà proporzionalmente scala, secondo a width e height dell'elemento #cross


Aggiornamento: un'altra soluzione (utilizzando meno codice) potrebbe semplicemente coinvolgere più gradienti lineari (senza pseudolements), ad es.

http://codepen.io/anon/pen/zxwgPo

#cross { 
    width: 100px; 
    height: 100px; 

    background: linear-gradient(to bottom, transparent 35%, 
             #d00 35%, 
             #d00 65%, 
             transparent 65%), 

       linear-gradient(to right, transparent 35%, 
             #d00 35%, 
             #d00 65%, 
             transparent 65%), 
} 
+0

Qualcuno può dirmi perché è richiesto "assoluto"? L'ho provato su codepen e se lo si cambia relativo o lo si estrae, non lo mostrerà ... anche con i pixel di altezza e larghezza specificati .... aiuto ... mi fa impazzire non sapendo ( – carinlynchin

+1

senza posizione : in assoluto si dovrebbe dare loro una visualizzazione (o float) altrimenti gli pseudolements non possono essere visibili (non sono elementi reali, e la loro proprietà 'content' è vuota) quindi qui position: absolute rende superfluo usare la proprietà float (o display) – fcalderan

+0

oh ok ... quindi qualsiasi tipo di pseudo elemento senza contenuto deve avere assoluto? puoi mostrarmi dove dice che nel w3. cose come questa vorrei sapere come cercare in quella cosa lol – carinlynchin

6

Certo che lo è. Devi solo usare due elementi: Vedi http://jsfiddle.net/92XTx/2/

Il div di chiusura è relative posizionato in modo che entrambi i bambini possano essere posizionati in modo assoluto.

#cross { 
    position: relative; 
    width: 150px; 
    height: 150px; 
} 

Eccoli entrambi posizionato in modo assoluto:

#cross div { 
    position: absolute; 
    background: red; 
} 

per renderli superpose.

e quindi creare le forme:

.cross-vertical { 
    left: 33%; 
    width: 33%; 
    height: 100%; 
} 

.cross-horizontal { 
    top: 33%; 
    width: 100%; 
    height: 33%; 
} 
2

Questo può essere fatto con un normale '+' più carattere insieme ad un text-stroke

DEMO (Webkit,Android only)

div { 
 
    font-size: 80px; 
 
    -webkit-text-stroke: 20px red; 
 
    display: inline-block; 
 
    padding: 0 20px; 
 
}
<div>+</div>

3

Poiché tutte le risposte che vedo qui guardo o lunghe o vendor-prefisso-dipendente,

#cross { 
 
    background: red; 
 
    height: 100px; 
 
    position: relative; 
 
    left: 50px; 
 
    width: 20px; 
 
} 
 
#cross:after { 
 
    background: red; 
 
    content: ""; 
 
    height: 20px; 
 
    left: -40px; 
 
    position: absolute; 
 
    top: 40px; 
 
    width: 100px; 
 
}
<div id="cross"></div>

0

CSS Trasforma può essere facilmente utilizzato per ottenere più plasmare

.close { 
    position: absolute; 
    right: 10px; 
    top: 6px; 
    width: 20px; 
    height: 20px; 
    opacity: 0.3; 
} 
.cross:before, .cross:after { 
    position: absolute; 
    left: 15px; 
    content: ' '; 
    height: 21px; 
    width: 2px; 
    background-color: #333; 
} 
.cross:before { 
    transform: rotate(0deg); 
} 
.cross:after { 
    transform: rotate(-90deg); 
}