19、折角效果

1、45度的折角

當折角為45deg時,實現原理是利用兩層漸變背景,一層用來實現底層背景,一層用來實現折疊的三角,再把三角層覆蓋在底層上,就形成了一個三角形的折角。

background: linear-gradient(to left bottom,transparent 50%,#333 50%) no-repeat right top / 20px 20px,
            linear-gradient(-135deg, transparent 14px,#58a 0);
// 底層透明為14px,這個值是三角大小的二分之根號二倍,通過勾股定理計算得出,三角中的20px是漸變的長和寬,背景漸變中14px的是對角線的長度,即三角形的高。

2、任意角度的折角

實現任意角度的折角,需要用漸變來實現背景,用偽元素來生成折角的部分。實現30deg的折角:

.a{
    background: linear-gradient(-150deg,transparent 20px,#58a 0);  // 20px為折角直角三角形的高
}
.a:before{
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    width: 23px;  // 由三角函數可得長度為  20/cos 30°  
    height: 40px; // 由三角函數可得高度為  20/sin 30° 
    background: linear-gradient( to left bottom, transparent 50%,#333 0) right top no-repeat;
}

再對偽元素進行旋轉,貼合漸變背景形成的折角邊。

transform: rotate(-30deg);
transform-origin: bottom right; // 讓旋轉點固定為右下角,使得偽元素的位置可控性更高,這樣偽元素右下角會貼合主元素邊緣,這樣偽元素就只要在高度這個方向上移動就可以貼合背景。

偽元素在高度上的位移可以通過之前一圖計算出,要讓偽元素的右下角貼合漸變背景的折角右頂點,上移的高度就等于偽元素的高減去寬。

transform: translateY(-17px) rotate(-30deg); // 先位移,再旋轉,保證偽元素右下角的位置固定在右邊緣
transform-origin: bottom right;

加上一定的修飾樣式,讓折角更加逼真。

.a{
    border-radius: 10px;
}
.a:before{
    border-bottom-left-radius: inherit; // 折角的圓角為左下角。
    box-shadow: -5px 5px 8px -3px rgba(0,0,0,.2);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 各種純css圖標 CSS3可以實現很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 9,656評論 0 8
  • 我還記得國外某位大牛在一篇文章中寫道,CSS is fine, it's just really hard。讀完他...
    garble閱讀 1,106評論 0 0
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,656評論 0 7
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,328評論 0 11