HTML+CSS
开始
开发工具:VsCode
ctrl + z 撤销
ctrl + s 保存
alt + shift + f 代码自动格式化
Emmet快捷键: https://docs.emmet.io/abbreviations/syntax/
在本地开发,在服务器共享。
HTML5
W3C 官网: https://html.spec.whatwg.org/multipage/
MDN: https://developer.mozilla.org/zh-CN/docs/Web/HTML
基础标签
排版标签
| 标签名 | 语义和功能 | 单标签还是双标签 |
|---|---|---|
| h1 ~ h6 | 一级标题~六级标题 | 双标签 |
| p | 段落 | 双标签 |
| hr | 分隔线 | 单标签 |
| br | 换行 | 单标签 |
| pre | 原格式显示 | 双标签 |
| div | 无语义,用于页面布局 | 双标签 |
文本标签
| 标签名 | 语义和功能 | 单标签还是双标签 |
|---|---|---|
| ins | 表示增加的内容,默认添加下划线 | 双标签 |
| del | 表示删除的内容,默认添加删除线 | 双标签 |
| sub | 下标字 | 双标签 |
| sup | 上标字 | 双标签 |
| em | 强调,默认表现斜体字 | 双标签 |
| strong | 强调,默认表现粗体字 | 双标签 |
| span | 无语义,配合CSS给文字设置样式 | 双标签 |
列表标签
| 标签名 | 功能和语义 | 单标签还是双标签 |
|---|---|---|
| ul | 无序列表包裹元素 | 双标签 |
| ol | 有序列表包裹元素 | 双标签 |
| li | 列表项 | 双标签 |
| dl | 定义列表包裹元素 | 双标签 |
| dt | 定义列表项标题 | 双标签 |
| dd | 定义列表项描述 | 双标签 |
表格标签
| 标签名 | 功能和语义 | 属性 | 单标签还是双标签 |
|---|---|---|---|
| table | 表格包裹元素 | width height cellspacing cellpadding border |
双标签 |
| caption | 表格标题 | 双标签 | |
| thead | 表格头 | align valign |
双标签 |
| tbody | 表格体 | align valign |
双标签 |
| tfoot | 表格脚 | align valign |
双标签 |
| tr | 行 | height align valign |
双标签 |
| td | 单元格 | width height align valign colspan rowspan |
双标签 |
| th | 表头单元格 | width height align valign colspan rowspan |
双标签 |
内联框架标签
| 标签名 | 功能和语义 | 属性 | 单标签还是双标签 |
|---|---|---|---|
| iframe | 内联框架 将各种类型的文件引入当前页面 |
src: 设置目标文件地址。 frameborder:设置是否有边框,0表示没有,其他数字表示有。 width:设置宽度。 height:设置高度。 |
双标签 |
用途:打广告常用、子窗口
被引入的一方可以拒绝连接,比如京东就拒绝了。
还可以设置id属性设置窗口名称,可以配合a标签的target属性使用。
关于图片
| 标签名 | 语义和功能 | 属性 | 单标签还是双标签 |
|---|---|---|---|
| img | 引入图片 | src:设置图片地址。 alt:当图片无法正常显示,显示该文字内容。 width:设置宽度。 height:设置高度 |
单标签 |
如果单独设置宽度或者高度,另一个方向根据比例自动计算。同时设置宽高容易导致图片拉伸失真。
◆常见的图片格式:
1 | jpg / jpeg |
◆base64图片:Base64 是一种「编码方式」,把图片的二进制数据转换成可直接写在代码里的文本字符串 —— 相当于把 “图片文件” 打包成了 “一串字符”,嵌在 HTML/CSS 里就能显示。
| 普通图片 | Base64 图片 |
|---|---|
以文件形式存在(如 logo.png) |
把图片转换成一串字符串(由字母 / 数字 / 符号组成) |
| 需要单独请求加载(浏览器发请求下载图片文件) | 直接嵌在代码里,无需单独下载图片文件 |
示例:src="logo.png" |
示例:src="data:image/png;base64,iVBORw0KGgoAA..." |
前端里面会出现吗?yes!
1.小图标/小图片:(比如10KB以内的按钮图标、加载动画):减少浏览器的HTTP请求(不用单独下载图片文件),提升页面加载速度。
2.临时展示:比如用户上传图片后预览,不用先上传到服务器,直接把图片转成 Base64 显示在页面。
⚠️ 注意:大图片不要用Base64!Base64字符串比原图片体积大30%左右,大图片转Base64会让代码变臃肿,反而拖慢页面加载。
推荐的base64图片转换工具: https://tool.chinaz.com/tools/imgtobase/
相对路径
./是指当前文件所在的目录,./可以省略。(如果目标文件在同级或者下级)../是指当前文件的上级目录。(如果目标文件在上级或者先进入上级再访问所在目录)
../../ 上上级
../../../ 上上上级
- img 标签引入图片
- a 标签超链接设置目标文件
- video 标签引入视频
- audio 标签引入音频
- iframe 标签引入各种类型的文件
- link 标签关联 css 文件
- script 标签引入 js 文件
| 标签名 | 语义和功能 | 属性 | 单标签还是双标签 |
|---|---|---|---|
| a | 超链接 | href:设置目标文件地址。 target:设置目标文件在哪个窗口打开( _blank表示新窗口) |
双标签 |
href的值是空的点击刷新。
1 | <a href="">刷新</a> |
href目标文件分为两种:
1.浏览器能够打开: 点击超链接,浏览器直接打开。比如网页文件、图片文件、视频文件、pdf等。
2.浏览器无法打开: 点击超链接,直接下载。比如:word、pptx、zip等。
◆锚点
1 | <!-- 跳转到本页面的锚点 --> |
其他
字符实体,请参照: https://www.w3cschool.cn/htmltags/html-symbols.html
HTML全局样式:
1 | id 唯一标识,可以用作锚点名、可以用作css选择器 |
语言参考代码: https://www.w3school.com.cn/tags/html_ref_language_codes.asp
元信息:
1 | <!-- 字符集编码 --> |
表单
常见表单属性
◆ name 属性
1.name是提交表单时显示的键名(value是值),与后端对应。
2.多个单选框要实现单选效果需要设置相同的name。
3.下拉选项需要将name设置到select上。
4.提交按钮、重置按钮、普通按钮不要设置name属性。
◆ value 属性
1.文本输入框、密码输入框,value可以设置默认显示的内容。
2.单选框、复选框,value设置真正提交的数据。
3.input实现的提交按钮、重置按钮、普通按钮,value设置按钮上的文字。
4.button和textarea不需要value。
5.下拉选项option可以使用value设置真正提交的数据,如果没有设置value,双标签中的文字作为提交的数据。
◆ disabled 属性
1.表单控件设置disabled属性将变为不可用。
2.disabled属性不需要值。
3.select 设置disable属性整个下拉选项不可用;option设置disabled属性该选项不可选。
◆label里面的for与input里面的id唯一对应,使得光标自动匹配。
| 标签名 | 语义和功能 | 属性 | 单标签和双标签 |
|---|---|---|---|
| form | 表单包裹元素 | action:设置表单提交地址。 target:设置提交地址从那个窗口打开 |
双标签 |
| input | 各种类型的表单控件 | type:表单控件类型。 maxlength:最大可输入长度。 checked:设置默认选中。 name:表单控件标识。 value:表单控件的值。 disabled:设置为不可用。 |
单标签 |
| button | 各种类型的按钮 | type:按钮类型。 disabled:设置为不可用。 |
双标签 |
| textarea | 文本域 | rows: 默认显示的行数。 cols:默认显示的列数。 name:表单控件标识。 disabled:设置为不可用。 |
双标签 |
| select | 下拉选项包裹元素 | name:表单控件标识。 disabled:设置为不可用。 |
双标签 |
| option | 下拉的选项 | value:表单控件的值。 selected:设置默认选中 disabled:设置为不可用。 |
双标签 |
| label | 用于关联表单控件 | for:表单控件的id | 双标签 |
| fieldset | 设置外围的边框 | 无 | 双标签 |
| legend | 设置表单标题 需要与fieldset配合 |
无 | 双标签 |
文本输入框
1 | <input type="text"> <br> |
密码输入框
1 | <input type="password"> <br> |
单选框
1 | <input type="radio" name="gender">男 |
- 多个单选框要实现单选效果,需要设置相同的 name 属性值。
- 设置 checked 属性可以实现默认选中,该属性不需要值。
多选框
1 | <label> |
- 设置 checked 属性可以实现默认选中,该属性不需要值。
按钮
提交:
1 | <input type="submit"> |
重置:
1 | <input type="reset"> |
普通按钮:
1 | <input type="button" value="普通按钮01"> |
文本域
1 | <textarea rows="10" cols="60"></textarea> |
- rows设置默认显示的行数,影响高度。
- cols设置默认显示的列数,影响宽度。
下拉选项
1 | <select name=""> |
- 默认选中的是第一个选项,可以使用 selected 设置默认选项。
- 下拉选项需要将name设置到select上。
多媒体
◆图片img,音频audio,视频video。
◆懒加载,滚动到图片位置才加载,提升性能。
◆设置尺寸的时候建议只设一个,另一个 auto,避免图片变形。
| 标签名 | 功能和语义 | 属性 | 单标签还是双标签 |
|---|---|---|---|
| video | 视频 | src:视频地址。 width:设置宽度。 height:设置高度。 controls:显示控制条,不需要值。 muted:默认静音,不需要值。 autoplay:自动播放,不需要值。 loop:循环播放,不需要值。 preload:预先加载,不需要值。 poster:设置视频封面图地址。 |
双标签 |
| audio | 音频 | src:音频地址。 controls:显示控制条,不需要值。 muted:默认静音,不需要值。 autoplay:自动播放,不需要值。 loop:循环播放,不需要值。 preload:预先加载,不需要值。 |
双标签 |
| source | 视频或音频 | src:视频或音频的地址。 type:视频或音频的类型 |
单标签 |
CSS3
开始
修改元素的显示模式:display
| 类型 | 宽高生效 | 独占一行 | 举例 |
|---|---|---|---|
| inline行内元素 | ❌ 否 | ❌ 否 | 文本标签: em、strong、del、ins、sub、sup、span 超链接标签: a 表单标签: label |
| block块级元素 | ✅ 是 | ✅ 是 | 排版标签: h1~h6、p、pre、hr、div 列表标签: ul、ol、li、dl、dt、dd 表单标签: form、option |
| inline-block行内块元素 | ✅ 是 | ❌ 否 | 图片标签: img 表单标签: input、button、textarea、select 框架标签: iframe |
块级元素居中
① 让块级元素在父元素中水平居中:给父元素设置 text-align:center。
②让块级元素在父元素中纵向居中:给父元素设置line-height的值=父元素的高度值。
行内块元素居中
① 让行内块元素在父元素中水平居中:给父元素设置 text-align:center。
② 让行内块元素在父元素中纵向居中:给父元素设置行高;给行内块元素设置 vertical-align:middle。
行内元素或行内块元素之间的空白问题
产生原因:代码中,元素之间的换行
解决方案:
① 代码中,元素之间不写换行(不推荐)
② 父元素设置字体大小为0; 如果行内块元素中还有文字单独设置字体大小。
底部的空白(图片的幽灵空白)
产生原因:行内块元素默认与文字基线对齐,底部的空白就是基线与底线的距离。
解决方案:
① 父元素设置字体大小 0
② 给行内块元素设置 vertical-align:bottom (推荐)
③经典解决方案,针对图片,将图片设置成块级元素
长度单位: px、em、%
颜色设置方式:颜色名、rgb()、十六进制
最常用的属性:
| 属性名 | 作用 | 属性值 |
|---|---|---|
| color | 设置文字颜色 | 颜色 |
| background-color | 背景颜色 | 颜色 |
| font-size | 字体大小 | 长度 |
| text-align | 文本水平对齐方式 | left:左对齐。 right:右对齐。 center:居中对齐 |
| text-decoration | 文本修饰线 | none:无修饰线。 underline:下划线。 overline:上划线。 line-throuth:删除线 |
| cursor | 设置鼠标光标 | pointer:小手。 move:移动图标。 |
关于优先级
基本选择器之间的权重:
- ID选择器 > 类选择器、伪类选择器 > 标签名选择器 > 全局选择器
- 行内式大于所有的选择器
ID > 类 / 伪类 > 标签,同分则 “后写者赢”。注意!imporant强制生效。
4 种基础选择器核心:
- 后代选择器(空格):选所有层级后代。
- 子元素选择器(>):只选直接一级子元素。
- 交集选择器(无分隔):选同时满足所有条件的元素。
- 并集选择器(,):选满足任一条件的元素(共享样式)。
超链接伪类核心:
- 作用:控制链接 “未访问 / 已访问 / 悬停 / 点击”4 种状态。
- 关键:必须按:link → :visited → :hover → :active书写(Love Hate 记忆),否则后写的样式会覆盖先写的,导致伪类失效。
- 优先级:同权重下,CSS 后写的样式会覆盖先写的,这是顺序要求的核心原因。
1.当链接是「未访问且未悬停」时:只匹配
a:link。
2.当链接是「未访问且悬停」时:同时匹配a:link和a:hover,但因为a:hover写在后面,最终显示a:hover。
⚠️坑:并集选择器的组合,各自计算各自的权重,不会放在一起计算,容易粗心算错。
盒子理解
图源:March
注意:
◆行内元素有个致命问题:无法设置width/height,也无法让上下margin/padding完全生效。
如何解决?设置为行内块即可改变宽度。如label{display:inline-block; width: 65px;}
◆margin塌陷/合并:margin上下会折叠,取最大值。行内元素设置margin的时候,上下不生效,即不影响垂直布局。
◆块级元素设置宽度后,设margin:10px auto可实现水平居中。
◆当全局有box-sizing: border-box;的时候,说明后面设置的width都是text+padding*2+border*2。经常会看见这种全局初始化样式:
1 | * { margin: 0; padding: 0; box-sizing: border-box; } |
◆padding: a b c;上 = a,左右 = b,下 = c。
◆padding: a b;上下 = a,左右 = b。
内容溢出盒子:
| CSS 属性名 | 功能 | 属性值 |
|---|---|---|
| overflow | 设置溢出内容的显示方式 | visible:显示,默认值。 hidden:隐藏。 scroll:滚动条。 auto:自动(只有内容溢出才会显示滚动条)。 |
隐藏元素:
- 设置 visibility:hidden; 元素隐藏但是占据位置。
- 设置 display:none; 元素彻底隐藏,不占据位置。
样式继承:
优先级:直接设置的样式 > 自带的样式 > 继承的样式
关于行高:
浮动
浮动最初用于实现文字环绕效果。
文档流(Normal Flow):也叫正常流 / 普通流,是浏览器渲染 HTML 元素时的默认布局规则,元素按照书写顺序,从左到右、从上到下依次排列,每个元素都占据自己的 “布局空间”,不会重叠。
元素浮动之后,称为浮动元素。
- 浮动元素脱离文档流
- 多个浮动的元素会水平排列,一行放不下自动换行
- 不论元素原来的显示模式是什么,设置成浮动之后,就是浮动元素,具有自己的显示特点:
① 水平排列,自动换行,不存在外边距的塌陷和合并,设置左右外边距auto不会居中(与块级区别)
② 设置宽高、内外边距都没有问题(与行内区别)
③ 不会被父元素作为文本去处理(与行内块和行内区别)
消除浮动影响:
1 | 父元素::after { |
| CSS 属性 | 功能 | 属性值 |
|---|---|---|
| float | 设置浮动 | left、right、none |
| clear | 清除浮动的影响 | left、right、both |
定位
定位属性:position,配合top/right/bottom/left控制元素位置。
| 定位类型 | 参考基准 | 是否脱离文档流 | 典型场景 | 附加使用 |
|---|---|---|---|---|
static(默认) |
无 | 否 | 普通文档流 | |
relative |
自身原位置 | 否 | 微调位置 / 作为绝对定位的父容器 | left:20px;(右移) top:20px;(下移) |
absolute |
包含块 | 是 | 悬浮弹窗 / 元素覆盖 | |
fixed |
浏览器视口 | 是 | 回到顶部按钮 | |
sticky(粘性) |
滚动到指定位置后固定 | 否(滚动前占空间) | 吸顶导航 |
一般元素的包含块就是父元素,绝对定位元素的包含块是第一个定位的祖先元素(从父元素开始向上找),如果没有定位的祖先元素,包含块就是整个页面。
注意事项:
◆同时设置浮动和绝对定位,浮动不生效。
◆绝对定位/固定定位元素具有自己的显示特点:
① 默认宽高都是被内容撑开,不存在外边距的塌陷和合并(与块级区别)
② 设置宽高、内外边距都没有问题(与行内区别)
③ 不会被父元素作为文本去处理(与行内块和行内区别)
◆吸顶导航一般设置了 line-height 的值等于容器的 height 值,来实现文字自动在容器垂直方向居中。
◆设置绝对/固定定位元素在包含块中水平垂直都居中
方案一:
1 | position: absolute/fixed; |
方案二:
1 | position: absolute/fixed; |
◆定位的显示层级
- 定位的元素默认显示层级是相同的,不论进行哪一种定位,后面的元素显示在上层; 定位元素的显示层级比不定位高。
- 定位的可以通过 CSS 属性z-index 设置显示层级,值是数字,可以是负值,值越大显示层级越高; 不定位的元素设置 z-index 无效!
回到顶部的核心原理是什么?
是因为href="#",如果#后面没有跟任何 id(空锚点),浏览器会默认滚动到页面最顶部(视口的 0,0 坐标)。
总结:position、left、right、top、bottom、z-index。
精灵图
精灵图(CSS Sprite):也叫「雪碧图」,是将多个小图标、小图片合并成一张完整的大图。
优点:
- 减少 HTTP 请求次数(一张大图替代多张小图),提升网页加载速度;
- 统一管理小图标,方便维护和修改。
◆制作精灵图在线工具 https://alloyteam.github.io/gopng/
其他:Markman
①favicon 图标的使用
- 使用方法一:把 ico 图标文件命名为
favicon.ico,放在网站根目录下,网页会自动获取 ico 图标。 - 使用方法二:在网页中使用 link 标签自行引入 ico 文件。
1 | <link rel="shortcut icon" type="images/x-icon" href="favicon.ico"> |
② favicon 图标的制作
- 在线工具 http://www.ico51.cn/
- 在线工具 http://www.bitbug.net/
Flex布局
flex有什么用,解决了什么问题?
flex布局实现了用最少的 CSS 代码,解决一维布局的 “对齐、均分、换行、自适应” 问题,替代传统繁琐且易出错的布局方式,让前端布局从 “拼拼凑凑” 变成 “精准控制”。
Flex是 “弹性布局”,只需给父元素设display:flex,子元素就变成 “Flex 项目”,支持灵活排列。
Flex 最常用的能力,替代传统复杂的居中方案:
- 水平居中:父容器加
justify-content: center; - 垂直居中:父容器加
align-items: center; - 两端对齐:父容器加
justify-content: space-between(元素贴左右,中间均分空白); - 均匀分布:父容器加
justify-content: space-around(元素左右空白相等)。
注意事项:
◆Flex 垂直居中:父容器设display:flex + justify-content:center + align-items:center(需给父容器设高度)。
◆flex:3;表示占比。
Grid布局
Grid 是 “网格布局”,将父容器划分为行和列,子元素放入网格中(适合二维布局,如卡片网格、表单栅格)。
父容器属性:
| 属性 | 作用 | 使用 |
|---|---|---|
display: grid |
开启 Grid 布局 | |
grid-template-columns |
定义列数 / 列宽 | grid-template-columns: 100px 200px(表示分成2 列,宽 100/200px)或者repeat(3, 1fr)(表示分成3 列,各占 1 份) |
grid-template-rows |
定义行数 / 行高 | grid-template-rows: 50px 100px(2 行,高 50/100px) |
grid-gap |
网格间距 | grid-gap: 10px(行列间距 10px) |
页面布局
- reset.css 将元素自带的样式重置掉。
- normalize.css 重新设置了元素自带的样式,保持各浏览器统一,需要设计稿也使用normalize标准。
伪类 伪元素
常用伪类
| 伪类 | 作用 | 示例 |
|---|---|---|
:hover |
鼠标悬浮时 | a:hover { color: red; } |
:active |
鼠标点击时 | button:active { background: #ccc; } |
:focus |
元素获焦时 | input:focus { border: 2px solid blue; } |
:nth-child(n) |
选中第 n 个子元素 | li:nth-child(2) { color: green; } |
:checked |
选中的单选 / 复选框 | input:checked + label { color: red; } |
常用伪元素
| 伪元素 | 作用 | 示例 |
|---|---|---|
::before |
元素内部前面插入内容 | div::before { content: "前缀"; } |
::after |
创建一个末尾的伪元素(相当于在父容器最后加了一个隐藏的子元素)。 | div::after { content: "后缀"; } |
::placeholder |
输入框提示文字样式 | input::placeholder { color: #999; } |
- 伪元素必须加
content:即使是空内容也要写content: "",表示占位,无可见内容。 - 伪类优先级:
!important> 行内样式 > ID > 类 / 伪类 > 标签 / 伪元素; - ::before/::after 默认为行内元素,需设
display:block才能设宽高。
浮动清除
1 | /* 伪元素:清除浮动(经典用法) */ |
- ::after 默认为行内元素(inline),行内元素无法触发
clear: both; - 转为块级元素(block),才能独占一行,覆盖整个父容器宽度,触发清除浮动。
-
clear属性作用是「让当前元素的两侧(both = 左右)不允许有浮动元素」; - 这个伪元素会 “挤到” 所有浮动子元素的下方,强制父容器感知到浮动元素的高度,从而撑起父容器。
媒体适配
媒体查询(@media):根据设备的宽度 / 高度 / 屏幕方向等,应用不同的 CSS 样式(实现 “一套代码适配多端”)。
常用断点(行业通用):
- 移动端:≤768px;
- 平板:768px~992px;
- 桌面端:≥992px。
1 | /* 移动端适配(≤768px) */ |
直接适配移动端:
1 | <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> |
width=device-width:设置视口的宽度等于设备的物理屏幕宽度。initial-scale=1.0:设置页面初始缩放比例为1.0(100%缩放,无缩放)。maximum-scale=1.0:限制用户最大缩放比例为 1(禁止放大)。user-scalable=no:禁止用户手动缩放页面(避免用户缩放导致布局错乱)。
简单动画
常用属性:
1 | cursor: pointer; //鼠标图案变手指 |
rotate(deg):旋转函数,deg 是角度单位(度),-360deg中的负数值表示逆时针旋转。
动画指定:
1 | @keyframes 动画名称 { |
应用动画:
1 | .selector { |
| 参数 | 常用取值 |
|---|---|
| 速度曲线 | linear(匀速)、ease(默认,先慢后快)、ease-in(慢进)、ease-out(慢出)、ease-in-out(慢进慢出) |
| 循环次数 | 数字、infinite(无限循环)、alternate(往返循环0%->100%->0%->100%) |
注意:如果父元素有明确的高度值(一般是水平动画),还要设置
height:100%,它表示「当前元素的高度 = 其父元素的高度」。
BFC
BFC 的意思是 Block Formatting Context ,即块级格式上下文。 然后,当元素满足了某些条件,我们认为该元素创建了 BFC。 创建了 BFC 的元素我们可以把他看做是一个独立的容器,容器内的元素不论如何布局都不会影响到外面。
创建 BFC 的方式:
- 根元素。
- 浮动元素。
- 绝对定位或固定定位的元素。
- 行内块元素。
- 表格单元格(th、td)、表格行(tr)、表格标题(caption)、table、thead、tbody、tfoot。
overflow的值不为visible的块元素。(hidden、auto、scroll)- 伸缩项目。
- 多列容器。
column-count:1; column-span为all的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中。
创建 BFC 可以解决的问题:
① 清除子元素浮动的影响
② 解决外边距塌陷
- 两个相邻块级元素,上下 margin 合并,最终间距 = 较大的那个 margin 值(而非相加)。
- 父元素没有被子元素的 margin 撑开,子元素的 margin 变成了父元素与页面的间距。



