## 一、概述
HTML 是网页使用的语言,定义了网页的结构和内容。浏览器访问网站,其实就是从服务器下载 HTML 代码,然后渲染出网页。
HTML 的全名是`超文本标记语言`(HyperText Markup Language),上个世纪90年代由欧洲核子研究中心的物理学家蒂姆·伯纳斯-李(Tim Berners-Lee)发明。它的最大特点就是支持超链接,可以跳转到其他网页,从而构成了整个互联网。1999年,HTML 4.01 版发布,成为广泛接受的 HTML 标准。2014年,HTML 5 发布,这是目前正在使用的版本。
浏览器的网页开发,涉及三种技术:HTML、CSS 和 JavaScript。HTML 语言定义网页的结构和内容,CSS 样式表定义网页的样式,JavaScript 语言定义网页与用户的互动行为。
## 二、网页的概念
### 2.1 标签
HTML 代码由许许多多不同的标签(tag)构成。下面代码中,`<title>`和`</title>`就是一对标签。
~~~html
<title>网页标题</title>
~~~
标签用来告诉浏览器,如何处理这段代码。标签的内容就是浏览器所要渲染的、展示在网页上的内容。
标签放在一对尖括号里面(比如`<title>`),大多数标签都是成对出现的,分成开始标签和结束标签,结束标签在标签名之前加斜杠(比如`</title>`)。但是,也有一些标签不是成对使用,而是只有开始标签,没有结束标签。
### 2.2 元素
浏览器渲染网页的时候,会把 HTML 源码解析成一个标签树,每个标签都是一个节点`node`,称为网页元素`element`。嵌套的标签就构成了网页元素的层级关系。
“标签”和“元素”基本上是同义词,只是使用的场合不一样:标签是源码角度来看,元素是从编程角度来看,比如`<p>`标签对应网页的`p`元素。
~~~html
<div><p>hello world</p></div>
~~~
### 2.3 属性
属性`attribute`是标签的额外信息,使用空格与标签名和其他属性分隔。
~~~html
<img src="demo.jpg" width="500">
~~~
上面代码中,`<img>`标签有两个属性:`src`和`width`。
### 2.4 注释
HTML 代码可以包含注释,浏览器会自动忽略注释。注释以`<!--`开头,以`-->`结尾。注释有助于理解代码的含义,复杂的代码块前面最好加上注释。
```
<!-- 这是一个注释 -->
```
## 三、网页的基本标签
符合语法标准的网页,应该满足下面的基本结构。
~~~html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>文档标题</title>
</head>
<body>
</body>
</html>
~~~
* `<!doctype>`通常是网页的第一个标签,表示文档类型,告诉浏览器如何解析网页。
* `<html>`标签是网页的顶层容器,也称为根元素(root element),其他元素都是它的子元素。一个网页只能有一个`<html>`标签。
* `<head>`标签是一个容器标签,用于放置网页的元信息。它的内容不会出现在网页上,而是为网页渲染做准备。`<head>`是`<html>`的第一个子元素。如果网页不包含`<head>`,浏览器会自动创建一个。
* `<meta>`标签用于设置或说明网页的元数据,必须放在`<head>`里面。一个`<meta>`标签就是一项元数据,网页可以有多个`<meta>`。
* `<title>`标签用于指定网页的标题,会显示在浏览器窗口的标题栏。
* `<body>`标签是一个容器标签,用于放置网页的主体内容。浏览器显示的页面内容,都是放置在它的内部。它是`<html>`的第二个子元素,紧跟在`<head>`后面。
## 四、文本标签
历史上,网页的主要功能是文本展示。所以,HTML 提供了大量的文本处理标签。
* `<div>`是一个通用标签,表示一个区块(division)。它没有语义,如果网页需要一个块级元素容器,又没有其他合适的标签,就可以使用这个标签。
~~~html
<div class="article">
<div class="title">
<h1>文章标题</h1>
</div>
</div>
~~~
* `<span>`是一个通用目的的行内标签(即不会产生换行),不带有任何语义。
~~~html
<div>这是一句<span>重要</span>的句子。</div>
~~~
* HTML 提供了6个标签,用来表示文章的标题。按照标题的等级,一共分成六级。
~~~html
<body>
<h1>JavaScript 语言介绍</h1>
<h2>概述</h2>
<h2>基本概念</h2>
<h3>网页</h3>
<h3>链接</h3>
<h2>主要用法</h2>
</body>
~~~
* `<p>`标签是一个块级元素,代表文章的一个段落(paragraph)。不仅是文本,任何想以段落显示的内容,比如图片和表单项,都可以放进`<p>`元素。
~~~html
<p>hello world</p>
~~~
* `<br>`让网页产生一个换行效果。该标签是单独使用的,没有闭合标签。
~~~html
hello<br>world
~~~
* `<hr>`用来在一篇文章中分隔两个不同的主题,浏览器会将其渲染为一根水平线。该标签是单独使用的,没有闭合标签。
~~~html
<p>第一个主题</p>
<hr>
<p>第二个主题</p>
~~~
* `<strong>`是一个行内元素,表示它包含的内容具有很强的重要性,需要引起注意。浏览器会以粗体显示内容。
~~~html
<p>开会时间是<strong>下午两点</strong>。</p>
~~~
* `<b>`与`<strong>`很相似,也表示它包含的内容需要引起注意,浏览器会加粗显示。它没有语义,是一个纯样式的标签,违反了语义与样式分离的原则,因此不建议使用。
~~~html
<p>开会时间是<b>下午两点</b>。</p>
~~~
* `<em>`是一个行内标签,表示强调(emphasize),浏览器会以斜体显示它包含的内容。
~~~html
<p>我们<em>已经</em>讨论过这件事情了。</p>
~~~
* `<i>`标签与`<em>`相似,也表示与其他地方有所区别,浏览器会以斜体显示。它是 Italic 的缩写。`<i>`标签的语义不强,更接近是一个纯样式的标签,不建议使用。
~~~html
<p>我心想,这件事是<i>真的</i>吗?</p>
~~~
* `<sub>`标签将内容变为下标,`<sup>`标签将内容变为上标。它们都是行内元素,主要用于数学公式、分子式等。
~~~html
<p>水分子是 H<sub>2</sub>O。</p>
~~~
## 五、图片标签
图片是互联网的重要组成部分,让网页变得丰富多彩。
`<img>`标签用于插入图片。它是单独使用的,没有闭合标签。`<img>`默认是一个行内元素,与前后的文字处在同一行。
```
<img src="logo.png">
<img src="http://noi.dodoke.com/images/logo.png">
```
`src`属性指定图片的网址,第一个是相对地址,表示图片与网页在同一个目录。
## 六、链接标签
链接(hyperlink)是互联网的核心。它允许用户在页面上,从一个网址跳转到另一个网址,从而把所有资源联系在一起。
链接通过`<a>`标签表示,用户点击后,浏览器会跳转到指定的网址。链接不仅可以指向另一个网页,也可以指向文本、图像、文件等资源。可以这样说,所有互联网上的资源,都可以通过链接访问。
```
<a href="https://www.dodoke.com/">渡课首页</a>
```
`<a>`标签内部不仅可以放置文字,也可以放置其他元素,比如段落、图像、多媒体等等。
```
<a href="https://noi.dodoke.com/">
<img src="http://noi.dodoke.com/images/logo.png">
</a>
```
* href 属性:给出链接指向的网址。它的值应该是一个 URL 或者锚点。
```
<a href="https://www.dodoke.com/">渡课首页</a>
```
* target 属性:指定如何展示打开的链接。`target`常用属性值为`_self`和`_blank`。
```
<a href="http://www.dodoke.com" target="_blank">渡课首页</a>
```
## 七、列表标签
列表是一系列排列好的项目,主要分成两类:有序列表和无序列表。
* `<ol>`标签是一个有序列表容器(ordered list),会在内部的列表项前面产生数字编号。
~~~html
<ol>
<li>列表项 A</li>
<li>列表项 B</li>
<li>列表项 C</li>
</ol>
~~~
* `<ul>`标签是一个无序列表容器(unordered list),会在内部的列表项前面产生实心小圆点,作为列表符号。
~~~
<ul>
<li>列表项 A</li>
<li>列表项 B</li>
<li>列表项 C</li>
</ul>
~~~
* `<dl>`标签是一个块级元素,表示一组术语的列表(description list)。术语名(description term)由`<dt>`标签定义,术语解释(description detail)由`<dd>`标签定义。`<dl>`常用来定义词汇表。
~~~
<dl>
<dt>CPU</dt>
<dd>中央处理器</dd>
<dt>Memory</dt>
<dd>内存</dd>
<dt>Hard Disk</dt>
<dd>硬盘</dd>
</dl>
~~~
## 八、表单标签
表单(form)是用户输入信息与网页互动的一种形式。表单由一种或多种的小部件组成,比如输入框、按钮、单选框或复选框。
### 8.1 `<form>`简介
`<form>`标签用来定义一个表单,所有表单内容放到这个容器元素之中。
~~~
<form>
<!-- 各种表单控件-->
</form>
~~~
~~~
<form action="https://example.com/api" method="post">
<label for="username">用户名:</label>
<input id="username" type="text" name="username">
<input type="submit" value="提交">
</form>
~~~
* `action`:服务器接收数据的 URL。
* `method`:提交数据的 HTTP 方法,可能的值有`post`(表单数据作为 HTTP 数据体发送),`get`(表单数据作为 URL 的查询字符串发送)。
## 8.2 `<label>`标签
`<label>`标签是一个行内元素,提供控件的文字说明,帮助用户理解控件的目的。
~~~
<label for="user">用户名:</label>
<input type="text" name="user" id="user">
~~~
### 8.3 `<input>` 标签
`<input>`标签是一个行内元素,用来接收用户的输入。它是一个单独使用的标签,没有结束标志。
它有多种类型,取决于`type`属性的值,默认值是`text`,表示一个输入框。
~~~
<input>
<!-- 等同于 -->
<input type="text">
~~~
* `type="text"`是普通的文本输入框,用来输入单行文本。
~~~
<input type="text" id="name" name="name" required
minlength="4" maxlength="8">
~~~
* `type="button"`是没有默认行为的按钮,建议尽量不使用这个类型,而使用`<button>`标签代替。
~~~
<input type="button" value="点击">
~~~
* `type="submit"`是表单的提交按钮。用户点击这个按钮,就会把表单提交给服务器。
~~~
<input type="submit" value="提交">
~~~
* `type="reset"`是一个重置按钮,用户点击以后,所有表格控件重置为初始值。
~~~
<input type="reset" value="重置">
~~~
* `type="checkbox"`是复选框,允许选择或取消选择该选项。`checked`属性表示默认选中。
~~~
<input type="checkbox" name="agreement" checked>
<label for="agreement">是否同意</label>
~~~
* `type="radio"`是单选框,表示一组选择之中,只能选中一项。多个单选框的`name`属性的值,应该都是一致的。
~~~
<fieldset>
<legend>性别</legend>
<div>
<input type="radio" id="male" name="gender" value="male">
<label for="male">男</label>
</div>
<div>
<input type="radio" id="female" name="gender" value="female">
<label for="female">女</label>
</div>
</fieldset>
~~~
* `type="password"`是一个密码输入框。用户的输入会被遮挡,字符通常显示星号(`*`)或点(`·`)。
~~~
<input type="password" name="password" minlength="8" required>
~~~
* `type="file"`是一个文件选择框,允许用户选择一个或多个文件,常用于文件上传功能。
~~~
<input type="file" name="avatar" accept="image/png, image/jpeg">
~~~
### 8.4 `<button>`标签
`<button>`标签会生成一个可以点击的按钮,没有默认行为,通常需要用`type`属性或脚本指定按钮的功能。
~~~
<button>点击</button>
~~~
### 8.5 `<select>`标签
`<select>`标签用于生成一个下拉菜单。`<option>`有一个布尔属性`selected`,一旦设置,就表示该项是默认选中的菜单项。
~~~
<label for="pet-select">宠物:</label>
<select id="pet-select" name="pet-select">
<option value="">--请选择一项--</option>
<option value="dog">狗</option>
<option value="cat">猫</option>
<option value="others">其他</option>
</select>
~~~
### 8.6 `<textarea>`标签
`<textarea>`是一个块级元素,用来生成多行的文本框。
~~~
<textarea rows="5" cols="33">
这是一个很长的故事。
</textarea>
~~~
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架