說到div
的形狀,基本上想到的都是圓形
或者方形
,這兩種形狀其實也已經符合了前端95%
的應用場景(95%
的數據從哪得來的 - - !),可是做爲一個不肯隨波逐流的程序員,就是要搞事情。css
(圖片來源於網絡
)果真限制咱們創造的不是想象力,而是兼容性。支持瀏覽器的版本偏高,若是你是作正經項目仍是不推薦使用,若是是本身的或者比較新潮的項目,那就開搞吧! ( 道路千萬條,兼容第一條。嚐鮮有風險,翻車兩行淚。
)。手機端記得加上-webkit-clip-path: polygon()
前端
=>
西瓜clip-path: polygon(100% 100% , 0 100% , 50% 0 );
程序員
=>
三角形clip-path: polygon(0 0 , 0 100% , 100% 50% );
web
=>
箭頭clip-path: polygon(100% 50% , 0 100% , 50% 50% , 0 0);
瀏覽器
=>
鑽石clip-path: polygon(50% 100% , 100% 10% , 0 10%);
網絡
clip-path:polygon()
先根據上面的三角形畫一張分析圖ide
能夠看到括號中由一對值組成。在當前的div內,分別對應 x
跟y
座標 ,接收單位px
或者%
(推薦百分比),用逗號分隔,逗號後寫入的值表明一個新的點,新的點會與原來的點連成線,點的數量不限。工具
火狐在這個屬性的調試上有很好的支持
複製代碼
點擊屬性旁邊的圖標,線條就能夠隨意拖動了,會隨着你是`%`仍是`px`自動進行調整
複製代碼
很遺憾,這個屬性雖然也有對應的圓形clip-path:circle()
跟橢圓clip-path: ellipse()
但二者並不能同時使用。而且由於這個屬性是裁剪的,只要超出線的範圍都會被裁減掉,因此嘗試用::after
或::befor
填充上弧形,效果也不盡人意,參照這個西瓜。動畫
另一個缺點就是,超出部分都不會顯示,而普通的box-shadow是基於這個盒子作的陰影,理所固然的陰影也被裁剪掉了。
ui
box-shadow
加上內陰影box-shadow: inset 3px 2px 16px #bbb;
(可是陰影是不會根據你的線條來造成的,仍是同樣根據盒子,因此使用起來要見仁見智了) clip-path:circle()
與 clip-path: ellipse()
clip-path:circle
是用來裁剪圓形,單位也是支持px
與%
,它提供了三個參數(圓形半徑 at x方向座標 y方向座標)
clip-path: ellipse
跟上面區別就在於它把圓的半徑拆分紅x方向的半徑
/y方向的半徑
.demo_box{
width: 100px;
height: 100px;
border-radius:50%;
background:#ffa700;
clip-path: polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%, 0% 25%, 50% 50%, 0% 80%);
animation:a 1s infinite alternate;
}
@keyframes a {
0%, 10% {
clip-path: polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%, 0% 25%, 50% 50%, 0% 80%)
}
90%, 100% {
clip-path: polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%, 0% 50%, 60% 50%, 0% 60%)
}
}
複製代碼
shape-outside
讓圖形嵌入文字中shape-outside
與clip-path
同樣都有對應的polygon
、circle
、ellipse
它們對應的參數也是同樣的,須要div浮動才能生效
路線的條紋是截圖工具的問題其實是沒有的。
<div class="scan"></div>
.scan {
width: 150px;
height: 150px;
margin: 30px auto;
position: relative;
background: linear-gradient(to left, #108EE9, #108EE9) left top no-repeat, linear-gradient(to bottom, #108EE9, #108EE9) left top no-repeat, linear-gradient(to left, #108EE9, #108EE9) right top no-repeat, linear-gradient(to bottom, #108EE9, #108EE9) right top no-repeat, linear-gradient(to left, #108EE9, #108EE9) left bottom no-repeat, linear-gradient(to bottom, #108EE9, #108EE9) left bottom no-repeat, linear-gradient(to left, #108EE9, #108EE9) right bottom no-repeat, linear-gradient(to left, #108EE9, #108EE9) right bottom no-repeat;
background-size: 3px 20px, 20px 3px, 3px 20px, 20px 3px;
}
.scan::after {
content: '';
width: 140px;
border: 1px solid #BBE2FF;
position: absolute;
left: 5px;
top: 2px;
animation: myfirst 4s infinite;
}
@keyframes myfirst {
from {
top: 2px;
}
to {
top: 144px;
}
}
複製代碼