HTML不是编程语言,而是一种用于定义网页结构和内容的标记语言,通过标签声明语义化结构,不执行逻辑或计算。

HTML 不是编程语言,它不执行逻辑、不处理条件分支、也不做循环计算;它是一套描述内容关系与结构的标记规则——浏览器按这个规则把文本变成可交互、可访问、可索引的页面。
HTML 的本质是结构声明,不是行为控制
写 <h1> 不是为了“让字变大”,而是告诉浏览器“这是页面最高级标题”;用 <nav> 不是为了“加个导航栏样式”,而是声明“这部分是主导航区域”。搜索引擎靠它理解页面重点,屏幕阅读器靠它组织朗读顺序,你自己半年后改代码时,靠它快速定位模块。
- 全用
<div>套娃,document.querySelector('nav')就拿不到导航容器 -
<img>缺alt属性,不仅 WCAG 不通过,图片加载失败时用户看到的就是一片空白 -
<h2>后面直接跟<h4>,语义层级断裂,SEO 权重会稀释,辅助技术可能跳过中间层级 - 属性值不加引号(如
class=btn primary),遇到空格或特殊字符时解析直接出错,不是“看起来一样”,是真挂
本地双击打开 HTML 文件总不生效?不是代码问题,是协议限制
浏览器对 file:// 协议有严格策略:外部 <script> 加载被拦、fetch() 请求 JSON 报跨域错误、部分 CSS @import 失效。你写的页面没坏,只是被拦在了门口。
- 开发阶段必须起本地服务器:
npx serve、python3 -m http.server或 VS Code 的 Live Server 插件 - 地址必须是
http://localhost:5000这类,不是file:///Users/xxx/index.html - 别去改浏览器设置试图绕过——不同版本行为不一致,上线后照样崩
form 提交后页面跳转了,怎么让它不跳?得用 JS 拦,但不能只拦
默认跳转是 HTML 的设计本意,不是 bug。想留在当前页,必须用 JavaScript 干预,但光写 onsubmit="return false;" 只是止跳,没发数据,也没反馈。
立即学习“前端免费学习笔记(深入)”;
- 给
<form>绑定submit事件监听器,调event.preventDefault() - 确保提交按钮有
type="submit",否则点按钮根本不会触发submit事件 - 用
fetch()手动发请求,再根据响应更新 DOM(比如显示成功提示、清空表单) - 服务端返回的不是 HTML 页面,而是 JSON,前端自己决定怎么渲染结果
HTML5 新增 API 不是“锦上添花”,而是现代交互的基础设施
Canvas、Web Storage、Geolocation、Drag & Drop 这些不是可选项,它们决定了你能做什么:离线缓存靠 localStorage,实时绘图靠 <canvas>,位置服务靠 navigator.geolocation,文件预览靠 FileReader。
-
localStorage.setItem('theme', 'dark')比存在 cookie 更安全、更持久 -
<video controls>是基础播放器,但要加字幕、变速、截图,就得用video.play()、video.currentTime等 API 控制 -
history.pushState()配合popstate事件,才能实现无刷新路由,这是 SPA 的底层支撑
真正容易被忽略的是:这些 API 的兼容性不是“全有或全无”,而是按方法/属性逐个支持。查 MDN 时得盯准具体函数名,比如 localStorage 有,但 localStorage.clear() 在某些旧安卓 WebView 里会静默失败。



















