藉助CSS Shapes實現元素滾動自動環繞iPhone X的劉海

果真,多看纔會有長進javascript

iPhone X刘海与列表交互

交互視頻效果戳這裏體驗: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的兼容性以及結束語

CSS Shapes的兼容性爲Chrome瀏覽器和Safari瀏覽器(包括iOS)都是支持的,也就意味着咱們是能夠在iPhone上使用的,完美。只是須要注意的是在iOS10.2及其以前的版本,CSS Shapes的使用仍是須要加webkit私有前綴的,但聽說iPhone X至少默認iOS 11,而劉海頭交互效果就是針對iPhone X處理的,所以webkit私有前綴不加也不要緊。

CSS Shapes的Safari瀏覽器兼容性

 

 

結束語中,知識的廣度很重要,一開始看到也不知道怎麼寫。想到的是全靠js

相關文章
相關標籤/搜索