一. HTML高级元素
1. 列表元素
1.1 认识列表元素
在开发一个网页的过程中,很多数据都是以列表的形式存在的
1.2 列表的实现方式
- 事实上现在很多的列表功能采用了不同的方案来实现:
- 方案一: 使用
div
元素来实现(比如汽车之家, 知乎上的很多列表) - 方案二: 使用列表元素, 使用元素语义化的方式实现
- 方案一: 使用
- 事实上现在很多的网站对于列表元素没有很强烈的偏好, 更加不拘一格, 按照自己的风格来布局:
- 原因是列表元素默认的
CSS
样式, 让它用起来不是非常方便 - 比如列表元素往往有很多的限制,
ul/ol
中只能存放li
,li
再存放其他元素, 默认样式等 - 虽然我们可以通过重置样式来解决, 但是我们更喜欢自由的
div
- 原因是列表元素默认的
HTML
提供了3组常用的用来展示列表的元素- 有序列表:
ol、li
- 无序列表:
ul、li
- 定义列表:
dl、dt、dd
- 有序列表:
1.3 有序列表 ol - li
ol(ordered list)
- 有序列表,直接子元素只能是
li
- 有序列表,直接子元素只能是
li (list item)
列表中的每一项
1.4 无序列表 ul - li
ul (unordered list)
- 无序列表,直接子元素只能是
li
- 无序列表,直接子元素只能是
li(list item)
列表中的每一项
1.5 定义列表 dl - dt - dd
dl (definition list)
- 定义列表,直接子元素只能是
dt、dd
- 定义列表,直接子元素只能是
dt (definition term)
term
是项的意思,列表中每一项的项目名
dd(definition description)
列表中每一项的具体描述,是对
dt
的描述、解释、补充一个
dt
后面一般紧跟1个或者多个dd
1.6 所有案例的思路
- 先完成
HTML
元素结构 - 重置
CSS
样式(如body、a、ul
等) - 先整体,再局部
- 顺序:按照从外往里,从上到下
- 去除重复的代码(
css
)- 讲重复的样式放到一个单独的
class
中(.icon
) - 不同的样式抽到不同的
class
(.new
、.hot
)
- 讲重复的样式放到一个单独的
2. 表格元素
2.1 认识表格
在网页中, 对于某些内容的展示使用表格元素更为合适和方便
2.2 表格常见的元素
table
- 表格
tr (table row)
- 表格中的行
td (table data)
- 行中的单元格
另外表格有很多相关的属性可以设置表格的样式, 但是已经不推荐使用了
2.3 表格中合并边单元格的边框
border-collapse
- 用来决定表格的边框是分开的还是合并的
separate
(默认值)- 每个单元格拥有独立的边框
collapse
- 相邻的单元格共用同一条边框
- 用来决定表格的边框是分开的还是合并的
- 合并单元格的边框
table { border-collapse: collapse}
2.4 表格的其他语义化元素
thead
表格的表头tbody
表格的主体tfoot
表格的页脚caption
表格的标题th
表格的表头单元格html<table> <caption>热门股票</caption> <thead> <tr> <th>排名</th> <th>股票名称</th> <th>股票代码</th> <th>股票价格</th> <th>股票的涨跌</th> </tr> </thead> <tbody>...</tbody> <tfoot>...</tfoot> </table>
2.5 单元格合并
在某些特殊的情况下, 每个单元格占据的大小可能并不是固定的
- 一个单元格可能会跨多行或者多列来使用
比如下面的表格
这个时候我们就要使用单元格合并来完成
单元格合并分成两种情况:
跨列合并:使用
colspan
- 在需要跨列的单元格写上
colspan
属性, 并且省略掉合并的td
- 在需要跨列的单元格写上
跨行合并:使用
rowspan
在需要跨行的单元格写上
rowspan
属性, 并且省略掉后面tr
中的td
3. 表单元素
3.1 认识表单

3.2 常见的表单元素
表单元素 | 含义 |
---|---|
form | 表单,一般情况下,其他表单相关元素都是它的后代元素 |
input | 单行文本输入框、单选框、复选框、按钮等元素 |
textarea | 多行文本框 |
select 、option | 下拉选择框 |
button | 按钮 |
label | 表单元素的标题 |
3.3 input元素的使用
表单元素使用最多的是
input
元素(行内替换元素)input
有如下常见的属性:属性 含义 type
input
的类型readonly
只读 disabled
禁用 checked
默认被选中,只有当 type
为radio
或checkbox
时可用name
名字,在提交数据给服务器时,用于区分数据类型 value
取值 type
属性的值input
的类型含义 text
(默认)文本输入框(明文输入) password
文本输入框(密文输入) radio
单选框 checkbox
复选框 button
按钮 reset
重置 submit
提交表单数据给服务器 file
文件上传 checkbox
当页面加载时,自动聚焦 type
类型的其他取值和input
的其他属性, 查看文档:
3.4 布尔属性
常见的布尔属性有
disabled
、checked
、readonly
、multiple
、autofocus
、selected
布尔属性可以没有属性值,写上属性名就代表使用这个属性
如果要给布尔属性设值,值就是属性名本身
html<input type="text" readonly="readonly" disabled="disabled" autofocus="autofocus"> <!-- 等价于上面的写法 --> <input type="text" readonly disabled autofocus>
3.5 表单按钮
- 表单可以实现按钮效果:
普通按钮(
type=button
):使用value
属性设置按钮文字重置按钮(
type=reset
):重置它所属form
的所有表单元素(包括input、textarea、select
)提交按钮(
type=submit
):提交它所属form
的表单数据给服务器(包括input、textarea、select
)也可以通过按钮来实现:
3.6 input和label的关系
label
元素一般跟input
配合使用,用来表示input
的标题label
可以跟某个input
绑定,点击label
就可以激活对应的input
变成选中
3.7 radio的使用
type
类型设置为radio
,变成单选框:name
值相同的radio
才具备单选(互斥)功能默认选中:
checked
html<label for="male"> <input id="male" type="radio" name="sex" value="male">男 </label> <label for="female"> <input id="female" type="radio" name="sex" value="female">女 </label>
3.8 checkbox的使用
type
类型设置为checkbox
,变成多选框:属于同一种类型的
checkbox
,name
值要保持一致默认选中:
checked
html<div> 您的爱好: <label for="basketball"> <input id="basketball" type="checkbox" name="hobby" checked value="basketball">篮球 </label> <label for="football"> <input id="football" type="checkbox" name="hobby" value="football">足球 </label> </div>
3.9 textarea的使用
textarea
的常用属性cols
:列数rows
:行数
- 缩放的
CSS
设置resize
- 禁止缩放:
none
- 水平缩放:
horizontal
- 垂直缩放:
vertical
- 水平垂直缩放:
both
- 禁止缩放:
3.10 select和option的使用
option
是select
的子元素,一个option
代表一个选项option
常用属性multiple
:可以多选size
:显示多少项
option
常用属性selected
:默认选中
3.11 form常见的属性
form
通常作为表单元素的父元素:form
可以将整个表单作为一个整体来进行操作- 比如对整个表单进行重置
- 比如对整个表单的数据进行提交
form
常见的属性如下:action
- 用于提交表单数据的请求
URL
- 用于提交表单数据的请求
method
- 请求方式(
get
和post
),默认get
- 请求方式(
target
- 在什么地方打开
URL
(参考a
元素的target
)
- 在什么地方打开
请求方式的对比
二. Emmet语法
1. 认识Emmet
Emmet
(前身为Zen Coding
) 是一个能大幅度提高前端开发效率的一个工具- 在前端开发的过程中,一大部分的工作是写
HTML
、CSS
代码, 如果手动来编写效果会非常低 VsCode
内置了Emmet
语法,在后缀为.html/.css
中输入缩写后按Tab/Enter
键即会自动生成相应代码
- 在前端开发的过程中,一大部分的工作是写
!
和html:5
可以快速生成完整结构的html5
代码html<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html>
2. > (子代) 和 + (兄弟)
<!-- div>ul>li -->
<div>
<ul>
<li></li>
</ul>
</div>
<!-- div+div>p>span+i -->
<div></div>
<div>
<p><span></span><i></i></p>
</div>
<!-- div+p+ul>li -->
<div></div>
<p></p>
<ul>
<li></li>
</ul>
3. *(多个)和 ^(上一级)
<!-- ul>li*5 -->
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<!-- div+div>p>span^h1 -->
<div></div>
<div>
<p><span></span></p>
<h1></h1>
</div>
<!-- div+div>p>span^^h1 -->
<div></div>
<div>
<p><span></span></p>
</div>
<h1></h1>
4.()分组
<!-- div>header>ul>li*2^^footer>p -->
<div>
<header>
<ul>
<li></li>
<li></li>
</ul>
</header>
<footer>
<p></p>
</footer>
</div>
5. 属性(id属性、class属性、普通属性) {}(内容)
<!-- #header+#main>.container>a[href]+h2.title -->
<div id="header"></div>
<div id="main">
<div class="container">
<a href=""></a>
<h2 class="title"></h2>
</div>
</div>
!-- a[href="abc"]{abc} -->
<a href="abc">abc</a>
6. $(数字)
<!-- ul>li.item$*5{$} -->
<ul>
<li class="item1">1</li>
<li class="item2">2</li>
<li class="item3">3</li>
<li class="item4">4</li>
<li class="item5">5</li>
</ul>
7. 隐式标签
<!-- .box+.container -->
<div class="box"></div>
<div class="container"></div>
<!-- ul>.item*3 -->
<ul>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
8. CSS Emmet
/* w100 */
width: 100px;
/* dib */
display: inline-block;
/* w20+h30+m40+p50 */
width: 20px;
height: 30px;
margin: 40px;
padding: 50px;
/* m20-30-40-50 */
margin: 20px 30px 40px 50px;
/* bd1#cs */
border: 1px #ccc solid;
三. 结构伪类
1. :nth-child
:nth-child(1)
- 是父元素中的第1个子元素
span:nth-child(1)
- 表示父元素中第一个子元素且名字为
span
的标签被选中
- 表示父元素中第一个子元素且名字为
:nth-child(2n)
- n代表任意正整数和0
- 是父元素中的第偶数个子元素(第2、4、6、8......个)
- 跟
:nth-child(even)
同义
:nth-child(2n + 1)
- n代表任意正整数和0
- 是父元素中的第奇数个子元素(第1、3、5、7......个)
- 跟
:nth-child(odd)
同义
nth-child(-n + 2)
- 代表前2个子元素
2. :nth-last-child
:nth-last-child()
的语法跟:nth-child()
类似,不同点是:nth-last-child()
是从最后一个子元素开始往前计算:nth-last-child(1)
,代表倒数第1个子元素:nth-last-child(-n + 2)
,代表最后2个子元素
3. :nth-of-type
:nth-of-type()
用法跟:nth-child()
类似- 不同点是**
:nth-of-type()
计数时只计算同类型的元素**
- 不同点是**
:nth-last-of-type
用法跟:nth-of-type()
类似- 不同点是
:nth-last-of-type()
是从最后一个这种类型的子元素开始往前计数
- 不同点是
4. 其他结构伪类
- 其他常见的伪类(了解):
:first-child
,等同于:nth-child(1)
:last-child
,等同于:nth-last-child(1)
:first-of-type
,等同于:nth-of-type(1)
:last-of-type
,等同于:nth-last-of-type(1)
:only-child
,是父元素中唯一的子元素:only-of-type
,是父元素中唯一的这种类型的子元素
- 下面的伪类偶尔回使用:
:root
,根元素,就是HTML
元素:empty
,代表里面完全空白的元素
5. 否定伪类
:not()
的格式是:not(x)
x
是一个简单选择器- 元素选择器、通用选择器、属性选择器、类选择器、
id
选择器、伪类(除否定伪类)
:not(x)
表示除x
以外的元素