Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WWDC24 - iOS18 下的 WebKit 有哪些更新?

WWDC24 - iOS18 下的 WebKit 有哪些更新?

作者头像
ConardLi
发布于 2024-07-01 06:41:44
发布于 2024-07-01 06:41:44
32700
代码可运行
举报
文章被收录于专栏:code秘密花园code秘密花园
运行总次数:0
代码可运行

大家好,我是 ConardLi

就在刚刚结束的 WWDC24(苹果全球开发者大会)上,带来了诸多亮眼的新功能。

作为 Web 开发者我们最关注的当然就是 WebKit 的更新了,新版本的 WebKit 总计共带来了 48 项新的 Web 平台功能,以及 18 项弃用功能和 174 项错误修复。

下面我们来一起学习下一些我觉得值得关注的内容吧。

CSS - View Transitions API

WebKit 加入了对 View Transitions API 的支持。它提供了一个体验非常好的浏览器 API,可以用来将元素从一个状态动画过渡到另一个状态。基于 CSS View Transitions Module Level 1 规范,引入了一些新的 CSS 属性和伪元素,一起构成了定义过渡动画的规则,并且提供一个新的浏览器 API 来启动过渡动画,并响应不同的过渡状态的变化。

它的工作方式是通过捕获页面的当前的(旧)状态,然后将其动画过渡到新的状态。默认情况下,浏览器会应用一个在状态间的交叉淡入淡出效果。

使用 document.startViewTransition() 方法来启动捕获过程。你可以传递一个回调函数作为第一个参数,来在旧的和新的捕获之间进行 DOM 状态的变化。这个方法会返回一个 ViewTransition 对象,其中包含的 promise 可以用来跟踪视图转换的开始或结束。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const tabLinks = [...document.querySelectorAll('.tabbed-views-demo a')];
const tabPages = [...document.querySelectorAll('.tabbed-views-demo .tab-page')];
tabLinks.forEach(tab => {
    function switchTab () {
        tabPages.forEach(element => element.classList.add('hidden'));
        tabLinks.forEach(element => element.classList.remove('current'));
        let pageid = document.location.href.split('#')[1];
        tab.classList.add('current');
        document.getElementById(pageid).classList.remove('hidden');
    }

    tab.addEventListener('click', (e) => {
        // Feature detect view transitions
        if (document.startViewTransition)
            document.startViewTransition(switchTab);
        else switchTab(); 
    });
    
    if (document.location.href.split('#')[1])
        switchTab();
});

一旦状态被捕获,就会构建一个可以用 CSS 进行定位的伪元素树,你可以通过改变这个 CSS 动画来修改过渡效果。动画从旧的页面状态过渡到新的页面状态可以通过 ::view-transition-new(*)::view-transition-old(*) 选择器来进行修改。另外,你还可以通过为指定元素设置 CSSview-transition-name 属性名称,要求浏览器独立跟踪元素状态的改变。然后,你可以使用伪元素来为其定制动画。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.page-view {
    view-transition-name: page-view;
}
::view-transition-old(page-view) {
    animation: 500ms ease-in-out transition-out-animation;
}
::view-transition-new(page-view) {
    animation: 500ms ease-in-out transition-in-animation;
}

CSS - 样式查询

WebKit 增加了对样式查询(Style Queries)的支持,可以在测试 CSS 自定义属性时使用。样式查询的用法和我们使用 Sass mixins 很相似,都是用来定义一组可重复使用的样式,并将其作为一个整体进行应用。

在以下示例中,如果 --background 自定义属性被设置为黑色,则使标题和段落文本的颜色变为白色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@container style(--background: black) {
  h2, h3, p {
    color: white;
  }
}

别忘了注意 HTML 结构。默认情况下,样式查询引用的是父元素上的样式,我们可以通过使用容器查询 (Container Query names) 创建不同的引用。

CSS - 背景过滤器

Safari 9.0 中发布的背景滤镜(backdrop filter)为我们提供了一种方式,可以对特定元素后的内容应用图像效果。例如,你可以将 backdrop-filter 应用到标题上,那么标题后的所有内容都将变得模糊,或者饱和度降低,或者对比度增加。你可以使用来自 SVG 的任何滤镜函数,例如 blur()brightness()contrast()drop-shadow()grayscale()hue-rotate()invert()opacity()saturate()sepia()

多年以来,背景滤镜只能在 Safari 中运行。当你在属性名称前添加 -webkit-backdrop-filter前缀时,它才可以使用。

现在,开始于 Safari 18 beta,我们不再需要该前缀了。

现在它在各大浏览器的兼容性都很好。

CSS - content-visibility

WebKit 增加了对 content-visibility 的支持,这个属性用来控制元素是否以有利于性能优化的方式渲染内容。它能让你向浏览器明确表达,页面的某些部分可能最初不在屏幕上,建议先忽略它们,从而不参与首屏的布局和渲染,这样可能会使页面加载更快。

想要详细了解这个属性可以看:只需一行CSS代码,让长列表网页的渲染性能提升几倍以上!

Web API - 空间照片

Apple Vision Pro 上,我们可以享受到的一种体验非常好的浏览空间照片和全景照片的功能。当你在 visionOS 中打开 Photos 应用时,你会看到一组你的照片的集合。点击一张图片,它就会在你面前的一个浮动框架中单独出现,而其他部分的应用则会消失。

这是一种非常好的,全方位的沉浸式体验。

现在在 visionOS 2 betaSafari 18 中,我们可以使用全屏 API 在网页上实现同样的体验。你可以在网页中嵌入照片,并提供点击功能。当前 Safari 窗口消失时,照片会弹出一个浮动的框架。然后,当用户点击 visionOS 提供的空间图片或全景 UI 时,照片会进一步扩展,创造出一个全方位的沉浸式体验。

首先,我们可以使用简单的 HTML 将扁平化的全景照片嵌入网页中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<img src="panorama.jpeg" class="go-fullscreen" alt="[description]">

然后,我们将在点击时使用 Javascript 触发 .requestFullscreen()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.querySelectorAll('.go-fullscreen').forEach(element => {
    element.addEventListener('click', async () => {
        await element.requestFullscreen();
    });
});

当然,你可以为用户点击创建你自己的 UI,而不是让整个照片成为点击目标。

空间图像的运行方式完全相同,我们可以使用 picture 元素来实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<picture>
    <source srcset="spatial.heic" type="image/heic">
    <source srcset="fallback.avif" type="image/avif">
    <img src="fallback.jpg" class="go-fullscreen" alt="[description]" >
</picture>

这种技术还将导致任何支持全屏 API 的浏览器使图像进入全屏状态。

想要详细了解,可以看看《Optimize for the spatial web》 这个主题。

Web API - WebXR 支持

Safari 18 forvisionOS 2 beta 增加了对沉浸式 WebXR 的支持。现在,我们可以创建完全身临其境的体验,并通过 Apple Vision Pro 在网络上向人们提供这些体验。VisionOS 2 Beta 上的 Safari 支持沉浸式 VR 会话。WebXR 场景使用由 WebGL 驱动的硬件加速图形来显示。

如果我们想制作用户手部的 3D 模型动画,VisionOS 2 Beta 版的 Safari 还支持 WebXR 手部跟踪。为了确保隐私,将在 WebXR 会话开始时向用户请求允许进行手部跟踪的许可。

Build immersive web experiences with WebXR》专题详细介绍了这个话题。

Web API - URL.parse()

WebKit 添加了对新的 URL.parse() 方法的支持,这是一种解析 URL 的方法,当解析失败时,它会返回 null 而不是异常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Before
let url = null;
try {
  url = new URL(input, base);
} catch(e) { }

// Now
const url = URL.parse(input, base);

安全策略 - 混合内容策略

新版的 WebKit 会通过升级混合内容设置中的被动子资源请求,为所有图像、视频和音频添加了对安全 HTTPS 的支持。这意味着,如果某个网站的某些文件使用 HTTPS 提供,而另一些文件使用 HTTP 提供(称为“混合内容”),则所有图像和媒体现在都将自动升级到 HTTPS,以符合《Mixed Content Level 2》规范的要求。

不过这项能力在 Chrome 中早就提供了,可以看下我之前的文章:Chrome 81 正式发布 !消灭混合内容最后一步~

JavaScript - RegExp 优化

RegExp 中添加了对 Unicode 15.1.0 字符的支持。Unicode 15.1 增加了 627 个字符,使字符总数达到 149,813 个。现在,这些新字符都可以在正则表达式中使用了。

另外还通过 RegExp.prototype[Symbol.matchAll] 添加了对 v 标志的支持。提供更强大的方法来匹配 Unicode 字符,如 ECMAScript 2024 标准中所指定的那样。

例如,我们现在可以指定仅匹配拉丁字符,同时避免匹配西里尔字母字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const regex = /\p{sc=Latin}/v;
console.log(regex.test('A')); // true, 'A' is a Latin script character
console.log(regex.test('А')); // false, 'А' is a Cyrillic script character

或者分割与表情符号匹配的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"a 🥰 b 🥰".split(/[\p{Emoji}--\p{ASCII}]/v)// ["a ", " b ", ""]

最后

以上只节选了一些我觉得比较值得关注的更新,想要了解全部更新内容可以看:https://webkit.org/blog/15443/news-from-wwdc24-webkit-in-safari-18-beta/

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Safari 18.0 WebKit 新特性介绍
干扰控制功能允许你在浏览网页时隐藏干扰项,例如登录横幅、Cookie 偏好弹窗、新闻通讯注册覆盖层等。该功能适用于 iOS 18、iPadOS 18 和 macOS Sequoia 上的 Safari。
ACK
2024/09/26
6190
Safari 18.0 WebKit 新特性介绍
Patterns.dev 用设计模式打造最佳用户体验,提高应用的可扩展性和性能
各位码友们,大家好!今天给大家介绍一个非常棒的学习设计模式的网站 - Patterns.dev。
埃兰德欧神
2024/07/15
1740
Patterns.dev 用设计模式打造最佳用户体验,提高应用的可扩展性和性能
浏览器要原生实现React的并发更新了?
要说React有什么其他框架没有的、独一无二的特性,那一定是「并发更新」。围绕并发更新,存在两个很有意思的现象:
公众号@魔术师卡颂
2023/08/30
2350
浏览器要原生实现React的并发更新了?
Next.js 实战 (三):优雅的实现暗黑主题模式
在 Next.js 中要实现暗黑模式,需要用到一个库:next-themes,它可以帮助我们很轻易地实现暗黑模式切换。
白雾茫茫丶
2024/12/10
1910
Next.js 实战 (三):优雅的实现暗黑主题模式
WDC2023 — Web 开发者划重点
即 Google I/O 2023 之后,又迎来了 Apple 举办的当世最令人瞩目的另一大科技大会:WDC2023。这两场大会无疑都会为大家带来近一年内最热门最前沿的技术,而作为 Web 开发者我们也应该紧跟时代的潮流,及时了解技术的进步,从这些大会上我们也能学习到很多有用的内容。
ConardLi
2023/08/23
5210
WDC2023 — Web 开发者划重点
搞定这些疑难杂症,向css3动画说yes
本文篇幅比较长,涉及到的知识点也比较多,如3d,动画性能,动画js事件等,参考文献及demo展示也比较多,所以建议pc阅读效果更佳。 动画库 到现在来说css3动画也不是什么新技术,既然是要搞定它,好歹我们也得先看下别人做的一些东西吧,所以在此先向各位推荐几个比较好用的动画库: animate.css effeckt hover.css animatable 关于css3动画不得不说的几个属性 看完上面那些动画库,心痒就不如行动了。 说起css3动画,有一个属性我们绝对避不开了,那就是transform这个
IMWeb前端团队
2018/01/15
2.2K0
搞定这些疑难杂症,向css3动画说yes
用几行原生JS就可以实现丝滑的元素过渡效果!
做过体验优化的朋友应该都清楚,如果用原生的 CSS 或者 JS 动画去实现,想要实现出类似的效果,不会特别简单,而且也要考虑性能问题。
ConardLi
2021/12/02
2.2K0
用几行原生JS就可以实现丝滑的元素过渡效果!
读Zepto源码之Fx模块
对角另一面
2017/12/27
9850
2017移动前端的一些总结web前端 —— 移动端知识的一些总结一.css部分二.js部分
web前端 —— 移动端知识的一些总结 个人在移动端的一些总结归纳,有新的知识点会一直更新 一.css部分 1.meta标签       <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/> 移动端加上这个标签才是真正的自适应,不加的话,假如你把一个980px宽度(手机端常规是980)的PC网页 放在手机上显示,倒也能正常显示不出现滚动条,不过是移动设备对页面 做了缩小优化,所以字体等都相应
windseek
2018/06/14
3.8K0
CSS 实用新特性:交互、组件、效率的革新
本文将盘点与解析 CSS 的实用新特性,结合技术原理、应用场景和开发实践。从重塑交互体验,到强化组件功能,再到全面优化开发流程,这些新特性不仅显著提升了开发者的工作效率,还为用户带来了更加流畅、互动性更强的网页体验。
球球的前端奶茶屋
2025/04/09
3110
CSS 实用新特性:交互、组件、效率的革新
Vue0.11版本源码阅读系列六:过渡原理
可以看到也是通过指令的方式,这个版本只有支持两个类,一个是进入的时候添加的v-enter,另一个是离开时候添加的v-leave。
街角小林
2022/03/21
5400
开心档之CSS3 过渡入门篇
CSS3中,我们为了添加某种效果可以从一种样式转变到另一个的时候,无需使用Flash动画或JavaScript。用鼠标移过下面的元素:
iOS程序应用
2023/02/08
5040
聊一聊CSS的过去与未来,加深对CSS的理解
它涉及设定规则,让浏览器自动处理。你可以改变边距、字体和大小,但这只是浅尝辄止,你懂的吗?
前端达人
2023/08/31
5720
聊一聊CSS的过去与未来,加深对CSS的理解
iOS 17 :Webkit 更新了哪些新功能?
iOS 17 就在近几天发布了,作为 Web 开发者最值得关注的还是 Webkit 的能力更新,今天就带大家来一起看一下(本文中并非列举了所有更新,只选取了其中我认为需要关注的)。
ConardLi
2023/09/25
8300
iOS 17 :Webkit 更新了哪些新功能?
WWDC 2022:哪些是前端开发者要关注的信息?
苹果全球开发者大会(Apple Worldwide Developers Conference,缩写:WWDC)是苹果公司每年定期举办的信息技术交流活动,活动旨在向全球的软件设计师展示苹果公司最新的软件及技术,通常用于展示 macOS、iOS、iPadOS、watchOS 和 tvOS 系列以及其他苹果公司的软件和技术。
ConardLi
2023/01/09
1.9K0
WWDC 2022:哪些是前端开发者要关注的信息?
看不完的那种!前端170面试题+答案学习整理(良心制作)
圆角border-radius,阴影box-shadow,对文字加特效text-shadow,线性渐变gradient,变化transform,伪元素::selection,媒体查询,多栏布局,图片边框border-image。
达达前端
2021/01/18
11.9K0
【CSS】1095- CSS filter 有哪些神奇用途
CSS filter 属性将模糊或颜色偏移等图形效果应用于元素形成滤镜,滤镜通常用于调整图像,背景和边框的渲染。它的值可以为 filter 函数 <filter-function> 或使用 url 添加的svg滤镜。
pingan8787
2021/10/08
1.3K0
【CSS】1095- CSS filter 有哪些神奇用途
CSS3的过渡效果
在CSS2的世界中,过渡常常是非常单薄的,要么是从一种颜色变成另一种颜色、要么是从不透明变到透明,总而言之就是由一种状态变到另外一种状态。这就导致了很多页面给人的感觉很突兀,没有一个平滑的过渡。
大江小浪
2018/07/25
1.2K0
CSS3的过渡效果
CSS进阶-过渡与动画的事件监听
在网页设计中,CSS过渡(Transitions)与动画(Animations)为用户界面增添了动态与交互性,使网站看起来更加生动活泼。然而,精确控制这些动态效果的开始、进行和结束并非总是直观明了。本文将深入探讨CSS过渡与动画的事件监听技巧,解析常见问题、易错点,并提供避免策略及实用代码示例,助你掌握这一进阶技能。
Jimaks
2024/06/17
2800
2023 年前端大事记
哈喽各位《code 秘密花园》的订阅者们,一年一度的年更系列又来了。关注我的老粉都知道,每到年末我会对前端生态在这一年的重大变化做一次总结,之前的总结:
ConardLi
2023/12/28
5160
2023 年前端大事记
相关推荐
Safari 18.0 WebKit 新特性介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验