一、iPhone X的刘海发型和衍生的交互

iPhone X造型上有个显著的特质,就是有个明显的刘海。

然后,也出现了一些酷酷的交互。

例如下面这个交互:

交互视频效果戳这里体验:http://t.cn/Rp01GKc

就是页面滚动的时候,列表会自动绕着iPhone X的刘海排列。

看上面微博截图的反应,好像觉得这个效果实现很难,实际上,CSS3里面针对这种特定形状环绕的效果已经支持很久了,CSS3 Shapes和CSS3 Regions都是可以实现的,本文就将展示如何使用CSS3 Shapes实现元素内容在滚动的时候自动环绕iPhone X的齐刘海的效果。

二、CSS3 Shapes实现元素滚动自动环绕iPhone X头部刘海效果

眼见为实先看效果,您可以狠狠的点击这里:CSS3 Shapes实现列表环绕iPhone X刘海头demo

滚动列表,可以看到类似下面gif的效果:

环绕齐刘海滚动实现原理

CSS Shapes中有个CSS属性名为shape-outside,可以让内联元素以不规则的形状进行外部排列,其语法如下(参考自MDN):

/* 关键字值 */
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);

shape-outside属性要想生效,本身需要是浮动float元素。

本文demo效果实现使用的是shape-outside:polygon(),通过点坐标勾勒出和齐刘海形状相似的多边形形状,CSS代码为:

.shape {float: left;shape-outside: polygon(0 0, 0 150px, 16px 154px, 30px 166px, 30px 314px, 16px 326px, 0 330px, 0 0);
}

如下图紫色区域示意:

此时,后面没有设置BFC(块状格式化上下文)的列表元素就会自动环绕这个形状排列,也就是自动避开了齐刘海区域。

然后,只要搞个假的iPhone X的齐刘海图片覆盖在区域上就可以了。

至此,一个静态的列表环绕齐刘海的效果就完成了。

下面关键的问题是如何让滚动的时候,列表元素动态的跟着环绕呢?

由于shape-outside所在的元素是浮动元素,因此,必定会跟着容器一起滚动,我们需要的效果是我们所绘制的这个刘海区域需要是固定的,怎么办?此时,我是借助JavaScript处理的。

原理很简单,监听容器的滚动事件,让我们的shape-outside绘制的区域实时偏移滚动的大小。此时肉眼看上去的效果就是shape-outside区域永远固定在了滚动容器clientHeight的中间。

整个效果就这么实现了,相关JS如下:

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)';
});

更详尽的代码尽在demo页面。

三、CSS Shapes环绕iPhone X刘海的其它更简易方法

如果我们的技术选型是更看重简单易懂,而不是资源消耗与占用,还可以使用shape-outside:url(image.png)语法实现类似的效果,其中'image.png'就是用来被环绕的图片,环绕与否是基于计算alpha通道决定,用句简单的话描述,就是沿着图片非透明区域环绕。

由于使用url()的形状计算是基于图片元素,和inset(), circle(), ellipse()或者polygon()这些基础形状方法的计算性质不一样,因此,可以直接使用垂直方向的margin进行偏移。这要比polygon()这样实时计算坐标位置要好理解的多。

我们不妨看下CSS和JS代码,如下:

.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';
});

可以看到,当我们滚动容器的时候,改变的就一个marginTop值就好了;而上面的 shape-outside:polygon()实现需要同时改变多个坐标值。

眼见为实,您可以狠狠的点击这里:shape-outside url实现列表环绕iPhone X刘海demo

如果是iPhone手机,还可以扫下面码体验:

效果类似:

有个细节说明
这里有个细节需要说明下,那就是作为环绕区域的图片和前面显示的那个刘海图片不是一张图片,因为我们的刘海区域需要和后面的文字有一段的间隙,因此,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和JS代码,其实就几行代码而已,键盘敲一下,几分钟就结束了。

那为什么广大前端一看到这个效果觉得牛,甚至认为“UI和前端已经哭晕在厕所”呢?其实就是不知道CSS3 Shapes和CSS3 Regions这些与环绕布局相关的CSS属性。

所以,下班回家,经常关注一些前沿技术还是很有必要的,注意是前沿技术,不是流行技术。很多前沿技术因为使用场景小众,并不流行,甚至你可以几年项目都用不到。如果你想在技术上有所造诣,一定要摒弃功利之心,花时间了解之。

以上~

行文匆忙,如果有表述不准确的地方,欢迎指正。

by  zhangxinxu from  http://www.zhangxinxu.com/wordpress/?p=6426

借助CSS Shapes实现元素滚动自动环绕iPhone X的刘海 #精选JAVASCRIPTCSSCHROMECSS3APPLE相关推荐

  1. 借助CSS Shapes实现元素滚动自动环绕iPhone X的刘海

    一.iPhone X的刘海发型和衍生的交互 iPhone X造型上有个显著的特质,就是有个明显的刘海. 然后,也出现了一些酷酷的交互. 例如下面这个交互: 交互视频效果戳这里体验:http://t.c ...

  2. Css实现刘海,CSS3 Shapes实现列表自动环绕iPhone X刘海头 » 张鑫旭-鑫空间-鑫生活...

    展示 为了防止看花眼 我就手动敲下面的文字 原本我偷懒 直接就是列表1,列表2 后来测试发现不行 内容太接近 滚动时候 无法准确感受到靠近效果 这样是不行的 做东西就要精益求精 demo页面也应如此 ...

  3. Css实现刘海,使用CSS Shapes实现滚动环绕iPhone X刘海效果

    一.iPhone X的刘海发型和衍生的交互 iPhone X造型上有个显著的特质,就是有个明显的刘海. 然后,也出现了一些酷酷的交互. 就是页面滚动的时候,列表会自动绕着iPhone X的刘海排列. ...

  4. iphone桌面滑动效果html5,使用CSS Shapes实现滚动环绕iPhone X刘海效果

    一.iPhone X的刘海发型和衍生的交互 iPhone X造型上有个显著的特质,就是有个明显的刘海. 然后,也出现了一些酷酷的交互. 例如下面这个交互视频效果:http://t.cn/Rp01GKc ...

  5. CSS内容超出元素高度滚动,并且滚动条隐藏

    CSS内容超出元素高度滚动,并且滚动条隐藏 给父元素设置宽度,溢出隐藏,子元素设置 // html <div class="box"><div class=&qu ...

  6. 奇妙的 CSS shapes(CSS图形)

    CSS 发展到今天已经越来越强大了.其语法的日新月异,让很多以前完成不了的事情,现在可以非常轻松的做到.今天就向大家介绍几个比较新的强大的 CSS 功能: clip-path shape-outsid ...

  7. css3 shapes是什么意思,如何在Web中使用CSS Shapes

    布局一般都是遵循按行和列等线性原则,Web网站的布局到今天为止很大程度上受到这些原则的影响.虽然CSS Grid的出现让布局变得更好,更灵活,但相对于印刷媒体而言,Web布局总体上还是受到很好的限制, ...

  8. css3 shapes是什么意思,CSS Shapes有哪些让人兴奋之处

    我最近听了JEN Simmons在 Boagworld播客的关于CSS Shapes的采访,虽然我之前已经听说过CSS Shapes好久了,但是我还没有亲自尝试过.因为某些原因,这个采访强迫我坐下来好 ...

  9. html中选择字体的元素,深入探讨CSS中字体元素

    深入探讨CSS中字体元素 更新时间:2006年09月25日 00:00:00   作者: 字体的处理在网页设计中无论怎么强调也不为过,毕竟网页使用来传递信息的,而最经典最直接的信息传递方式就是文字,所 ...

最新文章

  1. c语言递归求五阶行列式源代码,久游堂怎么样 -官网
  2. 谷歌开源下一代推荐系统模拟器:RecSim NG
  3. js调试微博登录案例
  4. iOS 正则表达式使用的三种方式语法
  5. cassandra_Apache Cassandra和低延迟应用程序
  6. (转)初次体验.net Ajax无刷新技术
  7. 时针与分针的夹角的易错点
  8. Android成企业安全主要威胁的十大原因
  9. 百度大脑活体检测+合成图鉴别面前,人脸“照片活化”黑产攻击一秒被擒
  10. 李宇春-唐人街无损品质mp3-flac音乐歌曲网盘免费下载
  11. juns java,Java中的基本數據類型
  12. Java中巧算年龄的代码,巧算年龄 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 怎样在微信、手机中浏览查看3D模型
  14. django完成一个可重用注册登录系统
  15. 受用一生的高效PyCharm使用技巧(三)
  16. manifestdependency,manifest文件
  17. chromium 84.0.4122.0 WebView apk 启动流程
  18. 花千骨歌曲大全 附简谱
  19. 如何修改 SQL Server 中的实例名 ?
  20. 文本域(Textarea)背景的美化

热门文章

  1. 风控模型共享如何打掉黑产?
  2. 小米总参php面试题_前端面试题2019年小米工程师面试题及答案解析
  3. 艾默生流量计在流量测量上显出巨大的潜力
  4. 优化关键词,实现排名优势!
  5. 黄山三日游(2007-06-02--06-04)
  6. IINA 1.1.0beta1中文版 - Mac最强万能视频播放器
  7. 固态硬盘接口分类和速度
  8. web开发入门经典,96道前端面试题
  9. 一道有意思并对你有帮助的Promise题
  10. 原来404页面可以这样做【转】