2013-03-19 26 views
7

Tôi muốn tạo hình thang trong HTML5. Tôi biết rằng nó có thể được thực hiện bằng cách sử dụng bán kính đường viền và chiều cao là 0:Hình thang trong HTML với CSS3 Gradient áp dụng cho nó

#trapezoid { 
    border-bottom: 100px solid red; 
    border-left: 50px solid transparent; 
    border-right: 50px solid COLOR HERE; 
    height: 0; 
    width: 100px; 
} 

Tuy nhiên, tôi muốn áp dụng độ dốc CSS3 và phương pháp trên chỉ cho phép màu đồng nhất.

Kiểu sau sẽ tạo hình bình hành. Nhưng có cách nào để chỉ nghiêng một bên, thay vì cả hai?

-webkit-transform: skew(20deg); 
+2

Bạn có thể hiển thị bản vẽ ** của những gì bạn đang cố gắng đạt được không? –

Trả lời

8

Bí quyết là tạo angled content mask và sau đó điền vào vùng có mặt nạ với kiểu dáng mong muốn, trong trường hợp này là độ dốc nền. Nội dung sẽ được cắt bớt thành hình dạng của mặt nạ.

Mặt nạ chỉ đơn giản là một vật chứa có overflow:hidden. Nếu một chuyển đổi CSS3 được áp dụng cho vùng chứa (ví dụ, xoay hoặc hoạt động nghiêng), mặt nạ sẽ có hình dạng xoay hoặc nghiêng, và nội dung sẽ được cắt bớt thành hình dạng này. Một cặp mặt nạ lồng nhau, mặt nạ bên ngoài bị lệch và mặt trong bị lệch, tạo ra một mặt nạ hình thang với 2 cạnh góc cạnh. Skewing chỉ mặt nạ bên trong tạo ra một hình thang với 1 cạnh góc cạnh.

  Both masks skewed   Inner mask skewed 
      _________________   _________________ 
     /    \   |    \ 
     /clipped content \   | clipped content \ 
     /_____________________\  |__________________\ 

demo JSFiddle:

HTML

<div class="main"> 
    <div class="outer-mask"> 
     <div class="inner-mask"> 
      <div class="content">Styled content goes here</div> 
     </div> 
    </div> 
</div> 

CSS

.main { 
    position: relative; 
} 
.outer-mask { 
    position: absolute; 
    left: 95px; 
    top: 45px; 
    width: 390px; 
    height: 110px; 
    overflow: hidden; 
    -webkit-transform: skew(20deg, 0deg); 
     -ms-transform: skew(20deg, 0deg); 
     -o-transform: skew(20deg, 0deg); 
      transform: skew(20deg, 0deg); 
} 
.inner-mask { 
    position: absolute; 
    left: -45px; 
    top: 0px; 
    width: 390px; 
    height: 110px; 
    overflow: hidden; 
    -webkit-transform: skew(-40deg, 0deg); 
     -ms-transform: skew(-40deg, 0deg); 
     -o-transform: skew(-40deg, 0deg); 
      transform: skew(-40deg, 0deg); 
} 
+0

Bạn không cần một mặt nạ bên trong và bên ngoài, bạn có thể làm điều đó chỉ với một. Chỉ cần làm cho mặt nạ bên ngoài một hình thoi với đỉnh chỉ lên trên, dưới, trái, phải. – Ana

+2

Xem bản trình diễn này cho thấy 3 hình thang khác nhau http://codepen.io/thebabydino/pen/eAryD – Ana

+0

@Ana: Tôi bắt đầu có ý tưởng. Hai phần tử lồng nhau, cả hai đều được biến đổi, một phần tử bên ngoài là một mặt nạ. Và trong ví dụ của bạn, một phần tử pseduo được sử dụng cho phần tử bên trong. Ít mặt nạ và các phần tử HTML hơn, mặc dù các tính toán được yêu cầu phức tạp hơn (kết hợp xoay với nghiêng và dịch). Cảm ơn bạn đã chia sẻ nó! –

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