位置: IT常识 - 正文

CSS Houdini:用浏览器引擎实现高级CSS效果(css代码怎么在浏览器运行)

编辑:rootadmin
CSS的任何新特性从诞生到被浏览器普遍支持,要经历漫长的周期,而CSS Houdini开放了底层接口,让开发者直接接触、开发原生的CSS效果,实现更为复杂、流畅的效果和动画,无需等待,快学起来吧! ...

推荐整理分享CSS Houdini:用浏览器引擎实现高级CSS效果(css代码怎么在浏览器运行),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:浏览器对css的解析顺序,浏览器加载css原理,css mini,浏览器对css的解析顺序,css浏览器,浏览器加载css原理,css代码怎么在浏览器运行,css代码怎么在浏览器运行,内容如对您有帮助,希望把文章链接给更多的朋友!

vivo 互联网前端团队-Wei Xing

Houdini被称之为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和滚动事件绑定时,会造成更加明显的性能损耗。

CSS Houdini:用浏览器引擎实现高级CSS效果(css代码怎么在浏览器运行)

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?)

对比下图2018年底的情况,Houdini目前得到了更广泛的支持,我们也期待图里更多绿色的板块被逐渐点亮。

大家可以访问Is Houdini ready yet?看到Houdini的最新支持情况。

下文中,我们会着重介绍Typed Object Model API、CSS Properties & Values API、Worklets和Paint API、Animation API,因为它们目前具有比其他API更好的支持度,且它们的特性已经趋于稳定,在未来不会有很大的变更,大家也能在了解它们之后直接将它们使用在项目中。

四、 Typed Object Model API

在Houdini出现以前,我们通过JavaScript操作CSS Style的方式很简单,先看看一段大家熟悉的代码。

// Before Houdiniconst size = 30target.style.fontSize = size + 'px' // "20px"const imgUrl = 'https://www.exampe.com/sample.png'target.style.background = 'url(' + imgUrl + ')' // "url(https://www.exampe.com/sample.png)"target.style.cssText = 'font-size:' + size + 'px; background: url('+ imgUrl +')' // "font-size:30px; background: url(https://www.exampe.com/sample.png)"

我们可以看到CSS样式在被访问时被解析为字符串返回,设置CSS样式时也必须以字符串的形式传入。开发者需要手动拼接数值、单位、格式等信息,这种方式非常原始和落后,很多开发者为了节省性能损耗,会选择将一长串的CSS Style字符串传入cssText,可读性很差,而且很容易产生隐蔽的语法错误。

Typed Object Model与TypeScript的命名类似,都增加了Type这个前缀,如果你使用过TypeScript就会了解到,TypeScript增强了类型检查,让代码更稳定也更易维护,Typed Object Model也是如此。

相比于上面晦涩的传统方法,Typed Object Model将CSS属性值包装为Typed JavaScript Object,让每个属性值都有自己的类型,简化了CSS属性的操作,并且带来了性能上的提升。通过JavaScript对象来描述CSS值比字符串具有更好的可读性和可维护性,通常也更快,因为可以直接操作值,然后廉价地将其转换回底层值,而无需构建和解析 CSS 字符串。

在Typed Object Model中CSSStyleValue是所有CSS属性值的基类,在它之下的子类用于描述各种CSS属性值,例如:

CSSUnitValueCSSImageValueCSSKeywordValueCSSMathValueCSSNumericValueCSSPositionValueCSSTransformValueCSSUnparsedValue其它

通过它们的命名就可以看出这些不同的子类分别用于表示哪种类型的CSS属性值,以CSSUnitValue为例,它可以用于表示带有单位的CSS属性值,例如font-size、width、height,它的结构很简单,由value和unit组成。

{ value: 30, unit: "px"}

可以看到,通过对象来描述CSS属性值确实比传统的字符串更易读了。

要访问和操作CSSStyleValue还需要借助两个工具,分别是attributeStyleMap和computedStyleMap(),前者用于处理内联样式,可以进行读写操作,后者用于处理非内联样式(stylesheet),只有读操作。

// 获取stylesheet样式target.computedStyleMap().get("font-size"); // { value: 30, unit: "px"}// 设置内联样式target.attributeStyleMap.set("font-size", CSS.em(5));// stylesheet样式仍然返回20pxtarget.computedStyleMap().get("font-size"); // { value: 30, unit: "px"}// 内联样式已经被改变target.attributeStyleMap.get("font-size"); // { value: 5, unit: "em"}

当然attributeStyleMap和computedStyleMap()还有更多可用的方法,例如clear、has、delete、append等,这些方法都为开发者提供了更便捷和清晰的CSS操作方式。

五、CSS Properties & Values API

根据MDN的定义,CSS Properties & Values API也是Houdini开放的一部分API,它的作用是让开发者显式地

本文链接地址:https://www.jiuchutong.com/zhishi/303718.html 转载请保留说明!

上一篇:mysql中regexp_replace函数的使用

下一篇:6.824 Lab 1: A simple web proxy

  • 联动云免押金需要多少信用分(联动云 免押金)

    联动云免押金需要多少信用分(联动云 免押金)

  • magisk manager干什么用的(magisk manager canary)

    magisk manager干什么用的(magisk manager canary)

  • 优慕课账号密码是什么(优慕课账号密码格式)

    优慕课账号密码是什么(优慕课账号密码格式)

  • 微信逻辑错误无法登录(微信提示逻辑错误怎么回事)

    微信逻辑错误无法登录(微信提示逻辑错误怎么回事)

  • 苹果6p正在搜索怎么办(苹果6s正在搜索)

    苹果6p正在搜索怎么办(苹果6s正在搜索)

  • 红米k20闪存规格(红米k20闪存规格参数)

    红米k20闪存规格(红米k20闪存规格参数)

  • 关闭了优化电池还是只能充80(关闭了优化电池充电还是很慢)

    关闭了优化电池还是只能充80(关闭了优化电池充电还是很慢)

  • ace升级coloros7充电变慢(ace升级coloros11)

    ace升级coloros7充电变慢(ace升级coloros11)

  • 怎样屏蔽拼多多的拼小圈(怎样屏蔽拼多多朋友圈)

    怎样屏蔽拼多多的拼小圈(怎样屏蔽拼多多朋友圈)

  • cad打开图纸不显示轴号(cad打开图纸不显示)

    cad打开图纸不显示轴号(cad打开图纸不显示)

  • 手机号没有实名认证怎么办(手机号没有实名认证停机了怎么办)

    手机号没有实名认证怎么办(手机号没有实名认证停机了怎么办)

  • 知乎删除评论对方能看到吗(知乎删除评论对人有害吗)

    知乎删除评论对方能看到吗(知乎删除评论对人有害吗)

  • 为什么苹果官网打开这么慢(为什么苹果官网比京东自营贵那么多)

    为什么苹果官网打开这么慢(为什么苹果官网比京东自营贵那么多)

  • 微信朋友圈只有一条线是怎么回事(微信朋友圈只有好友才能看到吗)

    微信朋友圈只有一条线是怎么回事(微信朋友圈只有好友才能看到吗)

  • vue怎么添加自制贴图(vue 添加自定义属性)

    vue怎么添加自制贴图(vue 添加自定义属性)

  • 苹果时间规划局怎么设置生日倒计时(苹果时间规划局怎么设置)

    苹果时间规划局怎么设置生日倒计时(苹果时间规划局怎么设置)

  • 手机怎么看淘宝等级几颗心(手机怎么看淘宝评价)

    手机怎么看淘宝等级几颗心(手机怎么看淘宝评价)

  • 华为屏保新闻怎么关闭(华为手机新闻屏保怎么关闭)

    华为屏保新闻怎么关闭(华为手机新闻屏保怎么关闭)

  • 1more耳机保修多长时间(耳机保修一年)

    1more耳机保修多长时间(耳机保修一年)

  • 交管12123怎么缴费(交管12123怎么缴款)

    交管12123怎么缴费(交管12123怎么缴款)

  • 充电宝旗舰版和标准版的区别(充电宝旗舰版和升级版有什么区别)

    充电宝旗舰版和标准版的区别(充电宝旗舰版和升级版有什么区别)

  • 怎么解除抖音拉黑的人(怎么解除抖音拉黑人)

    怎么解除抖音拉黑的人(怎么解除抖音拉黑人)

  • k歌怎么加好友(k歌怎么添加好友)

    k歌怎么加好友(k歌怎么添加好友)

  • 打印机转动有嘎嘎异响(打印机转动有嘎嘎异响能正常打印)

    打印机转动有嘎嘎异响(打印机转动有嘎嘎异响能正常打印)

  • vue路由的安装和使用(vue的路由器)

    vue路由的安装和使用(vue的路由器)

  • ML Visuals-神经网络画图神器(ml神经网络)

    ML Visuals-神经网络画图神器(ml神经网络)

  • 租集体土地建厂合法吗
  • 提取法定盈余公积是什么意思
  • 工会经费和工会会员会费
  • 年底计提是什么意思
  • 合并报表调整分录理解
  • 分摊房屋租赁费计入什么科目
  • 抵扣的发票可以部分红冲吗
  • 短期借款现金流
  • 出口专用发票应在哪里开
  • 高新技术企业账务处理注意事项
  • 经营租赁的资产应计入哪里
  • 一般纳税人销售二手车增值税税率
  • 未达起征点的增值税要交所得税吗
  • 忘记申报印花税,但是公司已经注销了怎么办
  • 企业范围内已利用的荒山要交城镇土地使用税吗
  • 员工因公负伤期间公司怎么开工资
  • 企业吸收合并税收政策
  • 分期收款所得税收入确认多少
  • 发放的工资比计提的多怎么办
  • 房地产企业如何计算土地使用税
  • 环评费入账的会计分录是什么啊
  • win10网络带宽
  • 您的磁盘
  • 苹果6s自动清理
  • php连接mysql数据库详细步骤(图文)
  • 企业票据贴现费怎么算
  • mmtraylsi.exe是什么进程 有什么作用 mmtraylsi进程查询
  • h5能不能自动播放
  • 电子发票和纸质发票的法律效力
  • 合并抵销
  • 增值税专用发票和普通发票的区别
  • javascrapt
  • 付报刊费计入什么科目
  • 邮寄的发票对方没收到怎么办
  • 土地扣除项目金额
  • 公司食堂的费用分录
  • 公司注销后如何追缴税款
  • 什么情况下提供个人征信
  • 国家税务总局金税四期
  • 社保的账务处理分录
  • 转月是下个月的意思吗
  • 工会经费怎样使用
  • 加盟费明细
  • 什么是电子银行服务
  • 如何把有余额的账单删除
  • 交易性金融资产的账务处理
  • 长期闲置机器设备评估方法
  • 劳务报酬支出怎么算
  • 报表中应交税金怎么算
  • 税控服务费全额抵扣怎么申报
  • 测试账户收入怎么处理
  • 公益性捐赠支出计入什么科目
  • 增加以前年度损益科目报表要改吗
  • 长期挂账的其他应付款税务风险
  • 装修费用一次性摊好还是分期好
  • 销售废旧物资计入哪个科目
  • 什么是现金等价物列举
  • sqlserver附加数据库时出错,请单击消息中的超链接
  • 数据库服务器配置方案
  • win7系统中如何禁用和启用网络
  • win7提示无法访问权限
  • symsrv.dll 病毒专杀
  • macos如何新建文件
  • linux一块网卡绑定多个ip
  • redhat linux6.5安装教程
  • win10调小键盘
  • win10系统电脑怎么关机
  • win10系统应用更新
  • js计算字符串长度 汉字长度
  • eclipse如何调节字体
  • 置顶pyq会被自己屏蔽的人看到吗
  • cmd命令怎么重启
  • 我置顶你也只顶你
  • 事件的分发与传播的关系
  • 湖南省国家税务局历任局长
  • 土地使用税一般谁交
  • 加强宣传的名言警句
  • 增值税按次纳税的规定
  • 一般纳税人城建税减免最新政策
  • 国办函和国办发
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设