果真,多看纔會有長進javascript
交互視頻效果戳這裏體驗:http://t.cn/Rp01GKccss
就是頁面滾動的時候,列表會自動繞着iPhone X的劉海排列。html
用了java
CSS Shapes中有個CSS屬性名爲shape-outside
,可讓內聯元素以不規則的形狀進行外部排列,其語法以下(參考自MDN):css3
/* 關鍵字值 */ shape-outside: none; shape-outside: margin-box; shape-outside: content-box; shape-outside: border-box; shape-outside: padding-box; /* 函數值 */ shape-outside: circle(); shape-outside: ellipse(); shape-outside: inset(10px 10px 10px 10px); shape-outside: polygon(10px 10px, 20px 20px, 30px 30px); /* <url>值 */ shape-outside: url(image.png); /* 漸變值 */ shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);
ps:polygon()多邊形web
shape-outside
屬性要想生效,自己須要是浮動float
元素。瀏覽器
本文demo效果實現使用的是shape-outside:polygon()
,經過點座標勾勒出和齊劉海形狀類似的多邊形形狀,CSS代碼爲:iphone
.shape { float: left; shape-outside: polygon(0 0, 0 150px, 16px 154px, 30px 166px, 30px 314px, 16px 326px, 0 330px, 0 0); }
具體劉海的位置用js來肯定ide
box.addEventListener('scroll', function () { var scrollTop = box.scrollTop; // 滾動偏移應用在shape-outside上 shape.style.shapeOutside = 'polygon(0 0, 0 '+ (150 + scrollTop) +'px, 16px '+ (154 + scrollTop) +'px, 30px '+ (166 + scrollTop) +'px, 30px '+ (314 + scrollTop) +'px, 16px '+ (326 + scrollTop) +'px, 0 '+ (330 + scrollTop) +'px, 0 0)'; });
後面寫了個更簡單的作法函數
經過圖片就能夠了
.shape { float: left; shape-outside: url(liu-outside.png); margin-top: 150px; }
box.addEventListener('scroll', function () { var scrollTop = box.scrollTop; // 滾動偏移應用在margin-top上 shape.style.marginTop = (150 + scrollTop) + 'px'; });
後續補充
demo:
https://www.zhangxinxu.com/study/201709/css3-shapes-url-for-iphone-x.html
有個細節說明
這裏有個細節須要說明下,那就是做爲環繞區域的圖片和前面顯示的那個劉海圖片不是一張圖片,由於咱們的劉海區域須要和後面的文字有一段的間隙,所以,url(liu-outside.png)
中的這張'liu-outside.png'
圖片是有特別的實色填充處理的(擴展右側環繞區域尺寸):
CSS Shapes的兼容性爲Chrome瀏覽器和Safari瀏覽器(包括iOS)都是支持的,也就意味着咱們是能夠在iPhone上使用的,完美。只是須要注意的是在iOS10.2及其以前的版本,CSS Shapes的使用仍是須要加webkit
私有前綴的,但聽說iPhone X至少默認iOS 11,而劉海頭交互效果就是針對iPhone X處理的,所以webkit
私有前綴不加也不要緊。
結束語中,知識的廣度很重要,一開始看到也不知道怎麼寫。想到的是全靠js