2012-02-17 32 views
6

Ý tưởng khá đơn giản, nhưng tôi không chắc chắn cách thực hiện điều này. Tôi muốn có thể tạo kiểu cho nó là div (nếu có thể).Làm thế nào để thực hiện một div octogonal?

Làm cách nào để tạo một hình bát giác div?

+1

Bạn không thể. Các tùy chọn của bạn là giả mạo nó với một hình ảnh hoặc sử dụng SVG/VML –

+1

hoặc css, đó là chính xác những gì im sau ... – fancy

+0

Ví dụ dưới đây không thực sự là một div octogonal; đó là một hình vuông với các góc bị che khuất. Sẽ ổn nếu bạn chỉ cần hiển thị một hình bát giác, nhưng bạn cần phải đặt bất cứ thứ gì xếp sau nó, bạn đang gặp rắc rối. –

Trả lời

15

CSS được sử dụng trong this link là thế này:

#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; 
} 

Nó được xây dựng từ phần tử div chính nó mà được đưa ra một hình chữ nhật. Sử dụng các lớp giả :before:after giả, nội dung được thêm vào để tạo hai hình thang hoàn thành hình bát giác. Thông minh, điều này sẽ giữ số lượng thẻ thực sự chỉ bằng một lần bằng cách sử dụng các bit thú vị của CSS.

Có thể tìm thấy nguồn gốc của kỹ thuật này here.


Here is a quick demo. Phần màu xanh là CSS :before và màu xanh lá cây là :after CSS. Và thậm chí tốt hơn, here is a demo cho phép hình nền trong suốt! (cảm ơn bạn @GGG).

+0

Tôi đã sửa chữa. +1. – AlienWebguy

+0

Tôi muốn +1 cho một liên kết bogglingly mát mẻ, nhưng tôi ra khỏi phiếu ngày hôm nay =/Great tìm, mặc dù – Joe

+0

Cảm ơn ví dụ này, tôi đã mong đợi để sử dụng: trước và: sau. Chính xác những gì tôi đang tìm kiếm, cảm ơn bạn. – fancy

3

Làm thế nào về chỉ cần tạo một hình vuông, xoay nó 45 độ và sau đó cắt các góc?

.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 bởi vì nó có đường viền trong suốt –

1

Bạn cũng có thể đạt được một div octogonal với inline svg sử dụng polygon element.
Dưới đây là một ví dụ:

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>

Các vấn đề liên quan