2018 年 12 月,微软宣布 Edge 将采用 Chromium,这是一个为 Google Chrome 提供支持的开源项目。业内许多人对失去 浏览器多样性 感到悲伤。我个人则感到高兴。官方发布日期尚未公布,但将在今年某个时候发布。随着它的发布,大量的 HTML、JavaScript 和 CSS 功能将实现完全的跨浏览器支持。
预览版本现已适用于 Windows,Mac 版本即将推出。
📣 呼吁所有 Web 开发人员和爱好者!📣
下一版 #MicrosoftEdge 的首个预览版本已准备好供您使用 - 立即试用! https://#/I531hfmD3G pic.twitter.com/Tvh6OGGouO
— Microsoft Edge 开发团队 (@MSEdgeDev) 2019年4月8日
不久前,我撰写了一篇名为 “Internet Explorer 的缓慢消亡与渐进增强未来的展望。” 的文章。我们中的一些人已经很幸运地放弃了该浏览器。但它并不是唯一阻碍我们前进的东西。Internet Explorer 是我们都讨厌的浏览器,而 Edge 则旨在成为其经过改进的替代品。不幸的是,Edge 本身也相当落后。EdgeHTML 是 Trident 的分支,Trident 是为 Internet Explorer 提供支持的引擎。微软对 Edge 的投入不足。苹果没有远离树木。Edge 的用户之声网站是一个不错的想法,允许开发人员投票选择他们希望实现的功能。不幸的是,正如 Dave Rupert 所说,在该网站上投票“就像往许愿井里扔硬币一样”。最受欢迎的功能多年来都未得到实现。
Chromium 之前的 Edge 不支持许多功能,但这些功能在其他现代浏览器中可用,一旦它们切换到 Chromium,我们就可以使用它们。其中许多功能无法使用 polyfill 或变通方案解决,因此此版本意义重大。
我们期待使用的功能
那么,这些功能究竟是什么呢?让我们在这里列出它们,并开始对我们将能够做到的所有新事物感到兴奋。
自定义元素和 Shadow DOM
自定义元素和 Shadow DOM 结合使用,允许开发人员定义自定义、可重用且封装的组件。许多人都在请求此功能。自 2014 年以来,人们一直在投票要求实施此功能,我们终于得到了它。

HTML details 和 summary 元素
<details>
和 <summary>
元素是 HTML5 的一部分,自 2011 年以来在 Chrome 中一直受到支持。这两个元素一起使用,可以生成 一个简单的显示和隐藏内容的小部件。虽然使用 JavaScript 实现类似的功能非常简单,但即使在禁用 JavaScript 或 JavaScript 加载失败的情况下,<details>
和 <summary>
元素也能正常工作。
查看 CodePen 上 CSS GRID (@cssgrid) 编写的示例
details/summary。
在 CodePen 上。
JavaScript 字体加载 API
这个对一些人来说意义重大。所有现代浏览器现在都支持 CSS 的 font-display
属性。但是,您可能仍然希望使用 JavaScript 加载字体。字体加载狂热者 Zach Leatherman 有一篇关于为什么您可能希望使用 JavaScript 加载字体(即使我们现在对 font-display
具有广泛支持)的 解释。放弃此 API 的 polyfill 非常重要,因为根据 Zach 的说法,此 JavaScript
[...] 通常内联在关键路径中。在支持原生 CSS 字体加载 API 的浏览器上,用于解析和执行 polyfill JavaScript 的时间基本上是浪费的。
在 2018 年的一篇文章中,Zach 哀叹道
[...] 浏览器提供的 CSS 字体加载 API 具有相当广泛的支持,并且已经存在很长时间了,但令人费解的是,它仍然缺失于所有可用的 Microsoft Edge 版本中。
不再如此!
JavaScript flat 和 flatMap
最容易用代码片段来解释,flat()
在您在另一个数组中嵌套数组时很有用。
const things = ['thing1', 'thing2', ['thing3', ['thing4']]]
const flattenedThings = things.flat(2); // Returns ['thing1', 'thing2', 'thing3', 'thing4']
顾名思义,flatMap()
等效于同时使用 map()
方法和 flat()
。
这些方法在 Node 11 中也受支持。🎉
JavaScript TextEncoder 和 TextDecoder
TextEncoder
和 TextDecoder
是 编码规范 的一部分。在使用 流 时,它们看起来很有用。
JavaScript 对象 rest 和对象 spread
这就像数组的 rest 和 spread 属性。
const obj1 = {
a: 100,
b: 2000
}
const obj2 = {
c: 11000,
d: 220
}
const combinedObj = {...obj1, ...obj2}
// {a: 100, b: 2000, c: 11000, d: 220}
JavaScript 模块:动态导入
使用类似函数的语法,动态导入 允许您在用户需要时延迟加载 ES 模块。
button.addEventListener("click", function() {
import("./myModule.js").then(module => module.default());
});
CSS background-blend-mode 属性
background-blend-mode
将 Photoshop 风格的图像处理 带到了 Web 上。
CSS prefers-reduced-motion 媒体查询
我忍不住觉得,不让人感到不适应该是网站的默认设置,特别是一些用户可能不知道此设置的存在。随着 Web 上动画变得越来越普遍,认识到动画会对某些用户造成头晕、恶心和头痛等问题非常重要。

CSS caret-color 属性
诚然,这是一个相当微不足道的特性,并且可以安全且轻松地用作渐进增强。它允许你为文本输入字段中的闪烁光标设置样式。
8 位十六进制颜色表示法
保持代码库的一致性是很好的。这包括坚持使用RGB、十六进制或 HSL 颜色格式。如果你的首选格式是十六进制,那么你之前会遇到一个问题,因为每当你需要定义透明度时,都需要切换到rgba()
。现在十六进制可以包含 alpha(透明度)值。例如,#ffffff80
等效于 rgba(255, 255, 255, .5)
。可以说,它不是最直观的颜色格式,与rgba()
相比没有任何实际优势。
内在尺寸
我没有看到像其他一些新的 CSS 特性那样,内在尺寸有那么多的炒作或兴奋,但它是我个人最渴望的特性。内在尺寸根据元素的内容确定大小,并在 CSS 中引入了三个新的关键字:min-content
、max-content
和 fit-content()
。这些关键字可以在你通常使用长度的地方使用,例如 height
、width
、min-width
、max-width
、min-height
、max-height
、grid-template-rows
、grid-template-columns
和 flex-basis
。
CSS text-orientation 属性
text-orientation
属性与 writing-mode
属性结合使用,指定文本的方向,正如你所期望的那样。
查看 CodePen:
text-orientation: upright by CSS GRID (@cssgrid)
在 CodePen 上。
CSS :placeholder-shown 伪元素
placeholder-shown
甚至在 Internet Explorer 中可用,但不知何故从未进入 Edge……直到现在。用户体验研究表明,占位符文本通常应该避免。但是,如果你正在使用占位符文本,这是一种根据用户是否在input
中输入任何文本有条件地应用样式的便捷方法。
CSS place-content 属性
place-content
是设置align-content
和 justify-content
的简写。
查看 CodePen:
place-content by CSS GRID (@cssgrid)
在 CodePen 上。
CSS will-change 属性
will-change
属性可用作性能优化,提前告知浏览器某个元素将要发生变化
。在 Chromium 之前的 Edge 实际上擅长处理动画的性能,而无需此属性,但现在它将获得完全的跨浏览器支持。
CSS all 属性
button { background: none; border: none; color: inherit; font: inherit; outline: none; padding: 0; }
遗憾的是,revert
关键字除了 Safari 之外还没有在任何其他地方实现,这在一定程度上限制了我们从all
属性中获得的收益。
CSS 形状和剪辑路径
传统上,网页一直以矩形为中心。毕竟它有盒子模型。虽然我们不再需要浮动来进行布局,但我们可以创造性地使用它们,使用 shape-outside
属性将文本环绕图像和形状。这可以与 clip-path
属性结合使用,该属性可以将图像显示在形状内。

clip-path
编辑器。CSS :focus-within 伪类
如果你想在表单的任何一个输入获得焦点时,为整个表单应用特殊样式,那么 :focus-within
就是你的选择器。
CSS contents 关键字
如果你正在使用 CSS 网格,这几乎是必不可少的。尽管有 3920 票开发人员投票,Edge 仍然将其标记为“未计划”。

对于 Flexbox 和 Grid 来说,只有直接子元素分别成为 Flex 项目或 Grid 项目。嵌套更深的任何内容都不能使用 Flex 或 Grid 定位。用 规范 的话来说,当display: contents
应用于父元素时,“必须将元素视为已在其内容替换元素树中”,从而允许它们使用 Grid 或 Flexbox 进行布局。Chris 进行了 更详细的解释,值得一看。
不幸的是,其他浏览器实现中仍然存在一些 错误,会影响可访问性。
未来充满更多希望
我们只关注 Edge 转向 Chromium 后所有现代浏览器都将支持的特性。也就是说,旧版 Edge 的消亡也让许多其他特性感觉更接近现实。例如,Edge 是唯一一个对 Web 动画 API 拖延脚步的浏览器,并且对 Houdini 规范的任何部分都不感兴趣。

对浏览器测试的影响

当然,对于 Web 开发人员来说,另一个巨大的好处是减少了测试。在跨浏览器测试期间,许多人忽略了 Edge,因此 Edge 用户更有可能遇到糟糕的体验。这是微软决定转向 Chromium 的主要原因。如果您的网站在一个 Chromium 浏览器中没有错误,那么它在所有 Chromium 浏览器中可能都没问题。用 Edge 团队的话来说,Chromium 将为“我们的客户提供更好的 Web 兼容性,并为所有 Web 开发人员减少 Web 的碎片化”。各种各样的设备和浏览器使得浏览器测试成为我们作为前端开发人员需要负责的最不愉快的任务之一。Edge 现在将可供 macOS 用户使用,这对我们许多使用 Mac 工作的人来说是一个好消息。对 BrowserStack 的订阅现在将稍微不那么必要了。
我们损失了什么吗?
据我所知,唯一在除了 Chrome 之外所有地方都受支持的功能是SVG 彩色字体,它将不再在 Edge 浏览器中工作。其他彩色字体格式(COLR、SBIX、CBDT/CBLC)将继续工作。
呃,@GoogleChrome 您计划很快支持#OpenTypeSVG 吗?在 Safari(12+)、Firefox(26+)甚至 EdgeHTML(38+)Photoshop、Illustrator 中受支持,但在 Chrome 中不受支持。
/cc @colorfontswtf pic.twitter.com/tgwJ3AqHm2— Chris Lilley (@svgeesus) 2019 年 2 月 15 日
其他浏览器怎么样?
诚然,Edge 不是最后一个表现不佳的浏览器。本文中提到的所有功能在 Internet Explorer 中都不受支持,而且永远不会受支持。如果您在非洲或印度有用户,则需要支持 Opera Mini。如果您在中国有用户,那么 UC 浏览器将是需要测试的对象。如果您没有这些区域考虑因素,那么现在是放弃对 Internet Explorer 的支持并拥抱现代 Web 提供的功能的最佳时机。许多 PC 用户出于习惯而一直坚持使用 Internet Explorer。希望改进后的 Edge 足以吸引他们离开。微软官方博客文章标题为“使用 Internet Explorer 作为默认浏览器的风险”得出的结论是,“Internet Explorer 是一种兼容性解决方案……开发人员大体上现在并没有针对 Internet Explorer 进行测试。”对于其剩余的用户,Web 的大部分内容看起来越来越破碎。是时候让它消亡了。
谷歌是狂妄自大的人吗?
Web 开发人员的生活即将变得更容易,但对微软公告的回应远非积极。Mozilla 就给出了一个尖锐悲观的回应,指责微软“正式放弃了互联网的独立共享平台”。该声明称谷歌“几乎完全控制着我们在线生活的基础设施”以及“对独特资产的垄断控制”。它总结道,“将基本在线基础设施的控制权让给一家公司是糟糕的。”

许多人回想起IE6的时代,这是浏览器最后一次获得如此压倒性的市场份额。Internet Explorer 赢得了浏览器大战后,便陷入了完全停滞的状态。相比之下,Chrome 不断推出新功能。谷歌积极参与 Web 标准机构 W3C 和 WHATWG。不过,可以说它在这些机构中拥有过大的影响力,并有权决定 Web 的未来发展方向。Google 开发者关系确实有夸大仅在 Chrome 中发布的功能的趋势。
从竞争到合作
Edge 可以帮助推动 Web 发展,而不是成为新的IE。虽然它在许多领域落后,但它确实为 CSS 网格、CSS 排除、CSS 区域和新的 HTML 导入规范带路。与以往的行为大相径庭,微软已成为全球最大的开源项目支持者之一。这意味着所有主要浏览器现在都是开源的。微软表示,他们打算成为Chromium 的重要贡献者——事实上,他们已经积累了 300 多个合并。这将有助于 Edge 用户,也将使 Chrome、Opera、Brave 和其他基于 Chromium 的浏览器的用户受益。
Yandex 基于 Chromium,所以我不知道为什么任何人需要在上面进行测试。
+1
我们现在比以往任何时候都更需要 Firefox。互联网可能发生的糟糕的事情就是 Chrome 成为唯一剩下的浏览器。
是的,绝对!这是一个不容忽视的事实——考虑到已经存在大量仅针对 Chrome/ium 优化的网站和服务。即使 Chromium 是开源的,谷歌也是主要贡献者,并且可以按照他们认为合适的方向指导该项目。
我赞同!
感谢这份概述,它非常有帮助。
您说“UX 研究表明,通常应避免使用占位符文本。”,您是否有此说法的任何参考资料?我对此非常感兴趣。
有趣的是,这个评论字段有一个占位符文本:-D
Mozilla Firefox 需要更快。正因为如此,大多数人使用 Chrome。
历史告诉我们,产品的质量与其市场地位几乎没有关系。许多糟糕的产品都位居榜首。
Firefox 输给任何其他浏览器的原因为营销、勾结和竞争对手持有的垄断地位的结合。
如此多的用户使用 Chrome 的原因是,谷歌在它上面投入了价值数十亿美元的营销。我认为谷歌推广 Chrome 的方式很容易比微软当年推动 IE 的垄断更具侵略性。
我同意 Vanderson 的观点。在科技和非科技领域都有如此多的例子证明了他的说法。我甚至会更进一步,声明某些产品的用户群不断增长,其质量却下降了。
我们现在最有可能遇到的问题是,越来越多的开发者构建的东西只在 Chrome 上进行了测试,因为它实际上将与几乎所有其他浏览器的浏览器引擎相同。
这在今天已经是一个实际问题了。除了 CodePen 及其同类产品上的小型实验(可以原谅)之外,还有更多网站在使用 Chrome 专用的 JS API 和
-webkit-*
前缀的 CSS。这导致不知情的用户责怪他们的浏览器(可怜的 Fx),并将其放弃而改用基于 Chromium 的浏览器。这反过来又导致更多(我敢说懒惰的)开发人员只针对 Chrome 进行“优化”。第二个问题也是真实的。Chrome 团队过去曾表示,他们会放弃他们不太关心的功能。还记得 MathML 和 XSLT 支持吗?以安全的名义被放弃了,但 PDF 中的 JavaScript 执行却被保留了?
作为开发者,我们有责任保持 Web 的开放性,而我们可以通过不排除用户和根据标准进行编码而不是某个引擎的功能来最好地做到这一点。
Ollie,你能分享一下这方面的资料来源吗?
https://www.smashingmagazine.com/2018/06/placeholder-attribute/
Chrome 在使用 JAWS 或 NVDA 等屏幕阅读器时表现不佳。这对无障碍社区来说可能是一个巨大的打击。对此我有点担心。
因此,所有基于 WebKit 的浏览器多年来一直未修复的错误将渗透到 Edge 中。例如,CSS Columns 上的错误。
Edge 之前是否还对垂直 CJK 文本提供了出色的支持?我记得 Chrome 对它的支持相当仓促且严重未完善。
我们确实失去了https://caniuse.cn/#search=backdrop%20filter,它只在 Safari 和 Edge 中实现。:(
CSS :focus-within 伪类对于无障碍性很有用。
如果您有一个可折叠菜单,可能是
<ul>
,使用键盘可以将您带到各个子项,但使用通常的 :focus 和 :hover 不会展开列表,使其变得毫无用处,除非您使用鼠标。这与我无关。我大多数时候使用 Opera,在 Opera 在少数情况下无法工作时使用 Chrome。微软已经失去了我。
Phil,我建议你无论如何都使用 Chrome,或者更好的是,使用 Firefox。Opera 曾是那些想要与众不同、重视强大功能的人使用的浏览器。这些时代已经过去很久了。Opera 通过剥夺几乎所有使 Opera 成为 Opera 的功能,背叛了其宝贵的一部分用户群,并将其基本变成了 Chromium。
我再也不在 Opera 上测试任何东西了。我测试其他基于 Chromium 的浏览器(如 Samsung Internet)的次数远超 Opera。他们必须感受他们带来的破坏。
我认为微软别无选择,EdgeHtml 对微软来说是一个持续开发的负担,而 Chromium 更容易接受,尤其是在微软浏览器从未获得任何吸引力的情况下。当微软的资源没有那么投入时,接受失败要容易得多。我实际上认为 Chromium 使网络变得更好,因为现在大多数浏览器都使用它,这使得事情更具兼容性。我们有很多浏览器选项,具有许多不同的功能和用户关注点。这与过去 IE 和其他几个浏览器的情况不同。是的,Firefox 很容易成为受害者,或者至少成为运行在 Linux 发行版上的微不足道的利基浏览器。最值得注意的是,即使是 Linux 用户现在也大多使用 Chromium 或 Chrome。似乎没有人再关心 Gecko 引擎了,如果你想要竞争的 Web 引擎,这是一个不好的迹象。最终,它是一个 Chromium 网络,并且每天都在变得更加如此。无论好坏,它就是它,对我来说,这没问题。
我必须揭穿那些声称我们没有浏览器多样性的反对者。我的意思是,我们从未有过如此多的浏览器可供选择,是的,许多浏览器使用 Chromium 渲染或 WebKit 而不是 Quantum。但除了这种区别之外,所有这些浏览器都具有各种功能和自定义选项。此外,谁又能说 Edge Chromium 会比其他任何 Chrome 克隆版本表现得更好呢?问题不在于微软转向 Chromium 引擎,问题仍然是 Google Chrome 本身占据了浏览器市场份额的主导地位。我们没有 Chromium 问题,我们有 Chrome 问题。
place-content 是一种有趣的实现选择,老实说。它要求您在 flexbox 中具有多行或多列内容,当然,这取决于 flex 方向。例如,设置 place-content: center center; 可能不会有任何作用,除非您的列(假设 flex-direction: row)具有 2 行或更多行,然后它会居中。我上次检查时,如果您的内容没有多行,align-content 就不起作用(同样,假设 flex-direction: row)。
我知道这不是本文的主题:)
Firefox 似乎正在挣扎,因为他们无法将事情整理好。现在,他们似乎在隐私方面走上了岔路,尽管 Chrome 是迄今为止最不受隐私保护的浏览器,但却是最受欢迎的。可惜的是,整个 Brendan Eich 的事件确实阻碍了 Mozilla 的发展,人们不得不怀疑那里还有谁在提供领导?早在微软决定使用 Chromium 之前,Firefox 的结局就已经昭然若揭了。Firefox 的衰落已经持续了一段时间了。坦率地说,使用相同 Web 引擎的大多数浏览器都将提高兼容性,同时为用户提供丰富的浏览器选择。这与 IE 控制网络时的场景截然不同。但我认为 Firefox 无法恢复,它可能不会消失,但它也不是未来。