简介:这套HTML系列编程示例面向网页开发初学者,以源码方式整理了十四个可直接运行和修改的练习文件,覆盖基础文档结构、框架、表格、表单、列表、图片、区块引用等常用知识点,适合配合教材或自学时按顺序动手实践。全部内容均为轻量级本地文件,其中十二个超文本标记语言示例文件配有两个图片素材,总体积仅五十二千字节,下载后无需复杂环境即可在浏览器中直接打开查看效果。目前已有一百五十四人学习使用,内容虽简短,却覆盖了入门阶段最核心的语法与页面组织方式。与单纯阅读理论不同,这套示例刻意保留了精简清晰的代码结构,学习者可参照示例逐步搭建自己的页面,并通过修改属性、嵌套标签和添加层叠样式表(CSS)来加深理解,快速跨过从看懂语法到写出完整网页的门槛。 HTML 是我见过最容易上头也最容易劝退的一门语言。说它容易,是因为不管新手还是老手,打开任意一个网页按 F12 都能看到一段类似<!doctype html><html lang="zh-cn">...的骨架;说它劝退,是很多教程只顾着把标签一个个罗列出来,却很少告诉你这些标签到底应该怎么组合着用。所以我整理了这套 HTML 系列编程示例,从基本标签到表格、表单、3D 旋转、返回顶部,再到一个完整的小型网页项目,全部都是能直接复制跑起来的代码。每个例子我都会解释一句“为什么这么写”,方便刚入门和准备前端面试的朋友少走弯路。
1. HTML 文档骨架:先让浏览器知道你在说什么
1.1 文档类型声明与字符编码的作用
经常看到有人问,为什么网上复制的网页源代码第一行都是<!doctype html>?这个声明看着不起眼,但它是在告诉浏览器:“我这份文档是按照 HTML5 标准写的,请用标准模式渲染我。”很多老版本浏览器如果没有这行,会进入“怪异模式”,盒模型、行高、字体继承全都会和预期打架。所以你手写页面时,这一行别省,别觉得少几个字符无所谓。
文档头部里lang="zh-cn"是给搜索引擎和屏幕阅读器看的,表示页面主要内容是简体中文。meta charset="utf-8"更关键,它的意思是文档用 UTF-8 编码保存和解析。有些朋友用记事本写完 HTML,中文变成了乱码,八成就是这里没写,或者文件保存时选成了 ANSI。这种情况也不用慌,把head里的 charset 改回utf-8,再把文件另存为 UTF-8 编码即可。
一个标准 HTML 骨架大概是这样的:
<!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>HTML 系列示例</title> </head> <body> <h1>你好,HTML</h1> </body> </html>这段代码里还多写了一行 viewport,作用是在手机上让页面宽度等于设备宽度、缩放比例为 1。做移动端适配的时候这行基本必加,这也是面试经常问到的点:没有 viewport 的页面在手机上会出现横向滚动条或字体自动放大。
1.2 标签语法与层级:别把标签“写反”了
HTML 的语法核心就两件事:标签要配对,层级要正确。<p>开始就必须有</p>结束,按钮、图片这类自闭合标签如<img>可以不写结束标签,但还是建议写成<img src="..." alt="...">,老代码和现代编辑器都能正确识别。层级也就是“谁套着谁”,比如:
<ul> <li>列表项</li> </ul>这里的<li>必须包在<ul>或<ol>里面,反过来就不合法。很多新手写表格和表单时最容易把标签交叉嵌套,比如在<p>里套<div>,浏览器虽然不会报错,但渲染结果可能完全不是你想要的。
HTML 标签还有块级和内联的区别。块级元素像<div>、<p>、<h1>会独占一行,适合搭页面结构;内联元素像<span>、<a>、<strong>不会换行,适合在文字中间加样式或链接。理解这个区别之后,再遇到“图片下方多出一块空白”之类的问题,你就会有排查方向了。
2. 基础标签系列示例:文本、表格、表单与图片定位
2.1 文本排版:一个干净的内容卡片
我练习 HTML 时最喜欢做的第一个示例是一个“内容卡片”,因为它能把标题、段落、强调、列表全串起来,也最容易看到成果。你可以新建一个.html文件,把下面代码贴进去:
<h2>代码笔记</h2> <p>今天整理了 <strong>HTML 常用标签</strong>,包括文本、列表、链接。</p> <ul> <li><em>强调文本</em> 用 <code><em></code></li> <li>加粗用 <code><strong></code></li> <li>换行不回车,用 <code><br></code></li> </ul>这里有一个很容易踩的坑:在代码里直接写<p>、<strong>这些标签时,浏览器会把它当成真实标签解析掉,所以需要用<和>表示小于号和大于号,才能在页面上显示标签本身。我在带新人时发现,十个里面有八个都会在这里卡一下,所以特意把这段写出来。
2.2 表格与表单:数据展示和用户输入的正确姿势
表格这个知识点,看起来简单,写起来门道很多。基础结构是<table>套<tr>(行)、<th>(表头单元格)、<td>(普通单元格)。如果你要合并单元格,用colspan横向合并、rowspan纵向合并,容易出错的位置是合并之后表格的总列数会变,比如:
<table border="1"> <tr> <th>科目</th> <th>周课时</th> </tr> <tr> <td>前端基础</td> <td>4</td> </tr> <tr> <td colspan="2">总计:以课表为准</td> </tr> </table>这段代码里最后一行用了colspan="2",意思是这一格横跨两列。如果你把它漏掉,表格就会变成三列显示,布局直接乱掉。
表单标签是另一个重点。最基础的表单实现要包含form、input、textarea、select、button。注意提交按钮的name属性很有用,后端接口靠它识别字段;label的for属性要与输入框的id对应,这样点击文字时输入框会自动聚焦,对提高体验很有帮助。
<form> <label for="name">姓名:</label> <input type="text" id="name" name="name" required> <br><br> <label for="city">城市:</label> <select id="city" name="city"> <option value="beijing">北京</option> <option value="shanghai">上海</option> </select> <br><br> <button type="submit">提交</button> </form>2.3 图片位置调整:三种常用写法
搜索热词里有一个“html 如何改变图片位置”,估计是很多新手在做第一个页面时都会遇到的问题。图片默认是内联元素,会随着文字流排列。想真正“定位”图片,建议用 CSS,而不是在 HTML 里硬塞一堆空格或<br>。
第一种方式是display: block; margin: 0 auto;,可以让图片居中;第二种是用float: left;或float: right;让图片环绕在文字旁边;第三种是position: absolute;,在父容器设置position: relative;后,用top、left精确定位。三种方式看起来差不多,但适用场景不同。布局复杂时,我一般优先选第三种,因为它不依赖文档流,不容易被其他元素顶跑。
3. 加点动态效果:3D 旋转、一键返回顶部与爱心代码
3.1 3D 旋转卡片的关键参数
很多初学者看到 3D 旋转组件觉得很酷,以为要写很多 JS,其实核心只是 CSS 的三行属性:perspective、transform-style: preserve-3d和transform。perspective是透视距离,数值越小,3D 效果越强烈;preserve-3d让子元素保留三维空间位置;transform里写rotateY()或rotateX()就能让卡片绕轴旋转。
比如做一个鼠标移入时卡片轻微翻转的效果,可以这样写:
.card { width: 200px; height: 260px; transform-style: preserve-3d; transition: transform 0.6s; } .card:hover { transform: rotateY(180deg); }如果想让它自动旋转,可以在 JS 里每隔 16 毫秒把rotateY的角度加 0.2,再用requestAnimationFrame驱动。这里最容易被忽略的是给卡片外层的容器设置perspective,不加它的话,旋转看起来就只是一个平面压扁,完全体会不到“3D 感”。这个点面试时经常作为 CSS 动画的进阶题目出现,值得亲手试一遍。
3.2 返回顶部按钮的核心算法
“一键返回顶部”看起来是个小功能,但处理不好会让用户很难受。最简单的写法是给按钮绑定点击事件,然后调用:
window.scrollTo({ top: 0, behavior: 'smooth' });不过真正的“算法”在于什么时候让按钮出现。你要在window.onscroll里读取document.documentElement.scrollTop或window.scrollY,当它大于某个阈值(比如 300 像素)时显示按钮,否则隐藏。如果要求更顺滑的手动缓动,可以这样写:
function scrollToTop() { if (window.scrollY > 0) { window.scrollBy(0, -100); requestAnimationFrame(scrollToTop); } }这个写法是每次往上滚动 100 像素,再用动画帧循环,直到回到顶部。核心思想是:每次动画只做一小步,浏览器下一帧再继续,而不是一次性跳过去。很多面试官会追问为什么不用while循环,因为 JS 是单线程的,循环会让页面卡死,动画根本没有机会渲染。
3.3 爱心代码:一个适合练习的“小彩蛋”
热搜词里的“html 爱心代码”估计又是一个新手刷到的炫酷案例。这种代码基本上是用 CSS 画两个圆再旋转组合成一个心形,或者用 canvas 一帧一帧绘制粒子爱心。作为入门练习,我挺推荐你敲一遍,倒不是为了表白,而是能顺便练习transform、canvas的坐标计算和requestAnimationFrame的用法。
不过要提醒一句:这类效果在简历作品里只能当彩蛋,不能当核心功能。我做项目评审时看到过不少人把爱心动画放在页面最显眼的位置,结果用户并不知道它想表达什么。比如你可以在页脚放一个“点击查看彩蛋”的小按钮,让爱心动画在弹窗里出现,既有趣又不干扰主流程。
4. 综合项目实战:把 HTML+CSS+JS 串成一个完整页面
4.1 页面结构如何拆分
前面讲了那么多零散示例,现在来一个“html css js 网页设计”的综合项目。与其记碎片知识,不如做一个“产品介绍页”。我习惯先把页面拆成四个区域:页头导航、主内容区、侧边信息、页脚。
页头放 logo 和菜单;主内容区放产品卡片;侧边信息放一段表格,用来对比产品参数;页脚放版权。文件也不用搞得太复杂,单页里用<style>和<script>包起来就好,学习阶段越简单越好管理。
4.2 示例代码:带导航、卡片和返回顶部的页面
下面是一份可以直接复制运行的完整页面,里面用到了文本标签、表格、CSS 布局、JS 返回顶部,可以把它保存为index.html打开:
<!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>产品介绍页示例</title> <style> body { margin: 0; font-family: sans-serif; } header { background: #333; color: #fff; padding: 16px; } nav a { color: #fff; margin-right: 12px; text-decoration: none; } main { max-width: 900px; margin: 24px auto; padding: 0 16px; } .card { border: 1px solid #ddd; border-radius: 8px; padding: 16px; } table { border-collapse: collapse; margin-top: 16px; width: 100%; } th, td { border: 1px solid #ccc; padding: 8px; } #goTop { display: none; position: fixed; right: 24px; bottom: 40px; padding: 10px 14px; border: none; border-radius: 6px; background: #333; color: #fff; cursor: pointer; } </style> </head> <body> <header> <nav> <a href="#">首页</a> <a href="#">产品</a> <a href="#">关于</a> </nav> </header> <main> <div class="card"> <h2>新款学习套件</h2> <p>适合 <strong>前端入门</strong> 的完整示例,涵盖 HTML、CSS、JS 基础语法。</p> </div> <table> <tr><th>模块</th><th>内容</th></tr> <tr><td>HTML</td><td>标签语义化</td></tr> <tr><td>CSS</td><td>布局与动画</td></tr> <tr><td>JS</td><td>事件与交互</td></tr> </table> </main> <button id="goTop">返回顶部</button> <script> var btn = document.getElementById('goTop'); window.onscroll = function () { btn.style.display = window.scrollY > 300 ? 'block' : 'none'; }; btn.onclick = function () { window.scrollTo({ top: 0, behavior: 'smooth' }); }; </script> </body> </html>这里你可以看到,所有图片定位、表格边框、按钮显隐都是靠 CSS 完成的,JS 只负责两件事:监听滚动、处理点击。这是一个人门级综合项目最舒服的分工方式。
4.3 动手调试比背教程更重要
每次带新人,我都会让他们把这个页面拿去做改动练习:把卡片文字换掉,给表格加一行,把导航链接改成新页面。改完以后按 F12 打开浏览器开发者工具,在 Elements 面板里临时修改样式,观察页面变化。这个过程比背十遍标签都管用。
调试时有个很实用的技巧:不确定某个元素为什么多出一条边,先在 Elements 面板点击该元素,看右侧的盒模型图。如果 width、padding、border 三项谁扩大了,问题基本就找到了。很多朋友说“HTML 文件无法预览”,其实不是文件坏了,而是代码里某个标签没闭合,浏览器按容错模式渲染出了奇怪效果。
5. 工具链、格式转换与面试避坑速查
5.1 编辑器选择与 HTML 文件无法预览的排查
写 HTML 不需要重型 IDE,我用过的编辑器从记事本、VS Code 到 Ubuntu 下的 Sublime Text、vim 都有。新手认准 VS Code 即可,装上 Live Server 插件可以直接在浏览器里热更新;如果在 Ubuntu 上命令行为主,用nano或vim写简单页面也完全够用。
遇到“HTML 文件无法预览”时,先按这三个顺序查:一是文件扩展名是否真的是.html,有些系统默认隐藏扩展名,你存成index.html.txt还以为是网页文件;二是文件路径里是否有中文或特殊字符,浏览器解析本地路径时容易出问题;三是浏览器有没有缓存旧页面,用“强制刷新”快捷键 Ctrl+F5 试一次。
5.2 格式转换:HTML 转 Markdown、转 WPS 表格、data:text/html
HTML 在日常工作中经常要转换成其他格式。最经典的场景是写完周报想转成 Markdown,可以直接用 pandoc 命令:
pandoc report.html -t markdown -o report.md如果是 HTML 里的表格想转成 WPS 表格,最快的方式是直接在浏览器里打开 HTML,选中表格区域复制,再粘贴到 WPS 表格里。粘贴前记得先建一个新工作表,粘贴时选择“匹配目标格式”,这样边框和列宽会相对正常。
另一个容易被忽略的小技巧是data:text/html协议。你可以在浏览器地址栏直接输入data:text/html,<h1>你好</h1>并回车,浏览器会把它当成一个临时 HTML 页面渲染。这个玩法适合快速测试一段 HTML 片段,或把代码存成浏览器书签,比如写一段自动设置页面背景色的 JavaScript 书签。
5.3 PyQt5 里显示 HTML 的另类玩法
如果你不是只做网页,而是用 Python 写桌面工具,那么 PyQt5 里的QTextBrowser或QWebEngineView可以让你直接用 HTML 渲染富文本和复杂排版。比如在QTextBrowser中显示一段说明文档,可以调用setHtml:
from PyQt5.QtWidgets import QApplication, QTextBrowser app = QApplication([]) browser = QTextBrowser() browser.setHtml("<h3>说明</h3><p>这是<strong>HTML</strong>渲染的段落。</p>") browser.show() app.exec_()这个思路在做本地工具、数据报告或聊天窗口时非常实用,因为它避免了逐个控件摆放位置的麻烦。需要注意QTextBrowser对 CSS 的支持有限,复杂页面建议用QWebEngineView,但那个组件体积大很多,如果只是渲染一段说明文字,QTextBrowser完全够用。
5.4 HTML 高频面试题清单与答题思路
整理热词的时候,我发现“html 面试”“html css 面试”这些词的搜索量一直不低。这里列几个我常用来考察候选人的点:<!DOCTYPE html>的作用是什么;HTML5 新增了哪些语义化标签;块级元素和内联元素的区别;href和src的区别;localStorage、sessionStorage和 Cookie 的区别;页面加载时 CSS 和 JS 的阻塞情况。
这些问题并不难,但很能看出基础扎不扎实。比如问我“HTML5 新增加载提示”,最关键的是别把细节背错:删除线用<del>,不是<s>;进度条用<progress>,不是<meter>。能准确说出来,面试官会觉得你有真实写码经历,而不是只刷过题。
5.5 常见问题速查表
最后把这一年来看到最多的几个问题整理成一张表,方便你遇到时快速查找:
| 现象 | 大概率原因 | 排查方法 |
|---|---|---|
| 中文乱码 | 文件保存编码与 meta charset 不一致 | 另存为 UTF-8 编码 |
| 图片不显示 | 路径写错或图片文件被移动 | 用相对路径并检查文件名大小写 |
| 样式没生效 | 选择器写错或样式被覆盖 | F12 查看 Computed 样式 |
| 点击返回顶部无效 | JS 监听位置错误或按钮被遮挡 | 确认按钮不在父容器之外 |
| HTML 文件无法预览 | 扩展名 .txt 或缓存未更新 | 查看扩展名并强制刷新 |
| 表格对不齐 | 合并单元格未调整总列数 | 检查 colspan/rowspan 是否合理 |
这六类问题是我在带开发新人时遇到最频繁的,很多看起来诡异的问题,最后都压在文件编码、路径、缓存和标签闭合这四件事上。把这些基础问题排查顺了,你写的 HTML 才能真正稳定“跑起来”。
我个人在实际操作中的体会是:HTML 的入门门槛确实低,但别因此小看它。把每一类标签都单独写成一个可运行示例,存成独立文件,再慢慢组合成项目,是效率最高的方式。这个系列从基础骨架到综合项目,每一步都对应真实开发中会用到的能力,建议你从第 2 节开始,每天敲一个示例,一周之后回头看,你会发现自己对网页的理解完全不一样。
本文还有配套的精品资源,点击获取