2012-09-03 12 views

Odpowiedz

12

Można również użyć granice i selektor :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; 
} 

Mam kolorowe końcówki dla łatwej identyfikacji granic. Rozejrzyj się wokół szerokości na ostatnich 3 liniach, aby uzyskać wskazówkę, którą chcesz.

Edit .:

Wniosek o kompatybilności: http://caniuse.com/css-gencontent

Edit 2:

W zamian za semantyki, można dostać więcej crossbrowser można umieścić stle na zasadzie wewnętrzny element zamiast na pseudo selektorze :after.

+0

To uniemożliwiłoby kontynuowanie tekstu nad trójkątem. – Chris

+1

Nie, jeśli umieścisz go poza zawartością i użyjesz nad nim innego pojemnika, aby zachować tekst. – rcdmk

+1

to jest dokładnie to, czego szukałem, dziękuję! – codek

5

Najprostszym (przynajmniej ilość kodu) sposób: wystarczy użyć 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; 
} 

Lepsza kompatybilność & graczem: można użyć pseudo-element z 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

** Dziękujemy ** za przedstawienie mnie na [dabblet.com] (http://dabblet.com). Nie wiem, dlaczego ktokolwiek użyłby [jsFiddle] (http://jsfiddle.net) do demonstracji tylko w CSS, gdy jest o wiele więcej alternatywy :) – Chris