ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HTML学习第四天:从标签到表格、表单与完整网页结构

HTML学习第四天:从标签到表格、表单与完整网页结构 写HTML的第四天很多教程会告诉你该学CSS了但我想岔开一下第四天恰恰是把前三天学的零碎标签“组装”成一个完整结构的关键节点。这一天的内容不是背新标签而是理解标签之间的关系、文档的骨架、以及一个HTML文件如何在浏览器里被“读”出来。这篇文章记录的就是我第四天的完整学习路径包含表格、表单、多媒体标签的实战细节以及几个搜索热度很高但你未必真正搞懂的知识点——比如!DOCTYPE html那一长串开头到底是什么、为什么中文会乱码、为什么很多网页源码长得一模一样。如果你正好在自学HTML想从“会写几个标签”过渡到“能独立搭出一个像样的静态页面”这篇内容应该对你有用。1. 第四天该学什么从堆放标签到搭建结构前三天我基本处于“认识食材”的阶段h1代表标题、p代表段落、a代表链接、img代表图片每个标签单独拿出来都知道是干嘛的但一动手写整个页面就不知道从哪里下手。第四天我开始意识到HTML真正的难点不在于记住标签而在于搞清楚页面到底分了哪几个部分、每个部分里放什么、标签之间怎么嵌套才不算错。我后来总结了一个特别直白的标准前三天是让自己“见标签认得出来”第四天要让自己“看到一个完整网页能说出它的结构层次”。怎么训练拿着任意一个网站首页不看源码先用笔在纸上框出顶部导航、中间内容区、侧边栏、底部版权信息然后再打开浏览器的开发者工具对照自己框出来的结构去看真实的HTML层级。我试了几个常见的网站页面发现所有的网页都逃不出“头部、主体、底部”这个框架而主体里又是“一篇文章一个区块、一组图片一个区块”的重复模式。这种感觉一旦建立起来后面学什么东西都有地方安放。还有一个很重要的事情是第四天应该开始接触表格和表单。这两个东西在纯展示型网页里看起来不那么显眼但它们是HTML里少见的“有交互潜质”的标签。尤其是表单它是用户和网站产生联系的主要入口——搜索框、登录框、注册页面、问卷底层全是表单那一套。我第四天把表格和表单练完之后再看任何一个页面的源码思路就完全不一样了我看的不再是单个标签而是这个区块用了什么结构、那个输入框是怎么跟后端对接的。所以如果你也在按天规划学习进度我建议第四天不要急着学CSS美化。先把结构理清楚把表格和表单这两个“硬骨头”啃完后面加样式的时候你才知道样式该打在哪个容器上。这是我自己走下来觉得最值得调整学习顺序的地方。1.1 前三天的基础清单在进入第四天之前我先把前三天学的东西简单梳理一遍确保自己不是“夹生饭”状态文本标签h1到h6、p、br、hr、strong、em、blockquote、pre链接与图片a的href属性、img的src和alt属性列表无序列表ul、有序列表ol、自定义列表dl基础的区块标签div和span以及它们在外观上的区别这些内容如果还没练熟不建议直接跳到第四天。表格和表单的练习里会反复用到这些标签——比如表单里要用p或div来分组控件表格的说明文字要用到文本标签。基础不牢的话第四天会卡得很痛苦。1.2 建立“结构思维”的入门练习法我的练习方法很简单打开一个资讯类的网页按F12打开开发者工具找到Elements面板从html开始一层一层往下展开。不看CSS只看HTML结构。你会发现head里全是元信息body里才是用户看得见的东西。然后把body里的内容大致分为几大块顶部导航是一块轮播图是一块新闻列表是一块页脚是一块。每一块对应一个div或者HTML5的语义标签比如header、nav、main、footer。这个练习每天花二十分钟做三天左右你对“结构”的感觉就会完全不一样。后面我自己写页面脑子里会先出现一个框架图然后才动手写代码——这个过程很自然不是刻意学的就是看多了之后形成的习惯。2. 文档骨架与!DOCTYPE html为什么每个网页开头都长一样第四天的第一个深挖点就是几乎每次搜索HTML相关内容都会见到的那串代码!DOCTYPE html html langzh-cn head meta charsetutf-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title页面标题/title /head body !-- 页面内容 -- /body /html网上搜HTML教程几乎每个代码片段开头都是这一串。我第一天是直接复制粘贴用根本没过脑子。到了第四天我才认认真真把每一行的含义查了一遍才发现这里面藏着不少门道。这串“模板”里最关键的是文档类型声明!DOCTYPE html。它的作用是告诉浏览器你按现代HTML标准来解析这个文件。如果没有这一行有些浏览器会进入一种叫“怪异模式”的兼容状态同样的CSS写出来显示得七歪八扭。所以!DOCTYPE html必须放在HTML文件的第一行前面不能有任何字符连空格都不行。我后来遇到一个页面怎么调都错位最后发现就是文件开头被某些编辑器自动加了一个UTF-8的BOM头导致DOCTYPE识别失效。这个坑属于不自己踩一次根本想不到的类型。html langzh-cn这一行里的lang属性很多初学者会忽略。它是声明页面内容的主要语言方便屏幕阅读器和翻译工具按正确的语言规则来处理页面。比如zh-cn代表简体中文en代表英文。值写错不会影响显示效果但会让无障碍工具的表现变得奇怪。我自己的习惯是页面是什么语言就用对应的lang值细心一点总没错。meta charsetutf-8则是中文乱码问题的关键。字符编码决定文本在计算机里怎么存、怎么读。UTF-8是现在全世界的通用编码支持中文、日文、韩文、emoji等等几乎所有字符。如果这个声明缺失浏览器可能会用系统默认的编码去解读文件中文就容易变成乱码。第四天我自己做过一个实验把这一行删掉刷新页面中文果然成了一堆乱码。写HTML文件meta charsetutf-8一定不能省。另外很多人搜索时会看到meta nameviewport contentwidthdevice-width, initial-scale1.0这是做移动端适配的基础。不写这一行手机浏览器会按桌面宽度渲染页面再整体缩小字会小得看不清。写上之后页面宽度会跟随手机屏幕宽度浏览体验就正常了。现在再做网页不管有没有CSS我都习惯性把这一行带上。2.1 head区域里还藏着哪些“看不见但重要”的标签除了charset和viewporthead区域还经常出现这些标签title浏览器标签页上显示的文字也是搜索结果里的大标题。每个页面都该有独立且描述准确的title。meta namedescription content页面简介页面的描述信息搜索引擎在展示结果时经常把这段文字拿来当摘要。link relicon hreffavicon.ico设置浏览器标签页上的小图标也就是俗称的网站图标。style在页面里直接写CSS样式的标签虽然现在更推荐用外部样式表但学习阶段临时写点样式很方便。script引入JavaScript的标签可以写在head里也可以写在body底部各有不同的加载时机。这些标签都不产生可见内容但它们共同决定了一个页面的“身份信息”。我后续学习SEO的时候发现很多搜索引擎优化工作其实就是把这些meta标签写到位。所以别小看head区域它虽然看不见却是页面质量的一部分。2.2 解谜高频搜索串那些一长串的HTML代码到底怎么来的看热搜词里有一大堆长得很像的代码串比如!doctype htmlhtml langzh-cnheadmeta charsetutf-8...这说明很多人在网上复制代码片段时把整个文档骨架一起复制走了。这个现象本身很值得聊一下。当一个代码片段被人反复复制传播时它默认包含一个完整的文档结构是最省事的——拿到任何地方都能直接运行。所以你在各种代码分享网站上看到的HTML示例几乎都带着!DOCTYPE html到/html的完整五件套。这对学习者是好事可以少写很多模板代码但也有一个坏处就是很多人复制习惯了连这个结构是由哪些部分组成、各部分能不能省略都说不清楚。我的建议是前三天可以复制模板但第四天开始每次新建HTML文件都自己动手把骨架敲一遍。敲个三五次之后这个结构就长在肌肉记忆里了后面手写出来的代码自然标准。我试过大概一周后新建文件完全不用思考手指自己就把骨架打出来了。这个熟练度也是“入门”的隐形标志之一。还有热搜里的data:text/html这个串它是我特别喜欢的一个小技巧。在浏览器地址栏输入data:text/html,后面直接跟HTML代码可以把一段HTML当网页直接渲染出来不用创建任何文件。比如输入data:text/html,h1你好/h1p这是直接在地址栏渲染的HTML/p就能看到效果。这个技巧适合快速调试一个零散标签或者给别人演示一段HTML行为的时候用。不过要注意中文需要URL编码不然有些浏览器会显示异常。我自己一般只用来测试纯英文或ASCII的代码片段中文调试还是老老实实建文件。3. 表格标签实战把数据摆放整齐的基本功表格这个话题在热搜词里出镜率很高比如“html格式转换wps表格”和“html邮件”。我学表格的时候也是一脸疑惑总觉得现在网页设计早就用div布局了表格这种东西还有存在的必要吗学完之后我的答案是太有必要了但用途不是你想的那个。HTML表格是一套完整的标签体系核心标签有这些table caption学习进度表/caption thead tr th天数/th th学习内容/th th掌握程度/th /tr /thead tbody tr td第一天/td td文本与段落标签/td td熟练/td /tr tr td第二天/td td链接与图片/td td熟练/td /tr tr td第三天/td td列表与区块/td td熟练/td /tr /tbody /table这里面值得注意的点是thead和tbody。它们的作用是把表格分成“表头”和“表体”。表头里放列标题th表体里放具体数据td。搜索引擎和屏幕阅读器会通过这个结构更好地理解表格内容浏览器默认也会给表头加粗居中样式。虽然不用thead只写一行tr也能显示但语义化写法是HTML的根基后面学CSS时才知道把样式挂在哪里。表格的合并单元格也是个高频考点。合并列用colspan属性合并行用rowspan属性。比如一个课程表语文课横跨两节课就可以这样写td colspan2语文/td合并时最容易出问题的是合并后总列数对不上。每行不管怎么合并加起来的总列数必须一致不然表格结构会歪。我第一写合并单元格的时候就是没注意这个结果表格后面几列全部错位找了半天才明白是某一行多写了一个单元格。3.1 为什么邮件和导出场景还在用表格布局热搜里的“html邮件”和“html格式转换wps表格”其实指向了表格的两个真实应用场景。先说邮件。大多数人以为HTML邮件就是用普通网页代码发一封邮件其实不对。主流的邮件客户端比如Outlook和Gmail对CSS的支持极差div布局和padding这类属性经常被直接忽略。但表格布局是Table时代的老技术兼容性极好几乎所有邮件客户端都能正确渲染。所以在HTML邮件制作领域表格布局至今是主流方案。你要是做前端相关工作迟早会遇到“用表格切一个邮件模板”的需求。再说“html格式转换wps表格”。WPS表格和Excel这类软件本质上也是表格结构的数据而HTML表格可以用来在网页上展示这些数据的只读版本。我见过不少后台管理系统导出的预览页面就是后端直接把数据生成HTML表格输出。学明白HTML表格后这类需求写起来非常顺手。3.2 表格样式基础边框的坑与斑马纹原理表格在浏览器默认状态下是没有任何边框的只有数据和表格元素。要加边框传统写法是在table标签上写border1属性但这种写法早已不推荐现在都用CSS。最基础的表格CSS是这样style table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ccc; padding: 8px; } /style这里有个特别容易踩的坑如果不写border-collapse: collapse;相邻单元格之间会出现双边框表格看起来有一条条缝隙非常难看。collapse的意思就是让相邻边框合并为一条。我刚学的时候漏了这行表格效果惨不忍睹还以为是标签写错了。斑马纹也就是隔行变色是表格美化最常用的小技巧。用CSS的:nth-child(odd)和:nth-child(even)就能实现style tbody tr:nth-child(odd) { background-color: #f9f9f9; } /style这样奇数行会加一个浅灰背景数据浏览起来一眼到底不会看串行。4. 表单标签深度拆解从文本输入框到下拉菜单表单是我第四天花时间最长的部分也是热搜词里“html——表单类的标签”直接指向的内容。表单的整体结构很简单form action提交地址 methodget !-- 各种输入控件 -- button typesubmit提交/button /formaction属性是数据提交到的服务器地址method是提交方式。初学者自己练习时没有服务器可以让action保持空或者写#数据不会真正提交但控件的结构能完整看到。表单里的控件类型可太多了我把常用的按类别整理了一下控件类型标签写法用途单行文本input typetext用户名、搜索词、任何单行短文本密码input typepassword密码输入显示为圆点单选input typeradio多选一复选input typecheckbox多选多数字input typenumber只能输数字下拉选择selectoption节省空间的选项列表多行文本textarea评论、留言、自我介绍提交按钮button typesubmit提交表单隐藏字段input typehidden携带不需要用户看的固定数据这里关键要理解的是name属性。表单控件必须写了name它的值才会被提交到服务器。name相当于数据的字段名用户输入的内容是字段值。比如input typetext nameusername value张三提交后服务器收到的数据就是username张三。我一开始写表单总是漏name浏览器控制台里看提交数据全是空的还以为是自己写错了标签。这个细节在实际开发中极其重要前端和后端联调出问题一半以上都是name没对上。4.1 label标签容易被忽略但必须养成的习惯label标签的作用是把一段文字和一个表单控件关联起来。最常见的写法就是包住控件label 用户名 input typetext nameusername /label也可以用for属性指向控件的idlabel forusername用户名/label input typetext idusername nameusername为什么这个习惯很重要第一点击标签文字时浏览器的光标会自动跳到对应的输入框里用户不需要精确点到那个小框点击范围变大了很多。第二屏幕阅读器朗读页面时会把标签文字和控件关联起来比如“用户名——编辑文本”对无障碍访问非常重要。第三单选和复选框通常很小有了label关联点击文字就能选中交互体验明显改善。这个标签不写也能正常运行但写了之后无论是可访问性还是用户体验都上一个台阶。我自己的习惯是优先用for和id配对的方式因为那种方式在嵌套结构复杂的页面里更好控制不会因为标签包错了层级导致关联失效。4.2 下拉菜单的完整实现与细节热搜词里“html语言下拉菜单”关注的就是select这一块。下拉菜单的HTML结构是这样的select namecity option valuebeijing北京/option option valueshanghai上海/option option valueguangzhou广州/option option valueshenzhen selected深圳/option /selectoption的value是真正提交给服务器的值selected属性可以指定默认选中的选项。还有一个常见的需求是让第一个选项变成“请选择”这类提示性占位可以这样写select namecity option value disabled selected请选择城市/option option valuebeijing北京/option /selectdisabled会让这个选项不可被再次选中selected让它默认显示。这样用户如果不选直接提交提交的数据会是空字符串后端方便判断用户是否做了选择。下拉菜单还有一种形态是下拉列表组用optgroup给选项分组select namefruit optgroup label热带水果 option香蕉/option option芒果/option /optgroup optgroup label温带水果 option苹果/option option梨/option /optgroup /select浏览器会自动把同一组的选项缩进并显示分组标题视觉效果非常清晰。4.3 GET与POST表单单两大提交方式的区别热词里虽然没有直接提到GET和POST但凡是学表单绕不开这两个词。我用最生活化的方式解释一下GET提交会把表单数据拼接到URL后面就像?usernamezhangsancitybeijing这样并且URL的长度有限制。适合搜索、筛选这类不敏感且可分享的查询场景。POST提交则把数据放在请求体里不会暴露在URL上也没有长度限制适合登录、注册、留言这类数据提交。我第四天做实验的时候用一个methodget的表单提交了自己的姓名然后看地址栏里清清楚楚显示了输入的名字。那一刻我才真正理解了为什么密码框要用POST提交——如果写成GET密码就直接明文暴露在URL里了。这一步实验建议大家亲自做一下印象深刻程度远超看书。另外表单控件之间还有一种常用的分组方式就是fieldset和legendfieldset legend个人信息/legend label姓名input typetext namename/label label电话input typetel namephone/label /fieldset它的作用是把一组相关的表单控件用框包起来并给这组控件加一个标题。在注册表单、问卷里特别实用视觉上和语义上都很清晰。5. 多媒体与嵌入标签图片、音视频以及那个被忽略的iframe第四天还有一个重要的学习板块就是让页面“不只是文字”的媒体标签。图片标签是其中最基础的img srcphoto.jpg alt一张旅行照片 width300 height200alt属性是图片无法显示时的替代文字也是搜索引擎了解图片内容的依据更是屏幕阅读器读图的唯一通道。我见过很多初学者写alt随便填或者直接不写这在可访问性上是非常不合格的。正确的alt写法是用一句简洁的话描述图片内容。如果图片纯粹是装饰性的没有信息量alt可以直接留空但不建议省略整个属性。音频和视频标签的写法也很简单audio controls srcmusic.mp3 你的浏览器不支持audio标签 /audio video controls width640 srcvideo.mp4 你的浏览器不支持video标签 /videocontrols属性决定是否显示浏览器自带的播放控制条。标签中间的文字是兜底内容当浏览器不支持该标签时显示。视频标签还可以加poster属性指定封面图加autoplay属性自动播放——但autoplay在多数浏览器里会被拦截尤其是带声音的视频一般需要用户手动点击以后才能播放这是浏览器出于用户体验做的限制。5.1 iframe标签一个页面里嵌另一个页面iframe是我觉得最被低估的一个标签。它的作用是在一个HTML页面里嵌入另一个独立的HTML页面。最简单的写法iframe srchttps://example.com width100% height400/iframe实际开发中第三方地图、视频播放器、支付页面、社交分享组件大部分都是通过iframe嵌入到主页面里的。因为iframe内部是一个完全隔离的文档主页面无法直接读取其中内容这种隔离性反而成了安全边界。热搜词里有“pyqt5显示html”这虽然不是前端开发的内容但底层逻辑和iframe有相似之处——在一个原生应用界面里嵌入HTML内容。你理解了HTML是纯文本、任何浏览器内核都能渲染这个思路后面接触类似需求时会发现知识是通用的。5.2 写HTML用什么编辑器别被“专业工具”吓到热搜里还有“ubuntu的html编辑器”我顺便聊一下我的工具选择。写HTML的第一需求不是功能强大而是“打开快、写起来顺手”。我个人最推荐从系统自带的文本编辑器开始或者用VS Code这类轻量级代码编辑器加上几个插件。系统自带文本编辑器保存为xxx.html文件然后双击用浏览器打开就能看到效果。这个“保存-刷新-看效果”的循环是学习阶段效率最高的流程。VS Code可以优先装这三个插件Live Server可以起一个本地服务并自动刷新页面HTML CSS Support可以写CSS时提示HTML里的类名Prettier可以自动格式化代码。但我要提醒一句插件是提升效率的不是必需条件。我见过装了十几个插件但代码还是写不好的初学者也见过只用记事本写得很溜的老手。工具永远都是次要的核心是把标签和结构理解到位。6. 第四天的一个完整小页面把表格、表单、媒体装进同一个结构前面学了一堆分散的知识点第四天最好收尾的方式就是动手做一个综合页面。我当时的练习题目是给自己做一页“HTML学习日志”里面同时包含文档骨架、头部导航、进度表格、学习反馈表单、一段音频和一个返回顶部的链接。这个练习相当于把第四天的所有知识点用了一遍。完整的代码大概是这样的思路!DOCTYPE html html langzh-cn head meta charsetutf-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title我的HTML学习日志/title /head body header h1HTML学习日志/h1 nav a href#progress进度/a | a href#feedback反馈/a | a href#audio音频/a /nav /header main section idprogress h2学习进度表/h2 table border0 thead tr th天数/th th内容/th th状态/th /tr /thead tbody tr td第1天/td td文本与段落/td td已完成/td /tr !-- 更多行 -- /tbody /table /section section idfeedback h2反馈表单/h2 form action# methodpost label forname你的名字/label input typetext idname namename label forlevel学习天数/label select idlevel namelevel option1-3天/option option selected4-7天/option option8天以上/option /select label forcomment学习感受/label textarea idcomment namecomment rows4/textarea button typesubmit提交/button /form /section section idaudio h2放松音频/h2 audio controls srcrelax.mp3/audio /section /main footer a href#返回顶部/a /footer /body /html这个页面在浏览器里打开就能看到一个具备完整结构的HTML文档。表格清晰展示数据表单可以输入内容音频有播放控件锚点链接可以跳转到页内位置。6.1 锚点跳转返回顶部功能最简单的实现热搜词里“html一键返回顶部算法”指向的就是这个需求。很多人一想到返回顶部就以为要写JavaScript其实HTML自带的锚点功能就能做一个基础的版本。关键是给目标元素设置id然后链接指向#id即可a href#top返回顶部/a !-- 在body开头或顶部区域放一个带id的元素 -- div idtop/div甚至更快的方式是直接写href#因为#默认指向文档顶部。不过这种跳转是瞬间的不会平滑滚动。如果想实现平滑效果可以在HTML根元素上写一个CSS属性style html { scroll-behavior: smooth; } /style一行CSS就能让所有锚点跳转变平滑。要更复杂的“滚到一定距离才出现按钮”还是需要JavaScript但学习HTML阶段锚点方案完全够用。6.2 我做的第二个练习模仿百度首页的天气模块热搜里有“百度首页天气html制作”这个练习我觉得挺有意思也推荐给大家。百度首页右上角有一个天气模块显示城市名、温度和天气图标。我第四天的加餐练习就是模仿它做一个静态版本。思路是用一个div或语义标签做容器里面放城市名、温度数值和天气描述。用p标签放内容用CSS简单调一下样式和大小的对比关系。不需要调用任何天气API数据直接写死在HTML里就行。这个练习的精髓在于让你学会拆解一个真实功能模块的结构而不是让你做数据对接。做完这个之后我对“看到一个页面能在脑子里拆成一块一块的HTML结构”这个能力有了很直观的验证。这也是第四天学习的核心目标。7. 学习HTML几天来踩过的坑和效率心得文章最后分享几个实实在在踩过的坑都是我自学几天里真实发生过的问题不是从教程里抄来的。按复用价值排序坑一标签闭合顺序错乱。嵌套标签必须遵循“先开先闭”的规则。比如pstrong文本/strong/p写成文本虽然有些浏览器会尝试自动修复但整个文档结构会被打乱后面调节样式时会莫名其妙地出问题。我的自查方法是写完一块内容后让编辑器帮我把标签缩进对齐一眼就能看出谁的外层没闭合。坑二忘记带meta charset导致中文乱码。这个前面提过是我第一次新建HTML文件时真实遇到的情况。明明代码没问题中文全变成了“銆愬瓧”这样的乱码。后来检查发现就是head里少了编码声明。把meta charsetutf-8写上就正常了。现在只要有中文内容这行我必带。坑三GET表单把密码明文暴露在URL里。我实验的时候用了一个GET表单提交密码框提交后URL末尾清清楚楚出现了密码内容。那一刻的震撼感比看什么安全教程都强。从那以后凡是涉及敏感信息的表单method我下意识就会写post。坑四用表格布局页面。我第四天刚学完表格的时候兴奋不已想用表格来排整个页面的布局写了一个“左边导航右边内容”的页面结果写了几十行嵌套表格又难维护又丑。后来才明白表格只应该用来展示数据页面的整体布局应该靠语义化标签和CSS来实现。这个观念不转过来后面学CSS会特别别扭。效率心得方面我觉得有三条值得分享第一不要背标签要“用”标签。HTML标签有上百个但常用的就三十个不到。与其花时间背全量标签不如把常用的用到条件反射然后遇到特殊需求时再查文档。MDN是查标签最权威的来源比零散的博客可靠得多。第二养成“随手看源码”的习惯。看到好的页面右键查看源代码看别人怎么组织结构的。遇到看不懂的就去查查完继续看。这个习惯帮我积累了大量真实的写法远比看教程快。现在主流浏览器还支持在开发者工具里直接点选页面元素对应的HTML代码会自动高亮查起来更快了。第三每次学习结束做一个“综合小作品”。听懂的会忘练过的才有肌肉记忆。我第四天的综合练习就是那个学习日志页面。你如果把今天学到的所有知识点放进一个页面里第二天还能不看笔记把这个页面重新写出来那才叫真的学会了。HTML的学习曲线其实很平缓没有太多抽象的概念做不出来效果基本都是细节问题。把结构、表格、表单这三大块拿下一个静态页面的拼图就已经基本齐了。后面无论是学CSS还是JavaScript本质上都是在这些HTML骨架上添加样式和交互而已。
返回列表