2025 年 HTML 年度调查报告公布!好多不知道!

前言

近日,「State of HTML 2025」年度调查报告公布。

这份报告收集了全球数万名开发者的真实使用经验和反馈,堪称是 Web 开发领域的"年度风向标"。

让我们看看 2025 年,大家都用了 HTML 的哪些功能。

注:State of JS 2025 还未公布,欢迎关注公众号:冴羽,第一时间获取报告结果。

特性 Top 5

开发者使用最多的特性 Top 5 分别是:

  1. 地标元素(Landmark Elements)

其实就是<aside>, <article>, <main>, <nav>, <section>这些,想必你也经常使用。

  1. tabindex 属性:使 HTML 元素可聚焦,允许或阻止它们按顺序获得焦点。
html 复制代码
<div role="button" tabindex="0">I'm Tabbable</div>
  1. <svg>(内联 SVG)
html 复制代码
<svg>
  <circle cx="50" cy="50" r="50" />
</svg>
  1. <canvas>
html 复制代码
<canvas width="200" height="200"></canvas>
  1. loading="lazy":懒加载
html 复制代码
<img src="picture.jpg" loading="lazy" /> <iframe src="supplementary.html" loading="lazy"></iframe>

表单 Top 5

开发者使用最多的表单功能 Top 5 分别是:

  1. <input type="color">:颜色选择器
html 复制代码
<input type="color" />
  1. <datalist>:供用户选择的表单控件
html 复制代码
<input name="country" list="countries" />
<datalist id="countries">
  <option>Afghanistan</option>
  ...
</datalist>
  1. input.showPicker():打开具有选择器的表单控件(颜色选择器、日期输入框等)
html 复制代码
<input id="dateInput" type="date" /> <button onclick="dateInput.showPicker()">Select date</button>
  1. contenteditable="plaintext-only":允许编辑元素的原始文本,但不允许进行富文本格式设置
html 复制代码
<h2 class="title" contenteditable="plaintext-only"></h2>
  1. Customizable Select:可自定义样式和样式的下拉控件
css 复制代码
select,
::picker(select) {
  appearance: base-select;
}

图形和多媒体 Top 5

开发者使用最多的图形和多媒体功能 Top 5 分别是:

  1. <svg>(内联 SVG)
html 复制代码
<svg>
  <circle cx="50" cy="50" r="50" />
</svg>
  1. <canvas>
html 复制代码
<canvas width="200" height="200"></canvas>
  1. ctx.drawElement():使开发者可以在 HTML 元素上绘制 <canvas>
html 复制代码
<canvas id="canvas" layoutsubtree="true">
  <p>Hello world!</p>
</canvas>
<script type="module">
  const ctx = canvas.getContext("2d");
  const text = canvas.querySelector("p");
  ctx.drawElement(text, 30, 0);
</script>
  1. WebGL:一个基于 OpenGL 的底层 API
html 复制代码
const gl = canvas.getContext("webgl");
  1. colorSpace:设置图形的颜色空间
html 复制代码
const ctx = canvas.getContext("2d", {colorSpace: "display-p3"});

内容 Top 5

开发者使用最多的图形和多媒体功能 Top 5 分别是:

  1. 内容安全策略 (CSP):网站向浏览器发出的一组指令,用于帮助检测和缓解 XSS 攻击
html 复制代码
Content-Security-Policy: script-src 'self';
  1. <template>:内容在加载页面时不会呈现,但随后可以在运行时使用 JavaScript 实例化
html 复制代码
<template id="counter">
  <div class="counter">Clicked {{ times }} times</div>
</template>
  1. Intl.LocaleAPI:国际化 API
html 复制代码
const us = new Intl.Locale("en-US");
  1. HTML 模块:通过 JS imports 导入 HTML 文件,并访问其元素和 JS 导出
html 复制代码
<script type="module">
  import { TabList } from "./tablist.html" with { type: 'html' };
  customElements.define("tab-list", TabList);
</script>
  1. Sanitizer API:element.setHTML() 以及 Document.parseHTML() API,通过清理 HTML 中不受信任的字符串来防止 XSS 攻击。
html 复制代码
greeting.setHTML('Hello ' + nameInput.value);

交互 Top 5

开发者使用最多的交互功能 Top 5 分别是:

  1. <details> 和 <summary>:隐藏或显示内容
html 复制代码
<details>
  <summary>Details</summary>
  Longer content
</details>
  1. <dialog>:对话框
html 复制代码
<dialog id="confirm">
  <form method="dialog">
    Are you sure?
    <button value="1">Yes</button>
    <button value="0">No</button>
  </form>
</dialog>
  1. <details name>:手风琴效果
html 复制代码
<details open name="sidebar_panel">
  <summary>Main info</summary>
  <!-- controls -->
</details>
<details name="sidebar_panel">
  <summary>Style</summary>
  <!-- controls -->
</details>
  1. popover:弹出窗口
html 复制代码
<button popovertarget="foo">Toggle the popover</button>
<div id="foo" popover>Popover content</div>
  1. element.before():将一个元素移动到另一个元素之前的 DOM 方法
html 复制代码
referenceElement.before(newElement);

性能 Top 5

开发者使用最多的性能功能 Top 5 分别是:

  1. loading="lazy":懒加载
html 复制代码
<img src="picture.jpg" loading="lazy" /> <iframe src="supplementary.html" loading="lazy"></iframe>
  1. srcset 和 sizes 属性:提供多个源图像,以帮助浏览器选择正确的图像
html 复制代码
<img srcset="fairy-med.jpg 480w, fairy-large.jpg 800w" sizes="(max-width: 600px) 480px, 800px" src="fairy-large.jpg" alt="Elva dressed as a fairy" />
  1. fetchpriority 属性:浏览器优先获取该资源
html 复制代码
<img src="logo.svg" fetchpriority="high" />
  1. <img sizes="auto" loading="lazy">:sizes="auto" 属性会在图像加载之前为其预留布局空间,从而避免一些布局偏移
html 复制代码
<img sizes="auto" loading="lazy" />
  1. blocking="render":阻止渲染(但不阻止解析),直到某些资源加载完毕
html 复制代码
<script blocking="render" async src="async-script.js"></script>

Web 组件 Top 5

开发者使用最多的 Web 组件功能 Top 5 分别是:

  1. 自定义元素
html 复制代码
<my-switch start="On" end="Off">Wi-Fi</my-switch>
  1. 定义自定义元素
javascript 复制代码
class MyElement extends HTMLElement { ... }
customElements.define("my-element", MyElement);
  1. Shadow DOM:将外部不可见的元素封装起来,并使用不影响页面其余部分的 CSS 对其进行样式设置
javascript 复制代码
this.shadowRoot = this.attachShadow({ mode: "open" });
  1. slot 属性:将组件 UI 中预定义的部分替换为自己的元素
html 复制代码
<my-switch>
  Wi-Fi
  <i slot="start" class="icon-on">On</i>
  <i slot="end" class="icon-off">Off</i>
</my-switch>
  1. 声明 Shadow DOM:使用 HTML 定义 Shadow 树,例如在服务器端渲染 Web 组件时
html 复制代码
<host-element>
  <template shadowrootmode="open">
    <!-- Shadow content -->
  </template>
</host-element>

系统功能 Top 5

开发者使用最多的系统功能 Top 5 分别是:

  1. Web Share API:将内容共享给用户选择的各种目标的机制
javascript 复制代码
navigator.share(shareData);
  1. 文件系统访问 API:访问用户本地设备上的文件和目录,并创建可写文件,以便进行更新
javascript 复制代码
const handle = await window.showSaveFilePicker();
const writable = await handle.createWritable();
await writable.write("Hello, world!");
await writable.close();
  1. SpeechRecognition:将麦克风输入转换为文本的 API
javascript 复制代码
const rec = new SpeechRecognition();
rec.lang = "en-US";
rec.addEventListener("result", (e) => console.log(e.results[0][0].transcript));
rec.start();
  1. share_target manifest field:允许 PWA 通过系统共享对话框接收来自其他应用程序共享的数据(文本、文件、URL)
json 复制代码
"share_target": {
  "action": "/share",
  "method": "POST",
  "enctype": "multipart/form-data",
  "params": {
    "title": "title",
    "text": "text",
    "url": "url",
    "files": [{ "name": "image", "accept": ["image/*"] }]
  }
}
  1. 文件处理 API:允许 PWA 将自身注册为某些文件类型的处理程序
json 复制代码
"file_handlers": [{
  "action": "/open-file",
  "accept": {
    "image/svg+xml": ".svg",
    "image/png": ".png"
  }
}]

无障碍 Top 5

开发者使用最多的无障碍功能 Top 5 分别是:

  1. 地标元素
  2. tabindex 属性:使 HTML 元素可聚焦,允许或阻止它们按顺序获得焦点
html 复制代码
<div role="button" tabindex="0">I'm Tabbable</div>
  1. <search>:用于封装搜索用户界面的语义元素
html 复制代码
<search>
  <form action="search.php">
    <label>Find: <input name="q" type="search" /></label>
    <button>Go!</button>
  </form>
</search>
  1. focusgroup 属性:使用键盘方向键在可聚焦元素之间进行键盘焦点导航
html 复制代码
<div focusgroup="wrap horizontal">
  <!-- child elements -->
</div>

最后

我们通常认为最炫酷的功能会最吸引开发者,比如人工智能 API、3D/XR/AR 或设备 API。

然而,年复一年,最终脱颖而出的却往往是那些看似平淡无奇的功能,甚至是一些非常普通的功能:下拉菜单、组合框、弹出框、对话框、表单验证、文件加载和保存、模板、安全地显示用户生成内容、图标等等。

有人可能会问:"这些功能不是早就有了吗?"

确实是,但问题在于 ------当用户界面无法自定义或设置样式时,它实际上就等于无法使用。

于是你不得不重复造轮子,拼一堆第三方库。结果明明是基础需求,却搞得像 "高端操作"。

但好消息是:HTML 正在变好!

2023 年还在讨论的功能,现在已经在主流浏览器上线了;之前没法用的 Popover API,现在所有主流浏览器都支持了。

虽然开发者的信任要滞后很多......

比如 Popover API 明明已经全支持了,却还是开发者投诉 "浏览器不支持" 最多的功能 ------ 不是浏览器没跟上,是我们还没反应过来 "这个功能已经能用了"。

此外,AI 也拖了后腿。

按理说,AI 懂现代 Web 功能,应该能帮我们更快应用新特性,但实际情况是 ------ AI 太保守了,推荐的都是 "老办法",反而让新功能的普及变慢了。

总的来说,HTML 的未来方向很清晰:更灵活、更能表达需求、更贴合开发者实际开发习惯。

最后使用报告中的一句话:

"Web 的进步很少轰轰烈烈,但都是累积的。每多一个基本功能,就少用一次变通方案、少依赖一个库、少写一个脆弱的 hack。等这些基础都到位了,整个 Web 开发都会变轻松。"

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的"网页版朋友圈",关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

相关推荐
小熊在忙fpga12 分钟前
N32G430芯片的flash表示
前端·javascript·html
Data analyse45618 分钟前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
NC 王炸23 分钟前
AI 做的便签,换个浏览器就没了?加一个导出按钮,把数据带走
javascript·ai编程·数据备份·localstorage·txt导出
todoitbo24 分钟前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员29 分钟前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB34 分钟前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz35 分钟前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋1 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5
silvamux_1 小时前
4款新模型商务邮件翻译横评:0.98到0.46
android·java·javascript
雪芽蓝域zzs1 小时前
JS 项目转 TS 项目(Vue3 + 若依这类后台项目)完整改造清单
前端·vue.js