本文介绍Web前端中的HTML相关知识。
1. HTML概述
HTML全称为Hyper Text Markup Language(超文本标记语言),由大量的标签组成,每一个标签都有开始标签和结束标签,结束标签就是开始标签加斜杠组成(当然也有一些单独的标签,称为独目标签)。例如:
1 | <标签> |
超文本指的是:流媒体、图片、声音、音频等等。
HTML开发的时候使用普通的文本编辑器就行,创建的文本扩展名是.html
或者.htm
。直接采用浏览器打开HTML文件就是运行。
HTML是W3C组织(世界万维网联盟)制定的规范,每个浏览器生产厂家都会遵守规范。HTML程序员也会按照这个规范去写代码。HTML规范目前最高版本是HTML5.0。无论哪个版本,其基础语法是一样的。所谓的w3school和w3cschool都和W3C组织没有任何关系,只是为了方便国内web前端程序员的开发,提供了大量的帮助文档。
2. 简单例子
简单例子如下所示:
1 |
|
以.html
或者.htm
扩展名格式保存,然后用浏览器打开即可显示生成的网页。第一行的doctype标签表示这是html5,没有则表示html4。
注意,html标签不区分大小写,语法松散不严格。建议按照标准来。
3. 结构
由上面的例子可以看到,HTML的基本框架主要由三个标签组成:
- 根标签:<html></html>
- 头标签:<head></head>
- 身体标签:<body></body>
其中根标签在最外层,头标签和身体标签嵌套在根标签里面,头标签和身体标签是平级关系。除此之外,还有一些附加的标签。
4. HTML的基本标签
标签名 | 描述 |
---|---|
<p></p> | 段落标签,标签包含的内容形成一个段落。 |
<h1></h1> | 标题字,即对包含内容的字体大小进行设置。1~6号标题。 |
<br> | 换行,使该标签两侧的内容不在同一行。 |
<hr> | 水平线,网页显示一条线。 |
<pre></pre> | 预留格式,对标签包含的内容,原封不动的显示在网页中,包括换行等等。 |
<del></del> | 删除字,标签中的内容中间带横线。 |
<ins></ins> | 插入字,内容带下划线。 |
<b></b> | 粗体字 |
<i></i> | 斜体字 |
a<sup>b</sup> | a的右上角显示b |
a<sub>b</sub> | a的右下角显示b |
<font></font> | 字体标签,对标签包含的内容的字体进行设置,比如颜色大小等等。 |
<meta charst=”utf-8”> | 告诉浏览器,以utf-8形式的字符编码集打开该文件。注意,并不是设置该文件的字符编码方式。 |
5. 实体符
对于大于号,小于号等这种和标签冲突(一样,会被当做标签,类似保留字)的符号,可以采用特殊的实体符来表示。实体符号以 & 开始,以 ; 结束。
实体符 | 描述 |
---|---|
< | 小于号 |
> | 大于号 |
| 空格 |
6. 表格
- 表格采用<table></table>标签,
- 表格中有若干行,行采用<tr></tr>标签,
- 行中有若干个单元格(列),单元格采用<td></td>标签。
- 对于表格的第一行,一般是列标题,可以采用<th></th>标签,自动加粗居中。
表格可以设置边框的宽度,默认是0,即不显示边框;也可以设置表格的宽度高度等等。表格、行以及单元格都可以设置对其方式,三行三列的表格如下所示:
1 | <table border="1px" width="300px" height="150px"> |
效果如下所示:
6.1 单元格合并
有时候,表格中的单元格并不是那么规整,有的单元格可能跨两行,有的可能跨两列。那么这种表格怎么设置呢?效果如下所示:
可以这样认为,这种效果是:单元格f将单元格c合并了,可以这样实现:不再写c单元格,在f单元格的基础上,修改其属性 rowsapn="2"
,也就是该单元格跨两行。对于列也是如此,不再写被合并的单元格,而是修改合并单元格的属性colspan="n"
,该单元格跨n列。
6.2 表格结构
表格除了上述部分,也分为head、body、foot三部分。分别用标签<thead>、<tbody>、<tfoot>表示。这三类标签不是table所必须的,只是这样说便于后去JS代码的编写。
本质上,表格还是由若干个行组成,每行由若干个单元格组成。只不过<thead>、<tbody>、<tfoot>将这些行划分成若干部分,后续操作比较方便。简单例子如下所示:
1 | <table border="1px" width="300px" height="150px"> |
7. body的一些属性
属性名 | 描述 |
---|---|
bgcolor | 设置背景颜色 |
background | 设置背景图片 |
8. 图片和超链接
8.1 图片
图片的标签为<img src="路径" width="" height="" title="" alt="" />
,注意可以仅仅设置图片的宽度(高度会进行等比例缩放),如果宽度和高度一起设置的话,容易改变图片原始的比例。其中title表示鼠标悬停时显示的信息,alt表示图片加载失败显示的信息。
注意,如果标签成对,而标签并不包含内容的话,可以省略后面的结束标签,在开始标签后面加上斜杠。
8.2 超链接
超链接的标签为<a href="url">内容</a>
,href是hot refreence的意思,即热引用。url为空的话,表示当前路径。
超链接中有一个target属性,可取值:
- _blank:新开一个窗口
- _self:在当前窗口跳转连接
- _top:顶级窗口
- _parent:父窗口
超链接的作用:通过超链接可以从浏览器向服务器发送请求。浏览器向服务器发送数据(请求:request),服务器向浏览器发送数据(响应:response)。B/S结构的系统,每一个请求都会对应一个响应。
用户点击超链接和用户在浏览器地址上直接输入URL,本质上没什么区别,都是向服务器发送请求。
9. 列表
列表分为有序列表和无序列表
无序列表用</ul></ul>标签表示,用<li></li>表示列表项,无序列表可以嵌套,即每一个列表项可以是一个无序列表。<ul>有一个属性type
,规定了列表前面的形状,有circle
、square
、disc
。
1 | <ul type="circle"> |
无序列表用<ol></ol>标签表示,用<li></li>表示列表项,同样可以嵌套,同样有type类型,设置具体的列表表示形式。
1 | <ol> |
10. 表单(重要)
表单一个重要作用就是收集信息,将一组信息打包传送(提交)给服务端,一个网页中可以有多个表单。所以,表单至少有两个重点,一个是信息的收集,一个是提交的方式以及提交的地址。
- 数据收集:form标签内的各种静态输入框均可。
- 提交的方式以及提交的地址:
- 地址填写在action属性中,action属性和超链接中的href属性一样,都可以向服务器发送请求(request),页面转向该url,并且附加提交的数据。
- 提交的方式在method属性中,有get和post两种方式,默认是get方式。采用get方式,提交的时候,表单的信息会显示在浏览器地址栏中;采用post方式,提交的时候,表单的信息不会显示在地址栏中。当用户提交的信息中有敏感信息,建议采用post方式提交。二者提交的信息格式是一样的,只不过post不会显示在地址栏中。
表单的语法结构如下所示:
1 | <form action="http://127.0.0.1:8080/jd/login"> |
注意,表单是以什么格式提交数据给服务器的?
运行上述网页后,浏览器中的url是:http://127.0.0.1:8080/jd/login?username=qwer&userpwd=asdf
所以,表单提交的格式是:
action?name=value&name=value&name=value…
也就是将具有name属性的字标签以及name属性值拼接在一起提交到服务器上。这是HTTP协议规定的,必须以这种格式提交给服务器。所以,如果想要提交该数据,那么所在子标签必须写上name属性值,否则不满足要求,也就不会提交该数据。
10.1 案例:用户注册表单的实现
用户注册表单,需要以下信息:
用户名(text文本框,可以设置maxlength、readonly和disabled属性)
1 <input type="text" name="username" />密码(password文本框)
1 <input type="password" name="password" />确认密码(password文本框)
1 <input type="password" />注意,这里不用写 value,因为确认密码直接本地确认即可,没必要发送到服务器端确认。
性别(radio单选框,注意,多个子项的 name 值必须一样。value必须手动指定。增加 checked 属性表示默认值)
1
2 <input type="radio" name="gender" value="1" />男
<input type="radio" name="gender" value="0" checked/>女兴趣爱好(checkbox复选框,子项的 name 值必须一样,value必须手动指定。)
1
2
3 <input type="checkbox" name="interest" value="smoke" />抽烟
<input type="checkbox" name="interest" value="drink" />喝酒
<input type="checkbox" name="interest" value="firehair" />烫头学历(select下拉框,selected属性默认值)
1
2
3
4
5
6 <select name="grade">
<option value="gz">高中</option>
<option value="dz">大专</option>
<option value="bk" selected>本科</option>
<option value="ss">硕士</option>
</select>其中,设置multiple属性值为multiple,可将下拉框变为多选框。size属性设置显示的条目数量。
简介(textarea文本域,rows指明行数,cols指明列数)
1 <textarea rows="10" cols="10" name="introduce"></textarea>
将上面的内容编写在表单(默认get方式提交)中,这样发送的表单的内容如下所示:
1 | http://127.0.0.1:8080/tb/login?username=asdf&password=qwer&gender=1&interest=smoke&interest=drink&interest=firehair&grade=ss&introduce=这是一个文本域,可以填写很多内容 |
采用post方式提交,地址栏的信息如下所示:
1 | http://127.0.0.1:8080/tb/login |
既然如此,那么其实超链接也是可以提交数据给服务器的,只要构造上述get方式的地址栏相关信息,实际上也是可以提交的。但是缺点就是超链接中的信息是写死的,并且不安全,即只能是get请求。
11. 典型控件
11.1 file控件
该控件主要用于文件上传,语法结构如下所示:
1 | <input type="file" /> |
11.2 hidden控件
该控件主要用于隐式提交数据,就是提交默认值。该控件在网页上看不到,但是表单提交的时候会自动提交给服务器,所以在写该控件的时候,必须写上name属性和value属性,语法结构如下所示:
1 | <input type="hidden" name=“111” /> |
12. id属性
在HTML文档中,任何元素(节点)都有id属性,id属性是该节点的唯一表示,相当于身份证号,所以在同一个HTML文档中id值不能重复。
但是,表单提交数据的时候,只和name有关,和id无关。
id的作用?
id属性的存在,是为了更方便的获取这个元素。JavaScript可以对HTML文档中的任意节点进行增删改,那么增删改之前需要先拿到这个节点,通常我们通过id来拿节点对象。
13. div和span标签
div和span标签都可以成为“图层”,图层的作用是为了保证页面可以灵活的布局。最开始的网页是采用table进行布局的,但是table不灵活,太死板。现代的网页开发中div布局使用最多,几乎很少使用table进行布局了。
这个图层盒子,通过盒子的左上角顶点坐标来定位,因为定位可以定位到任意位置,可以嵌套,所以图层的布局就比较方便。默认情况下div独占一行,span不会独占一行
1 | <div></div> |
14. 总结
可以看到,其实整个HTML文档相当于一棵树,根节点是HTML标签,然后有两个子标签以及若干个后代标签。这棵树被称为DOM树,也就是document的缩写。Javascript主要是对这棵DOM树上的节点进行增删改的。
15. 备注
参考B站《动力节点》。