web开发:HTML详解

简介: web开发:HTML详解

博客大纲


HTML概述

HTML时一门标记语言,用于描述网页的形态,是一切网页开发的基础课程。

其内容量并不大,甚至有人玩笑到:”上午看的HTML,下午就能在简历中写精通HTML。“

本博客就讲述HTML中的大部分重要的知识。

标签的分类

HTML的代码是由各类标签构成的,而标签是由尖括号包围的关键词,例如<body>

在HTML中,标签被分为两类,分别是双标签与单标签。

双标签:

双标签是指由一对标签组成,一个标签代表标签的开始,另一个标签表示标签的结束。例如<p></p>,在后续我们会讲到,<p>标签表示一个段落,当一个段落结束,就需要在段落的末尾加上</p>,来表示当前段落的结束。

单标签:

单标签是指只需要一个标签就可以完成其功能,单独出现的标签。此类标签一般无需标明其作用的范围,所以无需两个标签来限制范围。比如<img>标签,此标签表示插入一张图片。

标签之间的关系

标签主要有两种关系,分别是嵌套关系与并列关系:

嵌套关系:

<head>
  <title>
  </title>
</head>

嵌套关系就是,一个标签的整体在另一个标签中。

并列关系:

<head></head>
<body></body>

而并列关系则是,两个标签之间没有发生包含,独立存在。


HTML基本结构

每个网页都会有一个基本的结构标签(也称为骨架标签),以下是HTML网页的基本结构:

<html>
  <head>
      <title>这是网页的标题</title>
  </head>
  <body>
      这是网页的内容
  </body>
</html>

接下来我们解释以下标签:

标签 定义 作用
<html> </html> HTML标签 页面中最大的标签,也称为根标签
<head> </head> 文档的头部 一个网页的开头,在head中必须有title标签,也可以承载后续的CSS样式
<title> </title> 文档的标题 一个网页的标题
<body> </body> 文档的主体 此标签内部包含网页的所有页面的内容

效果如下:

这四个标签是所有的网页文件都必须有的,在vscode中,可以使用Emmet语法,输入一个感叹号后按下Tab键位,就会自动为你生成HTML文件的骨架:

最终骨架:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
</body>
</html>

相比于我们的基本骨架,这个自动生成的骨架会更加完善,接下来我来解释骨架中多出来的部分。

<!DOCTYPE>文档类型声明:

此代码是告诉浏览器,应该以什么方式来解析我们的代码。html自诞生以来,经常需要版本迭代以增添功能,最后就生成了非常多的版本。此处<!DOCTYPE html>表示:使用最新的html版本来解析代码。

注意:<!DOCTYPE>不是一个HTML标签,而是一个文档类型声明的标签,也因此它不放在<html>中。

<html lang="en"> 语言种类:

此处在html标签后的lang用于标识页面的语言种类。

en 表示页面的语言为语言

zh-CN 表示页面的语言为中文

不过在英文页面中也可以出现中文,中文页面中也可以出现英文。所以这个选项对页面效果作用不大,不过现在大部分浏览器都装载了翻译功能,此标签会影响翻译时浏览器对网页初始语言的判断。

<meta charset="UTF-8"> 字符集:

字符集指多个字符的集合,并且字符集会对其编码,以便计算机识别与储存文字。而世界上的字符集非常多,使用不同的字符集,网页呈现的效果也不同。为了让网页以正确的字符集解析我们的网页,所以要规定字符集。

此处我们使用的字符集UTF-8为万国码。这个字符集几乎包含了全世界所有国家需要用到的字符。


标题标签

为了区分标题与一般的段落,HTML提供了标题标签<h1></h1>,它可以加粗文字,使文字的字号变大。

h表示head,h后的数字表示标题的等级,HTML共提供了六个等级的标题:

可以看到,相比于一般的文字,并不是所有的标题都变大了,也有一些是变小的。但是这并不影响其为标题的性质。在此也不建议使用这个标签来调整字号,后续有专门用于调整字体的方法。


段落标签与换行标签

在文章中,会对文章进行分段,将其有条理地展示出来,网页中也是如此,所以HTML提供了段落标签<p> </p>

此标签用于标识一个段落,在不同段落之间会自动换行。

提到换行,这就不得不说一下HTML的换行规则:

在HTML中,一个段落的文字会从左到右排列,知道浏览器窗口的右端,然后才会自动换行。

也就是说,文字的换行是要触碰到浏览器窗口的边界才会自动换行:

随着边界的移动,换行也就自动改变了。

那我们要如何在代码中强制对文本换行?

这里就要用到换行标签</br>了,此标签是一个单标签,用于对文本强制换行,在需要换行的地方,直接输入此标签即可。

上图中,由于换行标签存在,上方红色框处被强制换行了。

我们比较一下两个红框会发现,</br>造成的换行。文字之间的间隙比较小,而<p> </p>造成的换行,文字之间的间隙比较大。

注意:此处的</br>也可以写为<br>前面的斜杠可以省略,但是一般建议以带有斜杠的形式。


文本格式化标签

文本格式化标签,用于修饰文本,可做到加粗,倾斜,下划线等

标签 语义
<strong></strong><b></b> 加粗
<em></em><i></i> 倾斜
<del></del><s></s> 删除线
<ins></ins><u></u> 下划线

效果如下:


用于布局的标签

一个网页要有良好的布局才能使网页更加美观,而<div></div><span></span>标签,就是用于布局的,在web开发中,它们被称为“盒子”,用于存放其它元素。

在纯HTML环境下,<div></div>标签内部的元素会独占一行网页空间,而<span></span>内的元素会与其它元素共用一行。

在上图中,在第一段“这是一段文字”中,哪怕其后面还有空间,被div包含的文字也会另起一行,而就算div内容后面还有空间,div也会把这段空间占用,不允许其它内容使用。

而对于span内的内容,则会与其它内容共用同一行。

在没有CSS修饰的情况下,这两个标签的功能比较有限,在后续学习了盒子模型与CSS后,一个成熟的网站可能可以用到成百上千个<div></div><span></span>标签。


图像标签

在HTML中,<img>标签用于插入一个图像,img为image的缩写,表示图片。

其中src是<img>标签的必须属性,它用于指定图像的路径和文件名。如果没有路径,浏览器就不知道去什么地方找到指定图片了。

语法如下:

<img src="URL" />

此处的URL就是我们的路径,接下来我们简单讲解一下什么是路径:

路径

用户在寻找文件时,所历经的线路叫路径。在我们的img标签中可以使用到的路径有三种,分别是 网络路径,绝对路径,相对路径。

如果想更加深入了解路径,可以看一看这篇博客,虽然是Linux的操作系统,但是这方面与windows几乎是没有区别的:[Linux:家目录,根目录,隐藏文件,路径]。

网络路径:

网络路径就是指,一个图片在网络上的链接,在网页中,我们只需要右键就可以复制到一个图片的网络路径,直接放到我们的代码里就可以使用了:

可以看到,我们将复制到的csdn的标签链接,直接放到src内部,我们的网页就可以得到这张图片了,这就是网络路径。

相对路径:

相对路径,就是指两个文件的相对位置。

假设我们有的这样一个目录结构:

一个重要知识点:

.一个点表示当前目录

..两个点表示上一级目录

每次跳转目录,都使用一个路径分隔符/\隔开

比如从b.png开始跳转到c.png的相对路径就是:./../../c.png

备注:/是Linux操作系统中的路径分隔符,而\是Windows的路径分隔符,此处使用两种都可以,甚至可以混合使用:

可以看到,上面的代码中,一个路径一次混合使用了两种分隔符,图片依然可以正常访问

但是我们建议使用/

现在我们处在content.html这个目录中,要怎样访问到c.png文件?

此时如果使用相对路径,就是通过目录之间的相对位置来找到目标文件:

首先用.来表示从当前目录web出发,再使用..跳回到上级目录my_site,最后在my_site目录中访问c.png文件。

最后得到的相对路径就是:./../c.png。这里的./也可以省略得到:../c.png

相对路径中..使用极为广泛,因为..标识的是上级目录,一旦目标文件不再当前目录下,就需要用到..

绝对路径:

从根目录出发,访问文件经过的路径就是绝对路径。

我们将上图完整展示出来:

从根目录出发,那么c的绝对路径就是:e:/my_site/c.png

b的绝对路径:e:/my_site/web/image/b.png

说完了路径,我们继续讲解img标签。

除了src以外,img标签还有许多属性:

属性 说明
src 图片路径
alt 在图像显示错误时显示的文字
title 当鼠标放到文字上时显示的文字
width 设置图像的宽度
height 设置图像的高度
border 设置图像边框的粗细

alt与title

这两个属性,都是给图片添加文字的,但是两者有别:

title是当鼠标移动到图片上时显示的文字:

而alt是图片显示出错时显示的文字。

比如在src内部放一个错误的链接,浏览器无法正常打开图片:

注意:

1.图像的所有其他属性都应该放在src属性后

2.width和height两个属性,只需使用一个就好,当设置了图片高度时,其宽度也会等比缩放,而设置了图片宽度,其高度也会等比缩放,如下:


超链接标签

语法格式:

<a href="跳转目标" target="目标窗口的跳转方式" > 文本或图像</a>

a是单词anchor的缩写,含义为锚。

超链接标签<a> </a>的两个属性:

属性 作用
href 用于指定链接的URL地址
target 用于指定链接页面的打开方式,_self为默认值表示在当前窗口打开,_blank表示在新窗口打开

_self和_blank的效果如下:

链接分类

外部链接:

也就是一个网页的网址,直接放入href中即可,上方的百度页面打开,就是直接将百度官网的网址放入了href中。

内部链接:

一个网站可以有多个网页,在同一网站的网页间跳转,直接在href中放入页面名称即可,假设我们有一个test.html网页,一个index.html网页我们想在test中打开index,只需要<a href="index.html"></a>即可:

空链接:

当还没有确定链接的目标是,可以在href中放一个#,来表示这是一个空链接。

下载链接:

如果href中的地址是一个文件或者压缩包,点击链接则会下载这个压缩包。

锚点链接:

锚点链接用于一个页面内部的跳转,点击锚点链接后,就会跳转到固定位置。

使用方法:

在目标位置的标签中添加一个id属性,并为id指定一个名字:id = “name”

在链接文本的href中输入href = "#name",也就是在对应的id名称前加上#。


特殊字符

在HTML页面中,一些特殊符号不方便使用,比如< > &等等,它们本身就具有特殊含义,对编译器有误导作用。所以在此HTML提供了这些字符的代码替代写法:

特殊字符 描述 代码
空格 &nbsp;
< 大于号 &lt;
> 小于号 &gt;
& 和号 &amp;
人民币 &yen;
© 版权 &copy;
® 注册商标 &reg;
° &deg;
± 正负号 &plusmn;
乘号 &times;
除号 &divide;
² 平方上标 &sup2;
³ 立方上标 &sup3;

在此着重记忆前三个就好,它们最常用,注意不要漏掉最后的分号。


表格标签

表格主要用于展示数据,让数据非常直观的展示出来,比如上方的特殊字符表格。

表格语法:

<table>
        <tr>
            <th></th>
        </tr>
        <tr>
            <td></td>
        </tr>
</table>

表格主要有四种标签:

<table></table>用于定义一块表格。

<tr></tr>用于定义表格的行,必须嵌套在table中

<th></th>用于定义表格的表头,必须嵌套在tr中

<td><td>用于定义一个单元格,必须嵌套在tr中

我们用代码解释:

在黄色区域中,每对<tr></tr>标签管理着一整行。

红色区域与绿色区域相比<th></th>作为表头标签,其内部的标签会更粗,着重强调。

在蓝色区域中,每对<td><td>标签控制着一个单元格。

表格属性:

属性 描述
align 规定整个表格相对周围元素的位置
border 规定表格是否有边框,默认值为“ ”,没有边框
cellpadding 规定单元格内容与单元格的内边距
cellspacing 规定单元格之间的外边距
width 规定表格的宽度

border:

当我们在表格中没有设置table,那么我们的表格就没有边框,只有设置了border,才有边框,此处的border的属性值只能为整数。

要注意border控制的是外边框,当属性值设置过大,对内部结构是没有影响的:

cellpadding与cellspacing:

cellpadding属性值用于控制单元格的内容与边框的距离,而cellspacing控制单元格之间的距离:

效果如下:

表格结构标签

表格主要分为表格的标题,表头,主体。它们都有对应的标签:

标题 表头 主体
<caption></caption> <thead></thead> <tbody></tbody>

当使用标题标签时,就是给这个表格加上了标题,此时标题会在表格上方居中显示。

而后两个标签,本身没有修饰作用,主要用来区分结构,让结构更明确。在后续学习了css们可以利用这两个标签来整体修饰表头与主体。

综合效果:

合并单元格

通过上述知识,我们只能做出每个单元格大小都一致的表格,局限性非常大。于是HTML提供了用于合并单元格的属性,这些属性一般放在th与td中,当其属性值为多少,就说明从当前单元格开始,合并多少个单元格:

colspan跨列合并

rowspan跨行合并

效果如下:


列表

表格常用于显示数据,而列表则多用于布局,其整洁有序。

列表分为三大类:无序列表,有序列表和自定义列表。

无序列表

无序列表,就是不为列表项排序的列表,其由<ul> </ul>控制,相当于告诉浏览器,在这个<ul> </ul>内部,是一个无序列表。而每一个列表项,由<li></li>控制

语法:

<ul>
  <li></li>
  <li></li>
  <li></li>
</ul>

无序列表的各个列表项之间没有顺序级别之分,是并列的

<ul> </ul>中只能嵌套<li></li>,放入其它标签或者文字是非法的

<li></li><div></div>类似,可以用于承载其它标签,比如图片,段落等

效果如下:

绿色框是利用列表对文字排序,红色框则是利用列表对图片排序。

有序列表

有序列表就是有顺序的列表,其实顺序在我们写代码时就已经确定了,此列表只是为每个列表项标号显示。

有序列表与无序列表十分相似,其只是将<ul> </ul>改为了<ol> </ol>,其它性质一致。

语法:

<ol>
  <li></li>
  <li></li>
  <li></li>
</ol>

效果如下:

自定义列表

自定义列表与前两者的差比就比较大了,此类列表通常是多个列表项对一个内容的拓展修饰,比如这个小米的网页:

这里的“帮助中心”就是一个自定义列表,其列表的后三个项目“账户管理”,“购物指南”,“订单操作”都是对“帮助中心”的拓展,或者说:帮助中心可以提供这三项帮助。

基本语法:

<dl>
  <dt></dt>
  <dd></dd>
  <dd></dd>
</dl>

这里<dl></dl>用来控制一块自定义列表区域,<dt></dt>则是这个自定义列表的主体,后续的多个<dd></dd>都围绕其展开。

效果如下:

可以看到,这个自定义列表的主体向前缩进了,以展示它的主体地位。


表单

表单用于收集用户的信息,在网页中,表单可以提供一定的交互性,比如在登录页面,需要用户提交账号密码,交友网站中,需要用户填写个人信息等等。

在HTML中,一个完整的表单由表单域,表单控件,提示信息三个部分构成。

在上图中,红色区域就是一个表单域,蓝色区域是表单控件,绿色区域则是提示信息。

表单域

表单域是一个彪悍表单元素的区域。

在HTML中,利用<form></form>标签来控制一个表单域。

在后续学习服务器相关知识时,才能理解表单域的提交,此处不展开说明。

我们只需要记得两点:

在写表单元素之前,需要一个表单域将它们包含

表单的标签是form

不过此处表单控件其实也可以独立于表单域单独存在,只是这样的话,用户填写的信息就无法提交。

input控件

input就是输入的意思,在此处input这个控件综合了非常多种类的功能,具体实现哪一种功能,取决于其属性值type:

属性值 描述
button 可以点击的按钮
checkbox 复选框
file 用于上传文件
hidden 隐藏的输入字段
image 图像的提交按钮
password 密码输入
radio 单选框
reset 重置表单数据
sumit 提交表单数据
text 供用户输入文字

我们挑出部分分析:

button:

当type属性值为button时,就会生成一个按钮,用户可以点击。如果想要这个按钮上有文字,则加上value属性。

button主要后续与js结合使用,此处用处并不大

radio:

radio控制单选框,选项以一个圆形按钮展示,点击即可选择。

我们尝试点击一下:

被点击后,相应的按钮就变成了蓝色,但是这明明是一个单选框,为什么可以同时选中两个按钮?

在定义单选框时,要保证对于同一个目标作用的选项。必须时有相同的name属性值,否则编译器就无法确定哪些单选框作用同一个目标。

此外,我们还可以对某些选项加上checke="checked"属性值,在打开页面时会默认选中其中某一项,综合展示:

可以看到,上述单选框中,一开始默认选中了高一一班,后续选择其它选项,都会保持只有一个选项可以选择。

checkbox:

此选项用于定义复选框,同样的,我们需要对作用与同一个目标的选项设置相同的name值。

password:

此属性用于输入密码,当用户输入密码时,页面不会展示文字,而是对密码加密。如下:

text:

text属性控制输入文本框,它与password属性非常相似,只是输入时,文字不会被加密:

以上就是input中比较重要的属性了。

<label>标签

<label>标签用于绑定一个表单元素,当点击 <label>标签内的元素时,浏览器的光标会动转到被绑定的控件上。

为了绑定表单控件,我们需要使用for属性,来表示此label作用对象。而被绑定对象,需要设置一个id属性,以配合for属性,示例:

<label for="man">男</label>
<input type="radio" name="sex" id="man" />

比如在上述代码中,我们使用label选中了一个”男“字。

在下方的单选框中,我们为这个控件标记了id="man",而上方的label标记了for="man"。这样一来,label就完成了绑定。

当我们点击男这个文字的时候,就会自动选中对应的选项,在label内部还能放置图片等等。

示例:

在红色框内,我们用label绑定了两张图片,对应其选项。这样我们只要点击图片,就可以选中选项了。

<select></select>控件

select用于控制下拉列表,当选项过多,不利于展示,就可以用这个控件。

语法:

<select>
  <option></option>
  <option></option>
  <option></option>
</select>

一对<select></select>用于控制一个下拉列表的所有选项,每个<option></option>内部就是一个选项值。

<textarea></textarea>控件

此控件用于创造一块大量输入文本的区域。


博客制作不易,还请留下一个免费的赞!

有问题欢迎指出,博主非常喜欢讨论问题!

相关文章
|
15小时前
|
设计模式 开发框架 数据库
Python Web开发主要常用的框架
【5月更文挑战第12天】Python Web开发框架包括Django、Flask、Tornado和Pyramid。Django适用于复杂应用,提供ORM、模板引擎等全套功能;Flask轻量级,易于扩展,适合小型至中型项目;Tornado擅长处理高并发,支持异步和WebSockets;Pyramid灵活强大,可适配多种数据库和模板引擎,适用于各种规模项目。选择框架需依据项目需求和技术栈。
19 2
|
15小时前
|
Web App开发 前端开发 JavaScript
什么是 Web 应用开发领域的 Frontend Fragmentation(前端碎片化)现象
什么是 Web 应用开发领域的 Frontend Fragmentation(前端碎片化)现象
5 0
|
15小时前
|
缓存 前端开发
Web开发:深入探讨React Hooks的使用和最佳实践
Web开发:深入探讨React Hooks的使用和最佳实践
9 0
|
15小时前
|
安全 测试技术 持续交付
在Python Web开发中,测试是一个至关重要的环节
【5月更文挑战第12天】在Python Web开发中,测试至关重要,包括单元测试(unittest模块)、集成测试、功能测试、系统测试、验收测试、性能测试、安全测试和端到端测试。常用的测试工具有unittest、pytest、selenium、requests和coverage。遵循“测试先行”和“持续集成”原则,确保代码质量与稳定性。
14 3
|
15小时前
|
编解码 数据库 计算机视觉
LabVIEW开发基于Web数字图像处理
LabVIEW开发基于Web数字图像处理
|
15小时前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
11 0
|
15小时前
|
存储 程序员 API
python web开发示例详解
python web开发示例详解
16 0
|
15小时前
|
XML 前端开发 JavaScript
CSR(客户端渲染)和AJAX在Web开发中各自扮演不同的角色
【5月更文挑战第8天】CSR(客户端渲染)与AJAX在Web开发中各司其职。CSR提供初始HTML框架,通过JavaScript在浏览器端获取并渲染数据,提升交互性和响应速度。AJAX则实现页面局部更新,如实时搜索,不刷新页面即可获取数据。CSR可能因DOM操作多而引发性能问题,但可优化解决;AJAX适合频繁交互场景,提高响应性。两者在不同需求下各有优势,需按项目选择适用技术。
16 4
|
15小时前
|
前端开发 搜索推荐 安全
AJAX和CSR(客户端渲染)是Web开发中常用的两种技术
【5月更文挑战第8天】AJAX提升用户体验,减轻服务器压力,但对搜索引擎不友好且增加开发复杂度,易引发安全问题。CSR提供快速响应和交互性,改善用户体验,但首屏加载慢,搜索引擎支持不足,同样面临安全挑战。两者各有适用场景,需按项目需求选择。
12 0
|
15小时前
|
前端开发 JavaScript 开发者
新一代前端框架:革命性的Web开发利器
传统的前端框架在满足日益复杂的Web开发需求上逐渐显露出局限性,而新一代前端框架的出现,以其革命性的设计和功能,重新定义了Web开发的标准。本文将介绍这些新一代前端框架的特点和优势,并探讨它们在实际项目中的应用。