关于css:CSS-Houdini用浏览器引擎实现高级CSS效果
vivo 互联网前端团队-Wei XingHoudini被称之为Magic of styling and layout on the web,看起来非常神秘,但实际上,Houdini并非什么神秘组织或者神奇魔法,它是一系列与CSS引擎相干的浏览器API的总称。 一、Houdini 是什么在理解之前,先来看一些Houdini能实现的成果吧: 反向的圆角成果(Border-radius): 动静的球形背景(Backgrond): 黑白边框(Border): 神奇吧,要实现这些成果应用惯例的CSS可没那么容易,但对CSS Houdini来说,却很easy,这些成果只是冰山一角,CSS Houdini能做的有更多。(这些案例均来自Google Chrome Labs,更多案例能够通过 Houdini Samples 查看)。 看完成果,再来说说Houdini到底是什么。 首先,Houdini 的呈现最间接的目标是为了解决浏览器对新的CSS个性反对较差以及Cross-Browser的问题。咱们晓得有很多新的CSS个性尽管很棒,但它们因为不被支流浏览器广泛支持而很少有人去应用。 随着CSS标准在一直地更新迭代,越来越多无益的个性被纳入进来,然而一个新的CSS个性从被提出到成为一个稳固的CSS个性,须要通过漫长地期待,直到被大部分浏览器反对时,能力被开发者宽泛地应用。 而 Houdini 的呈现正是洞察和解决了这一痛点,它将一系列CSS引擎API凋谢进去,让开发者能够通过JavasScript发明或者扩大现有的CSS个性,甚至发明本人的CSS渲染规定,给开发者更高的CSS开发自由度,实现更多简单的成果。 二、JS Polyfill vs Houdini有人会问,实际上很多新的CSS个性在被浏览器反对之前,也有可代替的JavaScript Polyfill能够应用,为什么咱们依然须要Houdini呢?这些Polyfill不是同样能够解决咱们的问题吗? 要答复这个问题也很简略,JavaScript Polyfill绝对于Houdini有三个显著的缺点: 1.不肯定能实现或实现艰难。 CSSOM凋谢给JavaScript的API很少,这意味着开发者能做的很无限,只能简略地操纵DOM并对款式做动静计算和调整,光是去实现一些简单的CSS新个性的Polyfill就曾经很难了,对于更深层次的Layout、Paint、Composite等渲染规定更是无能为力。所以当一个新的CSS个性被推出时,通过JavaScript Polyfill不肯定可能残缺地实现它。2.实现成果差或有应用限度。 JavaScript Polyfill是通过JavaScript来模仿CSS个性的,而不是间接通过CSS引擎进行渲染,通常它们都会有肯定的限度和缺点。例如,大家熟知的css-scroll-snap-polyfill就是针对新的CSS个性Scroll Snap产生的Polyfill,但它在应用时就存在应用限度或者原生CSS体现不统一的问题。3.性能较差。 JavaScript Polyfill可能造成肯定水平的性能损耗。JavaScript Polyfill的执行机会是在DOM和CSSOM都构建实现并且实现渲染后,通常JavaScript Polyfill是通过给DOM元素设置内联款式来模仿CSS个性,这会导致页面的从新渲染或回流。尤其是当这些Polyfill和滚动事件绑定时,会造成更加显著的性能损耗。 Houdini的诞生让CSS新个性不再依赖于浏览器,开发者通过间接操作CSS引擎,具备更高的自由度和性能劣势,并且它的浏览器反对度在一直晋升,越来越多的API被反对,将来Houdini必然会减速走进web开发者的世界,所以当初对它做一些理解也是必要的。 在本文,咱们会介绍Houdini的APIs以及它们的应用办法,看看这些API以后的反对状况,并给出一些在生产环境中应用它们的倡议。 Houdini的名称与一位驰名美国逃脱魔术师Harry Houdini的名称一样,兴许正是取逃脱之意,让CSS新个性逃离浏览器的掌控。三、Houdini APIs上文提到CSS Houdini提供了很多CSS引擎相干的API,依据Houdini提供的标准阐明文件,API共分为两种类型:high-level APIs 和 low-level APIs 。 high-level APIs:顾名思义是高层次的API,这些API与浏览器的渲染流程相干。 Paint API提供了一组与绘制(Paint)过程相干的API,咱们能够通过它自定义的渲染规定,例如调整色彩(color)、边框(border)、背景(background)、形态等绘制规定。Animation API提供了一组与合成(composite)渲染相干的API,咱们能够通过它调整绘制层级和自定义动画。Layout API提供了一组与布局(Layout)过程相干的API,咱们能够通过它自定义的布局规定,相似于实现诸如flex、grid等布局,自定义元素或子元素的对齐(alignment)、地位(position)等布局规定。low-level APIs:低层次的API,这些API是high-level APIs的实现根底。 Typed Object Model APICSS Properties & Values APIWorkletsFont Metrics APICSS Parser API这些APIs的反对状况在不断更新中,能够看到以后最新的一次更新工夫是在2021年5月份,还是比拟沉闷的。(注:图片来源于Is Houdini ready yet? ) ...