2012-09-03 28 views
5

Ho cercato di fare la forma bianca con un div:Fai div con il triangolo inferiore

http://sircat.net/joomla/sircat/mies/2.png

Come faccio ad avere le forme diagonali del fondo del div?

Ho questo per la div: larghezza: 620px; altezza: 440px; colore di sfondo: bianco;

grazie

Edit: solo dimenticare il bg dietro il div, voglio fare il div con i bordi diagonali, non con l'aiuto del bg perché è nello strato superiore

risposta

12

È inoltre possibile utilizzare i bordi e il selettore :after pseudo: http://jsfiddle.net/qQySU/

#pointed { 
    position: relative; 
    margin: 0 auto; 
    width: 200px; 
    height: 200px; 
    background-color: white; 
} 

#pointed:after, 
#pointed::after { 
    position: absolute; 
    top: 100%; 
    left: 50%; 
    margin-left: -50%; 
    content: ''; 
    width: 0; 
    height: 0; 
    border-top: solid 150px red; 
    border-left: solid 100px transparent; 
    border-right: solid 100px transparent; 
} 

ho colorato la punta per una facile identificazione dei confini. Gioca intorno alle larghezze del bordo sulle ultime 3 linee per ottenere il suggerimento che desideri.

Edit .:

Riferimento per Compability: http://caniuse.com/css-gencontent

Edit 2:

In cambio per la semantica, è possibile ottenere più crossbrowser è possibile inserire lo stle su un interno elemento invece che sullo pseudo-selettore :after.

+0

Ciò impedirebbe di continuare il testo sopra il triangolo. – Chris

+1

Non se lo si posiziona al di fuori del contenuto e si utilizza un altro contenitore su di esso per mantenere il testo. – rcdmk

+1

questo è esattamente quello che stavo cercando, grazie! – codek

5

Più semplice (quantità minima di codice) metodo: basta usare un CSS linear-gradienthttp://dabblet.com/gist/3610406

HTML:

<div class='box'>Text goes here...</div> 

CSS:

.box { 
    width: 26em; 
    min-height: 31em; 
    padding: 1em; 
    outline: solid 1px lightblue; 
    margin: 0 auto; 
    background: linear-gradient(45deg, dimgrey 47%, black 50%, transparent 50%) 
        no-repeat 0 100%, 
       linear-gradient(-45deg, dimgrey 47%, black 50%, transparent 50%) 
        no-repeat 100% 100%;; 
    background-size: 50% 14em; 
} 

Migliore compatibilità & più bello: si potrebbe utilizzare un pseudo-element con un box-shadow: http://dabblet.com/gist/3610548

HTML:

<div class='box'>text goes here... hover me ;)</div> 

CSS:

html { background: darkgrey; } 
.box { 
    box-sizing: border-box; 
    position: relative; 
    width: 20em; 
    height: 20em; 
    padding: 1em; 
    margin: 3em auto 0; 
    background: white; 
} 
.box:before { 
    position: absolute; 
    right: 14.65%; /* 50% - 35.35% */ bottom: -35.35%; /* half of 70.71% */ 
    width: 70.71%; /* 100%*sqrt(2)/2 */ 
    height: 70.71%; 
    box-shadow: 2px 2px 1px dimgrey; 
    transform: rotate(45deg); 
    background: white; 
    content: ''; 
} 
.box:hover, .box:hover:before { 
    background: plum; 
} 
+2

** Grazie ** per avermi presentato a [dabblet.com] (http://dabblet.com). Non so perché qualcuno userebbe [jsFiddle] (http://jsfiddle.net) per demo solo CSS quando c'è un'alternativa molto più ordinata :) – Chris

Problemi correlati