Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 Houdini 扩展 CSS 的跨浏览器绘制能力

使用 Houdini 扩展 CSS 的跨浏览器绘制能力

作者头像
ConardLi
发布于 2021-09-08 07:30:00
发布于 2021-09-08 07:30:00
83900
代码可运行
举报
文章被收录于专栏:code秘密花园code秘密花园
运行总次数:0
代码可运行

CSS Houdini 是一个总称,它描述了一系列底层的浏览器 API,这些 API 为开发者提供了对编写的样式更强大的能力。

Houdini 通过 Typed Object Model 启用更多的语义化 CSS 。开发者可以通过属性和值 API 定义具有语法、默认值和继承的高级 CSS 自定义属性。

Typed Object Model:https://developer.mozilla.org/en-US/docs/Web/API/CSS_Typed_OM_API/Guide

它还引入了绘制、布局和动画工作集,通过使作者更容易地与浏览器渲染引擎的样式和布局过程挂钩,从而开辟了一个充满可能性的世界。

Houdini worklets

Houdini worklets 是一个运行在主线程之外的浏览器指令,可以在需要时调用。Worklets 使你能够编写模块化 CSS 来完成特定的需求,并且只需要一行 JavaScript 即可导入和注册。与 CSS 样式的 Service Worker 非常相似,Houdini 工作集已注册到你的应用程序,并且一旦注册就可以在你的 CSS 中按名称使用。

写入工作集文件 注册工作集模块 ( CSS.paintWorklet.addModule(workletURL)) 使用工作集 ( background: paint(confetti))

CSS Painting API

CSS Painting API 就是这样一个 worklet 的例子,它允许开发者定义类似画布的自定义绘画函数,这些函数可以直接在 CSS 中用作背景、边框、遮罩等等。你可以在自己的用户界面中使用CSS Paint

例如,你可以编写自己的 Paint 工作集,或使用现有的已发布工作集,而不是等待浏览器实现有角度的边框功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.angled {
  --corner-radius: 15 0 0 0;
  --paint-color: #6200ee;
  --stroke-weight: 0;

  /* Mask every angled button with fill mode */
  -webkit-mask: paint(angled-corners, filled);
}

.outline {
  --stroke-weight: 1;

  /* Paint outline */
  border-image: paint(angled-corners, outlined) 0 fill !important;
}

CSS Painting API 目前是支持最好的 Houdini API 之一,这个规范也是 W3C 的候选推荐。它目前在所有基于 Chromium 的浏览器中启用,在 Safari 中部分支持,并且正在考虑用于 Firefox

即使没有完整的浏览器支持,你仍然可以使用 Houdini Paint API 发挥你的创意,使用 CSS Paint Polyfill ,你的样式可以在所有现代浏览器中都有效。为了展示一些独特的实现,以及提供资源和工作集库,Houdini 官方团队开发了 houdini.how

Houdini.howHoudini 工作集和资源的库和参考。它提供了你需要了解的有关 CSS Houdini 的一切:浏览器支持、其各种 API 的概述、使用信息、附加资源和实时绘制工作集示例。Houdini.how 上的每个示例都由 CSS Paint API 支持,这意味着它们都适用于所有现代浏览器。

使用 Houdini

Houdini worklets 必须在本地通过服务器运行,或者在生产环境中通过 HTTPS 运行。为了使用 Houdini worklets,你需要在本地安装它或使用像 unpkg CDN 来加载资源。然后,你需要在本地注册工作集。

有几种方法可以将 Houdini.how 中的工作集在你自己的 Web 项目中使用。它们可以通过 CDN以原型能力加载,也可以使用 npm 模块自行管理工作集。无论哪种方式,你还需要加载 CSS Paint Polyfill 以确保它们是跨浏览器兼容的。

1. 使用 CDN

unpkg 加载时,可以直接链接到 worklet.js 文件,无需在本地安装 workletUnpkg将解析 worklet.js 作为主脚本,或者你可以自己指定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CSS.paintWorklet.addModule("https://unpkg.com/<package-name>");

要选择性地注册自定义属性,请同时加载 properties.js 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://unpkg.com/<package-name>/properties.js"></script>

加载 CSS Paint Polyfill

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://unpkg.com/css-paint-polyfill"></script>

2. 通过 NPM 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install <package-name>
npm install css-paint-polyfill

导入此包不会自动注入绘制工作集。要安装工作集,你需要生成一个解析为包的 worklet.jsURL,并注册它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CSS.paintWorklet.addModule(..file-path/worklet.js)

以下是如何在现代打包器中使用带有绘制 polyfillHoudini 的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'css-paint-polyfill';
import '<package-name>/properties.js'; // optionally register properties
import workletURL from 'url:<package-name>/worklet.js';

CSS.paintWorklet.addModule(workletURL);

抖音前端正急缺人才,如果你想加入我们,欢迎加我微信和我联系。另外如果你想加入前端、面试、理财等交流群,或者你有任何其他事情想和我交流也可以添加我的个人微信 ConardLi 。

文中如有错误,欢迎在后台和我留言,如果这篇文章帮助到了你,欢迎点赞、在看和关注。你的点赞、在看和关注是对我最大的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code秘密花园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CSS Houdini:用浏览器引擎实现高级CSS效果
Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织或者神奇魔法,它是一系列与CSS引擎相关的浏览器API的总称。
2020labs小助手
2022/07/11
8410
CSS Houdini实现动态波浪纹
CSS Houdini 号称 CSS 领域最令人振奋的革新。CSS 本身长期欠缺语法特性,可拓展性几乎为零,并且新特性的支持效率太低,兼容性差。而 Houdini 直接将 CSS 的 API 暴露给开发者,以往完全黑盒的浏览器解析流开始对外开放,开发者可以自定义属于自己的 CSS 属性,从而定制和扩展浏览器的展示行为。
WecTeam
2019/12/16
1.3K0
CSS Houdini实现动态波浪纹
只听说过CSS in JS,怎么还有JS in CSS?
CSS in JS是一种解决css问题想法的集合,而不是一个指定的库。从CSS in JS的字面意思可以看出,它是将css样式写在JavaScript文件中,而不需要独立出.css、.less之类的文件。将css放在js中使我们更方便的使用js的变量、模块化、tree-shaking。还解决了css中的一些问题,譬如:更方便解决基于状态的样式,更容易追溯依赖关系,生成唯一的选择器来锁定作用域。尽管CSS in JS不是一个很新的技术,但国内的普及程度并不高。由于Vue和Angular都有属于他们自己的一套定义样式的方案,React本身也没有管用户怎样定义组件的样式[1],所以CSS in JS在React社区的热度比较高。
疯狂的技术宅
2021/04/23
7K0
只听说过CSS in JS,怎么还有JS in CSS?
【CSS】Houdini, CSS的成人礼
简单地讲,Paint API就是允许你通过JavaScript注册一个背景函数,类似于linear-gradient()那种,在定义时候可以提供Canvas的2Dcontext给你自行绘制,你通过JS注册这个背景函数后呢,就可以自由地在CSS中通过以下方式使用该背景
啦啦啦321
2019/09/29
7080
【CSS】Houdini, CSS的成人礼
用 Houdini Paint API 打造动态UI元素
CSS Houdini 允许开发者使用 JavaScript 直接与 CSS 渲染引擎交互;Amazing!!
掘金安东尼
2023/11/20
2040
用 Houdini Paint API 打造动态UI元素
现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式!
在上一篇文章中 -- 现代 CSS 之高阶图片渐隐消失术,我们借助了 CSS @Property 及 CSS Mask 属性,成功的实现了这样一种图片渐变消失的效果:
Sb_Coco
2022/12/13
7740
现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式!
CSS Houdini 通览
Houdini是一个国际逃脱艺术家,通常使用各种玄幻的方式打破观众的想象,收获到各种惊叹。
IMWeb前端团队
2019/12/04
5850
现代 CSS 高阶技巧,完美的波浪进度条效果!
本文是 CSS Houdini 之 CSS Painting API 系列第三篇。
Sb_Coco
2022/12/15
1K0
现代 CSS 高阶技巧,完美的波浪进度条效果!
如何使用CSS Paint API动态创建与分辨率无关的可变背景
现代 Web 应用对图像的需求量很大,它们占据网络下载的大部分字节。通过优化它们,你可以更好地利用它们的性能。如果你碰巧使用几何图形作为背景图像,有一个替代方案:你可以使用CSS Paint API以编程方式生成背景。
张张
2020/07/09
2.4K0
如何使用CSS Paint API动态创建与分辨率无关的可变背景
来自新时代的CSS
最近听说TypeScript3.7添加了对Optional Chaining[2]的支持,然后就想着给鱼头的脚手架ying-template[3]的TS版本升级,然后在命令行发现这样的一句信息:
陈大鱼头
2020/04/16
7380
来自新时代的CSS
拥抱更底层技术——从CSS变量到Houdini
平时写CSS,感觉有很多多余的代码或者不好实现的方法,于是有了预处理器的解决方案,主旨是write less &do more。其实原生css中,用上css变量也不差,加上bem命名规则只要嵌套不深也能和less、sass的嵌套媲美。在一些动画或者炫酷的特效中,不用js的话可能是用了css动画、svg的animation、过渡,复杂动画实现用了js的话可能用了canvas、直接修改style属性。用js的,然后有没有想过一个问题:“要是canvas那套放在dom上就爽了”。因为复杂的动画频繁操作了dom,违背了倒背如流的“性能优化之一:尽量少操作dom”的规矩,嘴上说着不要,手倒是很诚实地ele.style.prop = <newProp>,可是要实现效果这又是无可奈何或者大大减小工作量的方法。
IMWeb前端团队
2019/12/03
7290
拥抱更底层技术——从CSS变量到Houdini
CSS Painting API
本文是 CSS Houdini 之 CSS Painting API 系列第四篇。
Sb_Coco
2022/12/19
1.1K0
CSS Painting API
拥抱更底层技术——从CSS变量到Houdini 0. 前言1. CSS变量2. CSS type OM3. paint API4. 自定义属性最后
平时写CSS,感觉有很多多余的代码或者不好实现的方法,于是有了预处理器的解决方案,主旨是write less &do more。其实原生css中,用上css变量也不差,加上bem命名规则只要嵌套不深也能和less、sass的嵌套媲美。在一些动画或者炫酷的特效中,不用js的话可能是用了css动画、svg的animation、过渡,复杂动画实现用了js的话可能用了canvas、直接修改style属性。用js的,然后有没有想过一个问题:“要是canvas那套放在dom上就爽了”。因为复杂的动画频繁操作了dom,违背了倒背如流的“性能优化之一:尽量少操作dom”的规矩,嘴上说着不要,手倒是很诚实地ele.style.prop = <newProp>,可是要实现效果这又是无可奈何或者大大减小工作量的方法。
lhyt
2019/03/14
9751
拥抱更底层技术——从CSS变量到Houdini 0. 前言1. CSS变量2. CSS type OM3. paint API4.  自定义属性最后
Vite2 静态资源处理
例如,在开发阶段,imgUrl将是/img.png,而在生产版本中,它将变成/assets/img.2d8efhg.png。
公众号---人生代码
2021/03/16
2.3K0
CSS Houdini 是个啥?让你的网页“魔法上身”!
有一天,设计师又来了:“这个按钮的背景加个动态星云效果,颜色随着页面滚动变化,行吗?” 还有产品经理:“咱的列表能不能整得像Pinterest那样,排列得艺术点?”
前端达人
2025/01/08
1150
CSS Houdini 是个啥?让你的网页“魔法上身”!
科普 | 一文详解 CSS-in-JS
几年前,如果有人提到用 JavaScript 编写 HTML 作为构建大型网站的一种方式,很多开发者会当这作不可理喻的想法,但是现在,使用 React、Vue 和 Angular 框架为组件开发的应用正在慢慢替代传统的 Web 开发。
CloudBest
2021/03/12
3.1K1
科普 | 一文详解 CSS-in-JS
[第25期] 你不知道的 CSS - by Chrome 2019
最近看了 Chrome Dev Summit 2019 大会视频, 了解到了很多之前不知道的 CSS 新特性,挺有意思的。
皮小蛋
2020/03/02
7560
【译】开始在web使用JS Modules
原文说的JS modules,实际上指的是ES6的模块化特性,通过<script type="module">可以实现不经过打包直接在浏览器中import/export,此玩法确实让人眼前一亮。
elson
2018/07/04
2K0
【译】开始在web使用JS Modules
在浏览器控制台安装 NPM 包是什么体验?
我们都知道,npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系。虽然作为命令行工具的 npm 近年来逐渐式微,但是作为广泛使用的存储库的 npm,却依然如日中天,还是世界上最大的软件注册表。
刘小夕
2021/11/25
1.5K0
在浏览器控制台安装 NPM 包是什么体验?
跟着whatwg看一遍事件循环
对于单线程来说,事件循环可以说是重中之重了,它为任务分配不同的优先级,井然有序的调度。让js解析,用户交互,页面渲染等互不冲突,各司其职。
用户8200753
2023/10/22
1370
相关推荐
CSS Houdini:用浏览器引擎实现高级CSS效果
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档