CSS Containment规范正式发布

2020 年 5 月 18 日

CSS Containment规范正式发布

近期CSS工作组发布了新的 Web 规范CSS Containment模块。该 CSS 模块定义了contain属性,用于表示元素的子树以某种方式独立于页面的其他部分。该特性可以大大优化客户端页面的渲染性能,同时开发者不再需要担心因一些小的变动而引起的页面性能问题。


CSS Containment模块规范的主要目的是,在页面渲染的过程中通过忽略文档中的某些子树来提高页面的渲染性能。Smashing Magazine(译者注:Smashing Magazine 是德国著名 Web 设计网站)的主编 Rachel Andrew 在一篇介绍这一新 Web 规范的文章中提到:


当容器的内容发生变化时,浏览器考虑到其他元素可能也会发生变化,于是就会去检查页面中所有的元素。一直以来浏览器都是这么做的,大家都习以为常了。但是从另一方面说,开发者很清楚当前修改的元素是否独立、是否影响其他元素。因此如果开发者能把这个信息通过CSS告诉浏览器,那么浏览器就不需要再去考虑其他元素了,这将是非常完美的事情。CSS Containment模块中提供的contain属性就为我们提供了这种能力。


CSS Containment 规范定义了一个contain 属性,该属性使我们可以设置某个 DOM 子树独立于整个页面。contain 属性可以通过五个值( strict, content, size, layout, paint)中的某一个来规定元素以何种方式独立于文档树:


  1. layout:该值表示元素的内部布局不受外部的任何影响,同时该元素以及其内容也不会影响到上级。

  2. paint:该值表示元素的子级不能在该元素的范围外显示,该元素不会有任何内容溢出(或者即使溢出了,也不会被显示)。

  3. size:该值表示元素盒子的大小是独立于其内容,也就是说在计算该元素盒子大小的时候是会忽略其子元素。

  4. content:该值是contain: layout paint的简写

  5. strict:该值是contain: layout paint size的简写


contain 属性使浏览器不必考虑整个页面区域,而只需对限定的 DOM 区域完成布局、样式、绘制、大小以及它们组合的重新计算,使浏览器在页面回流和重绘上获得明显的性能收益,这点在大型页面上尤为突出。这一优势,使得 Igalia 在基于 Chromium 实现 CSS Containment 规范的工作中得到了 Bloomberg 的大力支持。Manuel Rego Casasnovas 在CSSconf EU 2019的演讲中给我们提供了一个示例:一个包含超过一万单元格的页面,当其内容不断发生变化时,其渲染性能在使用了 CSS Containment 之后提升到了 4 倍。同时 Rego 也提到说,Bloomberg 之所以会大力支持 Igalia 工作的原因是:


Bloomberg中有一些相当复杂的UI,他们能预见到CSS Containment规范带来的好处。

Paul Lewis在这篇文章中向注重性能的开发人员介绍了DOM中的属性修改会对渲染过程中的哪些部分造成影响。另外csstriggers这个网站还汇总了会触发布局的属性,并按浏览器类型做了分类。


最后,除了 Safari 浏览器外,其他现代浏览器都实现了 CSS Containment 规范。


原文链接:


CSS Containment Now a Web Standard


2020 年 5 月 18 日 09:00837

评论

发布
暂无评论
发现更多内容

Spring 5 中文解析核心篇-IoC容器之AOP编程(下)

青年IT男

Spring5 Spring Framework

区块链支付系统开发,数字货币支付承兑商APP模式搭建

13530558032

Spring 5 中文解析核心篇-IoC容器之基于Java容器配置

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之SpEL表达式

青年IT男

Spring5 Spring Framework

为什么企业自主开发软件时,都会使用统一的模块化框架式开发平台?

Philips

敏捷开发 代码优化 框架设计 框架开发 标准框架

车队管理软件

samhuang

Spring 5 中文解析核心篇-IoC容器之IoC容器和Bean概述

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之基于注解的容器配置

青年IT男

Spring5 Spring Framework

敏捷转型谁先动:老总,项目经理or团队

华为云开发者社区

项目管理 敏捷 敏捷开发 团队 华为云

手把手教程:基于环信4小时开发一个视频会议APP【附源码】

环信

软件工程开发之道:了解能力和复杂度是前提

华为云开发者社区

软件工程 开发 项目 代码 复杂度

Redis 持久化 --RDB

是老郭啊

redis redis持久化 aof rdb

CSS常用样式——绘制各种角度的三角形(1)

程序员学院

CSS css3 CSS小技巧

你真的懂AQS吗?透彻理解AQS源码分析系列之AQS基础一

InfoQ_d2212957090d

AQS

Spring 5 中文解析核心篇-IoC容器之Spring AOP API

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之ApplicationContext与BeanFactory

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之AOP编程(上)

青年IT男

Spring5 Spring Framework

日防夜防,“隐私窃贼“难防? 手把手教你如何使用OPPO手机管理应用权限

OPPO安全

安全 隐私保护 数据隐私 sdk

基于环信sdk在uni-app框架中快速开发一款多平台社交Demo

环信

Spring 5 中文解析核心篇-IoC容器之依赖关系

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之自定义Bean性质

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之类路径扫描和组件管理

青年IT男

Spring5 Spring Framework

话题讨论 | 你的桌面上会放哪些有趣的小摆件?

InfoQ写作平台

工作 话题讨论 办公室

Spring 5 中文解析核心篇-IoC容器之BeanDefinition继承与容器拓展点

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之Bean作用域

青年IT男

Spring5 Spring Framework

手把手带你写Node.JS版本小游戏

华为云开发者社区

Java node.js Node 华为云 剪刀石头布

企业表格技术与风险指标补录系统

Geek_Willie

SpreadJS

区块链数字货币交易所开发,数字交易平台搭建

13530558032

Spring 5 中文解析核心篇-IoC容器之JSR330标准注解

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之Environment抽象

青年IT男

Spring5 Spring Framework

从RainbowBridge看Js与Java交互中的安全漏洞

OPPO安全

安全 安全漏洞

CSS Containment规范正式发布-InfoQ