前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Chrome 最近带来了哪些有意思的新东西?

Chrome 最近带来了哪些有意思的新东西?

作者头像
ConardLi
发布2023-01-09 19:09:37
4570
发布2023-01-09 19:09:37
举报
文章被收录于专栏:code秘密花园code秘密花园

大家好,我是 ConardLi

好久没有解读 Chrome 更新了,今天挑一下最近几个版本里有意思的一些更新,和大家一起来看一下吧~

Chrome 107:识别渲染阻塞资源

对页面性能的可靠洞察对于我们构建好的用户体验是至关重要的,在以前,我们通常会依靠一些复杂的启发式方法来确定资源是否阻塞页面的渲染。

Chrome 107Performance API 新增了一个 renderBlockingStatus 属性,这个属性会提供来自浏览器的直接信号,用于识别阻塞页面渲染的资源,直到它们被下载下来。

下面的代码片段显示了如何获取所有资源的列表并使用新的 renderBlockingStatus 属性列出所有阻塞页面渲染的资源。

代码语言:javascript
复制
// 获取所有资源
const res = window.performance.getEntriesByType('resource');

// 过滤出阻塞渲染的资源
const blocking =   res.filter(({renderBlockingStatus}) =>
      renderBlockingStatus === 'blocking');

优化这些阻塞资源的加载方式(改为异步加载或增加一些预渲染优化)对于我们网站的 Core Web Vitals 是非常有帮助的,大家可以用起来了~

Chrome 106:Pop-up API

Chrome 106,新增了对弹出式 API 的支持,HTML 元素新增了一个 popup 属性,它可以自动将元素带到站点的顶层,并提供简单的控件来切换是否可见。而开发者则不需要担心定位、堆叠元素、焦点或键盘交互等等,另外我们可以完全控制弹出层的样式、位置和大小,还可以灵活地修改默认行为。只使用 CSSHTML,不需要 JavaScript 就可以实现一个简单的弹出式交互了:

代码语言:javascript
复制
<div id="my-pop-up" popup>
  Hi ConardLi !
</div>
<button  popuptoggletarget="my-pop-up">
  Toggle Pop-up button
</button>

默认情况下,用户可以使用 ESC 键或单击其他元素等手势关闭这个弹出窗口。

了解更多:https://developer.chrome.com/blog/pop-ups-theyre-making-a-resurgence/

Chrome 106:新的 CSS 单位 ic

Chrome 106,新增了一个新的 CSS 单位 ic,它是一个设计用来调整文本大小的单位,可以根据字符的宽度或高度来测量长度。

比如我们设置了一个容器的 max-width8ic,那么无论字体大小如何,这个容器将最多包含 8个全角字形。

代码语言:javascript
复制
.container {
  border: solid 3px navy;
  max-width: 8ic; /* ic length unit out in chrome 106*/
  margin-bottom: 25px;
  margin-left: 15px;
  
}

.small{
  
 margin-top:25px;
 font-size: 20px;
}

.medium{
  font-size: 42px;
}

.large{
  font-size: 76px;
}

Chrome 105:容器查询和:has()属性

Chrome 105 新增了容器查询和 :has() 属性,这兄弟俩可以让我们能够查询父选择器的大小和样式信息,同时使子元素可以拥有响应式样式逻辑。有点类似 @media 查询,区别是它们根据的是容器的大小而不是视口的大小进行判断的。

要使用容器查询,我们可以在卡片容器上设置 container-typeinline-size

代码语言:javascript
复制
.ard-container {
  container-type: inline-size;
}

然后我们就可以使用 @container 将该容器的样式应用到它的任何子节点:

代码语言:javascript
复制
.card {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

@container (max-width: 400px) {
  .card {
    grid-template-columns: 1fr;
  }
}

当容器小于 400px 时,它就会切换到单列布局。

我们可以使用 :has() 伪类更进一步,它可以让我们检查父元素是否包含具有特定参数的子元素。例如,p:has(span) 表示一个段落选择器,你可以使用它来设置父段落本身或其中的任何内容的样式。

代码语言:javascript
复制
p:has(span) {
  /* magic styles */
}

figure:has(figcaption) {
  /* this figure has a figcaption */
}

了解更多:https://developer.chrome.com/blog/has-with-cq-m105/

Chrome 105:Sanitizer API

在我之前的文章中有介绍过 Sanitizer API 提案:

告别 XSS!新的 W3C 提案助你安全操作 DOM

105 版本中,Chrome 对它提供了支持。Sanitizer API 可以让我们将任意字符串安全地插入到页面中。如果要动态渲染一段富文本,我们可以创建一个新的 Sanitizer 实例。然后,调用 setHTML() 方法插入经过 XSS 清理的内容:

代码语言:javascript
复制
const mySanitizer = new Sanitizer();
const user_input = `<img src="" onerror=alert(0)>`;
elem.setHTML(user_input, { sanitizer: mySanitizer });

const config = {
  allowElements: [],
  blockElements: [],
  dropElements: [],
  allowAttributes: {},
  dropAttributes: {},
  allowCustomElements: true,
  allowComments: true
};
// sanitized result is customized by configuration
const mySanitizer = new Sanitizer(config);

更详细的介绍可以查看我上面的文章~

一些弃用

  • Chrome 107
    • 弃用对 HTTP Expect-CT Header 的支持
  • Chrome 106
    • 弃用 HTTP/2 Server Push 能力
  • Chorme 105:
    • 弃用非安全上下文(未开启https的站点)的 Web SQL
    • 弃用 Cookie domain 属性中的非 ASCII 字符;
    • 弃用 Navigation API 中的 transitionWhilerestoreScroll 方法;

最后

参考链接:

  • https://chromestatus.com/features#milestone%3D107
  • https://chromestatus.com/features#milestone%3D106
  • https://chromestatus.com/features#milestone%3D105

如果你有任何想法,欢迎在留言区和我留言,如果这篇文章帮助到了你,欢迎点赞和关注。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Chrome 107:识别渲染阻塞资源
  • Chrome 106:Pop-up API
  • Chrome 106:新的 CSS 单位 ic
  • Chrome 105:容器查询和:has()属性
  • Chrome 105:Sanitizer API
  • 一些弃用
  • 最后
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档