CSS houdini是一个各大厂商的工程师组成工作组,志在建立一系列的API,让开发者能够介入浏览器的CSS 引擎操作。
浏览器支持详情见https://ishoudinireadyyet.com/,简单来说,还是Chrome支持最好,其中Paint API(Chrome 65)和Type OM(Chrome 66)已经完全支持。
今天就简单介绍一下Properties & Values API和Paint API
Properties & Values API
Properties & Values API扩展了CSS variables,可以注册有值类型,初始值和已定义的继承行为的属性。使用registerProperty(PropertyDescriptor)
方法来注册自定义属性,其中PropertyDescriptor
是一个配置选项对象,包含四个属性。
- name,自定义属性名称
- syntax,如何解析该自定义属性
- inherits,是否继承DOM tree,bool类型
- initialValue,初始值
下面看一个谷歌开发者文档的一个demo,贴出部分代码如下。(如果Chrome没有效果,访问chrome://flags
开启Experimental Web Platform features
)
|
|
|
|
看了代码后,是不是豁然开朗😄。syntax
可选值还有length
、number
、image
等等。详情见css-properties-values-api。
Paint API
CSS Paint可以在CSS中使用JavaScript编写好的图像。先定义一个Paint Worklet
的类,然后使用registerPaint
函数注册,最后使用CSS.paintWorklet.addModule()
来加载CSS paint worklet文件。
Paint API
必须在HTTPS
服务器上或者localhost
上才能使用。
下面看一个例子,也是来谷歌开发者文档的demo结合demo的代码来说明。
|
|
在paintworklet.js
中,先定义名为myPainter
的Paint Worklet
,然后把它注册为ripple
,然后通过CSS.paintWorklet.addModule
方法加载这个Paint Worklet
,最后在CSS中使用paint(ripple)
。
Paint Worklet
中的paint()
方法中的参数含义如下:
ctx
:PaintRenderingContext2D
对象,Canvas
的CanvasRenderingContext2D
对象差不多,是CanvasRenderingContext2D
的子集,实现了Canvas
大部分功能。geom
:PaintSize
对象,包括元素的宽高信息properties
:StylePropertyMapReadOnly
对象,通过在inputProperties
中定义返回的属性值,来获取CSS属性值,包括自定义属性。
在paint()
方法中,还可以有第四个参数,用来获取从CSS中传入的参数。在Paint Worklet
中定义inputArguments
需要传入什么样的参数。
|
|