2013-03-19 296 views
7

我想在HTML5中製作梯形。我知道它可以使用邊界半徑和0的高度來完成:在CSS中使用CSS3梯形漸變應用於它

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

不過,我想申請一個CSS3漸變和上面的方法只允許純色。

以下樣式將生成一個平行四邊形。但是,有沒有辦法只偏斜一側,而不是兩側?

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

你能表現出** **繪圖的你想達到什麼樣的? – 2013-03-19 11:13:40

回答

8

訣竅是創建一個angled content mask,然後在與期望的造型掩蔽區域填補,在這種情況下,背景漸變。內容將被剪裁成蒙版的形狀。

面具只是一個容器overflow:hidden。如果將CSS3轉換應用於容器(例如,旋轉或傾斜操作),則蒙版將具有旋轉或傾斜的形狀,並且內容將被剪裁爲該形狀。一對嵌套口罩,外側口罩和內側口罩歪斜,產生一個帶有兩個傾斜側面的梯形口罩。只歪斜內面具會產生一個帶有一個斜角的梯形。

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

的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

你不需要一個內部和外部的面具,你可以只用一個。只需將外部遮罩的頂點指向頂部,底部,左側和右側的菱形。 – Ana 2013-03-19 15:18:32

+2

看到這個演示顯示3個不同的梯形http://codepen.io/thebabydino/pen/eAryD – Ana 2013-03-19 15:35:44

+0

@Ana:我開始明白這個主意。兩個嵌套元素,都轉換,外面一個面具。在你的例子中,一個pseduo元素用於內部元素。儘管所需的計算更復雜(將旋轉與傾斜和平移相結合),但掩碼和HTML元素較少。感謝分享! – 2013-03-19 16:14:35