2012-02-17 16 views
6

Całkiem prosty pomysł, ale nie jestem pewien, jak to zrobić. Chciałbym móc go stylizować jako jeden div (jeśli to możliwe).Jak zrobić ośmiokątną div?

Jak utworzyć ośmiokątną div?

+1

Nie możesz. Twoje opcje to fałszowanie z obrazem lub używanie SVG/VML –

+1

lub css, co jest dokładnie tym po ... – fancy

+0

Poniższy przykład nie jest tak naprawdę ośmiobocznym div; to kwadrat z zakrytymi rogami. W porządku, jeśli potrzebujesz tylko ośmiokąta, ale musisz umieścić coś za nim, masz kłopoty. –

Odpowiedz

15

CSS stosowane w this link to:

#octagon { 
    width: 100px; 
    height: 100px; 
    background: red; 
    position: relative; 
} 

#octagon:before { 
    content: ""; 
    position: absolute; 
    top: 0; 
    left: 0;  
    border-bottom: 29px solid red; 
    border-left: 29px solid #eee; 
    border-right: 29px solid #eee; 
     width: 42px; 
    height: 0; 
} 

#octagon:after { 
    content: ""; 
    position: absolute; 
    bottom: 0; 
    left: 0;  
    border-top: 29px solid red; 
    border-left: 29px solid #eee; 
    border-right: 29px solid #eee; 
    width: 42px; 
    height: 0; 
} 

Jest ona wykonana z samego elementu div któremu nadaje się kształt prostokątny. Przy użyciu pseudo klas, zawartość jest dodawana w celu utworzenia dwóch trapezów, które uzupełniają ośmiokąt. Sprytnie pozwala to na faktyczne liczenie tagów tylko przy użyciu najjaśniejszych bitów CSS.

Początki tej techniki można znaleźć here.


Here is a quick demo. Niebieska część to kod CSS :before i zielony kod CSS w wersji :after. A jeszcze lepiej, here is a demo, który pozwala na przezroczyste tła! (dziękuję @GGG).

+0

Stoję poprawione. +1. – AlienWebguy

+0

Chciałbym dać +1 za niesamowicie fajny link, ale dziś mam za dużo głosów =/Świetne znalezisko, chociaż – Joe

+0

Dzięki za ten przykład, spodziewałem się użyć: przed i: po. Dokładnie tego, czego szukałem, dziękuję. – fancy

3

Co powiesz na zrobienie kwadratu, obrócenie o 45 stopni, a następnie obcięcie rogów?

.octagon { 
    height: 10em; 
    position: relative; 
    overflow: hidden; 
    width: 10em; 
} 

.octagon:after { 
    background: red; 
    content: " "; 
    height: 100%; 
    position: absolute; 
    width: 100%; 


    -webkit-transform: rotate(45deg); 
    -moz-transform: rotate(45deg); 
     -ms-transform: rotate(45deg); 
     -o-transform: rotate(45deg); 
      transform: rotate(45deg); 

} 

jsFiddle

+1

+1, ponieważ ma przezroczyste krawędzie –

1

Można również achive się octogonal div z inline svg pomocą polygon element.
Oto przykład:

svg{width:30%;}
<svg viewbox="0 0 10 10"> 
 
    <polygon points="3 0, 7 0, 10 3, 10 7, 7 10, 3 10, 0 7, 0 3" /> 
 
</svg>