介绍
html,hypertext markup language超文本标记语言。
通过标签组织文本、图片等多种资源在内的关系。
html是标记语言而非编程语言,没有编程语言所共有的特征,数据类型、运算符合控制结构等。
结构与文件
基本结构
<!doctype html>
<html>
<head></head>
<body></body>
</html>
文件
html一般保存为后缀名为.html的文件。也可以写作.htm。
除了静态文件,html代码还可以保存在动态文件中,比如.php,.jsp,.aspx等。也可以是动态接口直接输出。
在某些应用中,存在直接使用html语法来描述数据关系和显示以及事件。
版本及声明
html经历了多个版本的迭代。各个版本之间存在差异,新版本会增加标签、增加标签的属性和事件,也会弃用某些标签,以及标签的属性或事件。
html的解析依靠浏览器完成,浏览器一般会同时支持多个版本,通过在html中对使用的版本声明,可以准确解析。
版本 | 发布时间 |
---|---|
HTML | 1991 |
HTML+ | 1993 |
HTML 2.0 | 1995 |
HTML 3.2 | 1997 |
HTML 4.01 | 1999 |
XHTML 1.0 | 2000 |
HTML5 | 2012 |
XHTML5 | 2013 |
关于各版本的声明,参考:https://www.runoob.com/tags/tag-doctype.html
语法
注释
<!--注释-->
ie声明
目前不推荐用户使用ie浏览器,小型网站开发过程中也不考虑对ie的兼容。
但是大型站点会考虑普适性,某些早期的网站基于ie开发,以及某些网站面向的ie浏览器用户。
存在对ie兼容性技术,通过ie声明网页在ie浏览器中时特殊代码。
<!--[if IE]>所有的IE可识别<![end if]-->
<!--[if !IE]>除IE外都能识别<![end if]-->
<!--[if lt IE6]>IE6以下版本可识别<![endif]-->
<!--[if lte IE6]>IE6以及IE6以下版本可识别<![endif]-->
<!--[if gt IE6]>IE6以上版本可识别<![endif]-->
<!--[if gte IE6]IE6以及IE6以上版本可识别<![endif]-->
!: 代表不等于;
lt: less than,小于;
lte: less than or equal to,小于或等于;
gt: greater than,大于
gte: greater than or equal to,大于或等于
基础语法
1、html通过标签进行描述
2、标签分为成对标签和单体标签,某种程度上来讲,普通文本、注释以及ie声明也可以看做是特殊标签。
3、成对标签由开始标签、结束标签和标签之间的内容组成。
单体标签只有一个开始标签,单体标签标准的结束是/>
4、开始标签具有标签名称、属性和事件,存在checked这样的直接使用的属性。
5、标签之间的关系主要是嵌套和并列。只能是成对标签嵌套单体标签或成对标签。
6、大小写敏感
- 标签名、属性名和事件名,以及版本声明大小写不敏感,甚至可以大小写混杂。
- 事件内容和标签内容是大小写敏感的。
- 属性值是否大小写敏感需要区分情况。比如伪协议javascript是大小写不敏感,javascript之后的js代码是大小写敏感,而value属性的值是大小写敏感,style属性的值是大小写不敏感的。
7、引号
标准的,属性值和事件值使用双引号包围,也可以使用单引号,但是不能是反引号。
如果属性值或事件值不包含空白符,可以不用引号。
8、空白符
空白符一般指空格、换行符,在html中效果相同。
- 开始标签的<与标签名之间不能有空白符
- 结束标签的<与/之间不能有空白符
- 开始标签的标签名、属性值对、事件值对之间通过空白符间隔
- 开始标签的标签名、属性值对、事件值对之间可以使用字符/替代空白符起到间隔作用,但是相邻的属性值或者事件值必须加引号
解析与缺省
浏览器具备强大的补全功能,或者说兼容性,当html不规范或者错误时,仍然可以进行解析。
1、单体标签,可以不使用/>,而仅是>结尾
2、标签解析规则
(1)从前往后解析
(2)普通文本,不具备任何特殊效果,相邻的普通文本可以视作一个普通文本结构,作为上层嵌套标签的内容使用。
(3)<
开始,紧邻的字符非空白符,开启标签解析。
(4)<
开始,紧邻!--,判定开启注释功能,匹配相邻的下一个-->结构。如果没有-->关闭注释,则将其后所有内容视为注释内容。浏览器在末尾自动补全
(5)<
开始,紧邻非空白符,也不是注释结构或/,则判定是一个开始标签,然后解析属性值对和事件值对。
(6)属性值或事件值使用单引号或双引号开始,则必须向后匹配有效的单引号或双引号才算结束该属性或事件。
属性值或事件值未使用单引号或双引号开始,则必须向后匹配有效的空白符或>才算结束该属性或事件。
(7)如果是成对标签,开始标签解析后,并不会立即匹配其结束标签,而是继续向后,将所有可解析标签解析完成后,对于开始标签匹配相邻的结束标签,如果不符合嵌套规则或者说没有合适的结束标签,则会在允许的最大嵌套范围内补全结束标签。
(8)嵌套规则:
- 一般,行内元素只能嵌套行内元素,块级元素可以嵌套块级元素和行内元素
- 某些元素不允许嵌套其他元素,比如textarea、title,以及script和style等
- 某些元素不允许嵌套本级元素,比如p和h
上述标签解析规则纯属自行实验摸索总结,也存在一定的分析,可能存在错误或描述不准确,后续待补充和修正。主要对理解嵌套错误和代码不规范时的补全及处理有所帮助。
其他
更多html知识,查看他篇章
- 元素
- 属性
- 事件
- 样式
- 脚本
- html实体编码 https://www.cnblogs.com/heibaimao123/p/16209204.html