HTML5 从入门到精通:不止于标签——HTML5 高级特性,小交互无需 JavaScript
摘要本文是 HTML5 零基础系列的第七篇。我们将探索一些“自带魔法”的 HTML5 特性让用户直接编辑页面内容的contenteditable属性储存自定义数据的data-*属性无需 JS 就能实现折叠面板的details与summary显示任务进度的progress和度量衡meter让元素可拖拽的draggable属性以及隐藏元素的hidden属性。这些特性大部分只需一个属性或简单的标签就能实现即使你还不会写 JavaScript也能让你的网页具备一点点交互和动态感。每个知识点都配有示例代码和浏览器效果描述请务必亲手测试。一、前言在前六篇中我们已经学习了从基础文本标签到语义化结构的完整 HTML5 知识体系。但 HTML5 的魅力远不止于此它内置了一些“小而美”的功能可以让页面具备简单的编辑能力、数据存储、进度展示、折叠面板等这些在过去往往需要编写复杂的 JavaScript 才能实现。今天我们就来学习这些高级特性它们大多通过属性或新增标签的形式提供使用起来非常方便。即使你暂时不学 JavaScript也能做出一些有趣的效果。二、可编辑内容contenteditable属性2.1 作用contenteditable是一个全局属性几乎可以用在任何 HTML 标签上它允许用户直接编辑元素内的内容就像使用文字处理软件一样。设置contenteditabletrue后用户点击该区域就可以输入、删除、修改文字甚至粘贴带格式的内容。2.2 语法element contenteditabletrue这里是可编辑的文字/element也可以使用contenteditablefalse显式禁止编辑默认情况下不可编辑。2.3 示例h1 contenteditabletrue双击我试试——标题可编辑/h1 p contenteditabletrue这个段落也可以直接修改。随便输入文字甚至删除我。/p div contenteditabletrue styleborder:1px solid #ccc; padding:8px;为了看到编辑区临时加了个边框但这不是 CSS 学习范围仅临时演示/div注意contenteditable修改的内容只是临时在浏览器中显示刷新页面后会恢复原样。如果想保存编辑后的内容需要配合 JavaScript 和后台存储但那是后续课程的内容。2.4 实际应用场景简易的在线笔记编辑区。富文本编辑器的基础配合 JS 可以实现工具栏。用户自定义个人简介预览时允许编辑。三、自定义数据属性data-*3.1 作用data-*是一类属性的统称允许你在 HTML 元素上存储自定义的、与页面渲染无关的额外信息而不会影响页面显示。这些数据可以被 JavaScript 读取。*可以是任何小写字母组成的名字不能有大写可以包含连字符。3.2 语法div>ul li />3.4 为什么有用将数据与特定元素关联无需单独维护 JavaScript 对象。在后续的 JavaScript 中可以通过element.dataset轻松获取例如dataset.productId。对 SEO 和屏幕阅读器无影响因为不显示。注意自定义数据属性不应该用来替代已有标准属性如id、class它是为应用特有的数据而设计的。四、折叠面板details与summary4.1 作用details标签创建一个“详细信息”组件用户点击时会展开或收起其中的内容。summary作为摘要标题默认显示“详细信息”或自定义文字。这是纯 HTML 实现的交互效果无需一行 JS。4.2 语法details summary点击展开/收起/summary p这里是详细内容默认是折叠隐藏的。用户点击 summary 区域后内容会显示出来。/p ul li可以包含任何 HTML 内容/li li列表、图片、表格等都可以/li /ul /details4.3 属性open默认情况下details是折叠状态。如果加上open属性则页面加载时默认展开。details open summary默认展开的章节/summary p因为设置了 open 属性所以一开始就能看到这段内容。/p /details4.4 示例常见问题FAQh2常见问题解答/h2 details summaryHTML5 兼容哪些浏览器/summary pHTML5 已被所有现代浏览器完美支持包括 Chrome、Firefox、Edge、Safari。旧版 IE 9 以下部分支持但目前已很少使用。/p /details details summary在哪里编写 HTML 代码/summary p你可以使用任何文本编辑器比如 Sublime Text、VS Code、记事本等。推荐使用专业的代码编辑器以获得语法高亮和自动补全。/p /details details summary学习 HTML5 需要先学编程语言吗/summary p不需要。HTML 是标记语言入门非常容易。你完全可以零基础开始学习。/p /details4.5 高级用法嵌套与样式提示details可以嵌套使用形成多级折叠菜单不需要 JS。例如details summary第一章/summary p第一章内容简介……/p details summary1.1 节/summary p具体细节……/p /details /details五、进度条progress标签5.1 作用progress用于表示任务的完成进度比如文件上传百分比、问卷完成度。它显示为一个条形进度指示器值可以通过属性设置也可以动态更新需要 JS。我们这里先学习静态设置。5.2 语法progress value0.6 max160%/progressvalue当前进度值。max最大值默认为 1。标签之间的文字如 “60%”会在不支持progress的旧浏览器中显示。5.3 示例pHTML5 学习进度/p progress value70 max10070%/progress p文件上传中/p progress value0.3535%/progress p没有设置 value 的 indeterminate 状态/p progress未开始/progress注意如果不设置value进度条会呈现“不确定”状态通常是来回跳动的条纹表示正在等待或未知进度。5.4 实际应用用户注册步骤指示配合 JS 更新 value。问卷调查完成百分比。下载/上传进度显示。六、度量衡meter标签6.1 作用meter表示已知范围内的标量值例如磁盘使用量、投票结果、温度、评分等。它与progress不同progress表示任务进度有完成目标的概念而meter表示一个数值在范围内的位置不涉及完成任务。6.2 语法meter value0.8 min0 max180%/meter常用属性value当前值必需。min最小值默认为 0。max最大值默认为 1。low、high界定“低”和“高”的阈值。optimum最佳值。浏览器会根据value相对于low、high、optimum的位置自动改变颜色绿色/黄色/红色。这是原生 HTML 提供的可视化提示。6.3 示例p电量剩余meter value0.25 min0 max125%/meter低电量/p p磁盘空间使用率meter value0.85 min0 max185%/meter警告级别/p p投票支持率meter value0.67 min0 max167%/meter良好/p p设定 low/high 阈值/p p内存使用meter value0.3 min0 max1 low0.2 high0.8 optimum0.530%/meter 低于 low显示绿色实际浏览器会按最优区域着色/p6.4 与progress的区别总结标签含义典型场景progress任务完成进度文件上传、安装进度meter静态范围内的测量值电量、温度、投票率、库存水平七、拖拽draggable属性7.1 作用draggable是一个全局属性用于指示元素是否可以被用户拖拽。默认情况下图片、链接是可拖拽的而文本、普通元素不可拖拽。设置draggabletrue可以让任何元素变得可拖拽但拖拽后的行为如放置目标、数据传输需要 JavaScript 来处理。尽管如此我们可以先演示元素的拖拽“样式”效果。7.2 语法div draggabletrue试着把我拖拽到别处但松开后不会有任何反应/div img srclogo.png draggabletrue alt可拖拽图片7.3 基础示例仅展示可拖拽不实现放置p以下元素可以拖拽点击并按住鼠标移动/p div draggabletrue styleborder:1px solid #aaa; display:inline-block; padding:8px;可拖拽的盒子/div p draggabletrue这个段落也可以拖拽。/p p注意松开鼠标后元素会回到原位置因为缺少 JavaScript 处理放置。但拖拽的“幽灵”效果会出现。/p提示要实现真正的拖放比如拖拽图片到另一个容器需要编写 JavaScript 监听dragstart、drop等事件。我们会在后续中讲解现在只需知道draggable属性让元素变为可拖拽源即可。八、隐藏元素hidden属性8.1 作用hidden是一个布尔属性加上后元素在页面中完全不可见也不占据任何空间相当于display: none。与 CSS 的visibility: hidden不同后者仍占位。hidden常用于暂时隐藏某些内容未来可通过 JavaScript 移除属性来显示。8.2 语法p hidden这段文字被隐藏了你看不到我。/p div hidden隐藏的 div 内容/div8.3 示例p可见的段落。/p p hidden这个段落被 hidden 属性隐藏在页面中不显示且不占位。/p p后面的文字会紧跟着第一个段落中间没有空白。/p button这里本应是一个切换按钮但需要 JS仅示意/button8.4 注意事项hidden不能直接用于隐藏带有自定义控件样式的元素但语义上正确。不要为了 SEO 欺骗而隐藏内容搜索引擎会识别。与 CSS 的display: none效果一致但hidden更具语义表示该元素当前与页面无关。九、其他有用的属性或标签简览9.1spellcheck属性用于控制输入框或可编辑区域是否进行拼写检查英语等。例如textarea spellchecktrue rows3 cols30Hellow world./textarea红色波浪线提示拼写错误。9.2translate属性指示元素内容是否应该被翻译当浏览器触发页面翻译时。translateno表示不要翻译例如品牌名、代码。p translatenoHTML5/p9.3wbr标签Word Break Opportunity在长单词或 URL 中建议可换行的位置不会显示任何东西只影响换行行为。p一个超长的URLhttps://www.example.com/wbrverywbrlongwbrpathwbrtowbrfile/p当浏览器窗口较窄时会在wbr处换行。9.4bdi标签Bidirectional Isolate用于处理从右至左的文字如阿拉伯语与从左至右的混合防止方向错乱。不常用了解即可。十、综合实操创建一个“交互演示”页面新建advanced_features.html综合使用上述大部分高级特性。!DOCTYPE html html langzh-CN head meta charsetUTF-8 titleHTML5 高级特性演示/title /head body h1✨ HTML5 高级特性实验室/h1 h21. 可编辑内容/h2 p contenteditabletrue✏️ 点击这段文字直接修改我刷新页面会重置/p h22. 自定义数据属性/h2 div />保存后用浏览器打开亲自体验每个特性的效果。十一、Sublime Text 小技巧输入details按 Tab →details/details再输入summary按 Tab 快速添加。输入progress按 Tab →progress value/progress。输入meter按 Tab →meter value/meter。对于属性可以手动输入contenteditabletrueEmmet 也有快捷方式如p[contenteditabletrue]。十二、注意事项与兼容性progress和meter在旧版 IEIE10 以下不支持但现代浏览器全支持。details/summary在 IE 和旧 Edge 中不支持但在 Chrome、Firefox、Safari、新 Edge 中完美支持。contenteditable和draggable几乎所有现代浏览器都支持。data-*没有任何兼容问题但读取需要 JS不影响页面显示。对于不支持上述特性的浏览器用户会看到后备内容比如progress内部的文字或功能缺失折叠面板不折叠但会显示全部内容。通常现代项目中可放心使用。十三、总结核心知识点回顾contenteditable让任何元素变成可编辑区域用户可直接修改内容。data-*自定义属性为元素存储额外数据对显示无影响供 JS 调用。details与summary纯 HTML 折叠面板自带展开/收起交互可设置open属性默认展开。progress显示任务完成进度需设置value和max。meter显示度量值如电量、温度可用low、high、optimum辅助着色。draggable让元素可拖拽虽然完整拖放需要 JS但元素本身可以出现拖拽反馈。hidden隐藏元素且不占位。其他spellcheck、translate、wbr、bdi等辅助特性。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。动手练习是掌握编程最快的方法请务必亲手敲一遍本文的所有示例代码并截图保存你的成果。你的关注是我坚持原创和细节共享的力量来源谢谢大家。