环境安装
代码编辑器
下载安装包
VS Code 下载地址https://code.visualstudio.com
安装插件
安装插件流程
- 汉化菜单插件
: Chinese (Simplified)
- 颜色主题
: One Dark Pro
- 实时加载
: Live Server
- less文件转css文件
: Easy LESS
- 代码提示
: IntelliSense for CSS class names in HTML
- 错误提示
: Error Lens
快捷键
- 放大缩小字号
: Ctrl + +/-
- 页面格式化
: Alt + Shift + F
- 添加/取消注释
: Ctrl + /
- 收起所有节点
: Ctrl + K
+Ctrl + 0
- 展开所有节点
: Ctrl + K
+Ctrl + J
网页浏览器
⭐⭐ 各大应用商店均可以下载 ⭐⭐
- 谷歌浏览器
- 火狐浏览器
HTML
HTML
页面基本骨架
⭐⭐ 创建 HTML 基本骨架 ⭐⭐
创建一个以.html
后缀名结尾的文件使用编辑器打开该文件 , 。
使用快捷键创建基本骨架在文件中输入 → 英文的 : !
→ 然后按Tab
或Enter
都可以。
1 |
|
⭐⭐ 标签解释 ⭐⭐
<!DOCTYPE html>
是一个声明 : 它必须位于 HTML 文档的第一行 , 用于告知浏览器文档类型和版本 , 。 <html>
HTML文档的根元素 : 所有的元素都应该嵌套在这个标签内部 , 。 <head>
包含了文档的元数据 : 这些信息不会直接显示在页面上 , 但对浏览器解析文档和搜索引擎优化 , SEO ( 非常重要 ) 。 <meta>
提供关于HTML文档的元数据 : 例如字符集 , 视口设置 、 文档描述 、 关键词等 、 。 <title>
定义文档的标题 : 该标题会显示在浏览器的标签页上 , 并且是搜索引擎结果中的标题部分 , 。 <body>
包含网页的所有内容 : 如文本 , 图片 、 音频 、 视频 、 表格 、 表单等所有可见的内容 、 。
文本相关标签
标题标签
显示效果
文字加粗 : 字号逐渐减小 、 独占一行 、
一级标题一个网页就用一次 : 用来放新闻标题或网页 Logo ,
1 | <h1>一级标题</h1> |
段落标签
显示效果
独占一行 : 两个段落之间有空白间隙 、
1 | <p>段落内容</p> |
超链接标签
显示效果
都在一行显示 : 从一个页面跳转到另一个页面或同一页面的不同部分 、
1 | <a href="https://www.example.com">访问示例网站</a> |
⭐⭐ 属性解释 ⭐⭐
href
链接的目标 URL : target
指定链接打开的方式 : 默认情况下 。 链接在同一窗口或标签页中打开 , 。
- _blank
在新标签页或窗口中打开链接 : 。 - _self
在当前窗口或标签页中打开链接 : 默认行为 ( ) 。 - _parent
在父框架中打开链接 : 如果存在 ( ) 。 - _top
在整个窗口中打开链接 : 如果在框架内 ( ) 。
title
当鼠标悬停在链接上时显示的提示信息 : 。 download
指定链接应被下载而不是导航到该链接 : 可以设置为文件名 。 浏览器会自动命名下载的文件 , 若为空 ; 则使用服务器提供的文件名 , 。 rel
定义当前文档与目标资源之间的关系 : 常用于外部链接以提高安全性 。 如防止恶意站点 ( ) 。
- noopener
防止通过 window.opener 访问新页面 : 。 - noreferrer
防止发送 HTTP Referer 头 : 。 - nofollow
告诉搜索引擎不要跟随此链接 : 。
hreflang
指定链接指向的资源的语言 : 。 ping
指定一个或多个URL : 当用户点击链接时 , 这些URL将接收通知 , 通常用于跟踪点击 ( ) 一个或多个URL 。 用空格分隔 , 。 type
指定链接指向资源的MIME类型 : 通常与 rel 结合使用 ( ) 。
代码格式化标签
1 | <p>以下是代码示例 |
字体格式化标签
显示效果
都在一行显示 :
一般都用左边的标签
1 | <!-- 加粗标签 --> |
首字母缩略词标签
1 | <p>我们使用 <abbr title="HyperText Markup Language">HTML</abbr> 来编写网页 |
换行、 水平线标签
换行和水平线标签都是单标签
1 | <!-- 换行标签 --> |
媒体相关标签
图像标签
显示效果
都在一行显示 :
1 | <img src="image.jpg"> |
⭐⭐ 属性解释 ⭐⭐
src
指定图像文件的路径 : alt
当图像无法加载时显示该文本 : title
当用户将鼠标悬停在图像上时显示提示信息 : width
设置图像的宽度 : 单位为像素 ( ) height
: 设置图像的高度单位为像素 ( ) loading
控制图像的懒加载行为 : lazy 表示延迟加载 。 即仅当图像接近视口时才加载 , eager 则表示立即加载 ; 。 crossorigin
允许跨域资源共享 (CORS) 请求以进行图像加载 : 值 , anonymous 或 use-credentials : usemap
关联图像映射 : image map ( ) 使得图像的不同部分可以链接到不同的URL , 示例 。 usemap=”#mapname” : ismap
标记图像为服务器端映射 : 通常与 , <form>
标签结合使用。
音频标签
1 | <audio src="音频路径"></audio> |
⭐⭐ 属性解释 ⭐⭐
controls
显示播放控件 : 如播放 ( 暂停 、 音量等 、 ) src
指定音频文件的路径 : 。 autoplay
自动播放音频 : 。 muted
初始状态下静音 : 。 loop
音频播放结束后自动重新开始播放 : 。 preload
提示浏览器如何预加载音频文件 : 。
- auto
尽可能预加载整个音频文件 : 。 - metadata
仅预加载音频文件的元数据 : 如时长 ( 尺寸等 、 ) 。 - none
不预加载音频文件 : 。
crossorigin
允许跨域资源共享 (CORS) 请求以进行音频加载 : 值 , anonymous 或 use-credentials : 。 <source>
标签用于指定多个音频文件源 : 以便支持不同浏览器对不同音频格式的支持 , 浏览器会尝试按顺序加载第一个支持的格式 。 。
视频标签
1 | <video controls width="600"> |
⭐⭐ 属性解释 ⭐⭐
controls
: 显示播放控件 如播放( 暂停、 音量等、 ) 。 autoplay
: 页面加载时自动播放音频 注意( 现代浏览器通常会阻止带有声音的自动播放: ) 。 loop
: 音频播放结束后自动重新开始。 muted
: 静音播放。 src
: 音频文件的路径。
字幕标签
1 | <!-- 为 <video> 和 <audio> 元素提供字幕 |
⭐⭐ 属性解释 ⭐⭐
kind
: 定义轨道类型 如 subtitles, captions, descriptions, chapters, metadata( ) 。 src
: 轨道文件的路径 通常是 WebVTT 文件( ) 。 srclang
: 轨道语言代码。 label
: 轨道的用户可见标签。
嵌入外部应用
1 | <!-- 用于嵌入外部应用或交互式内容 |
⭐⭐ 属性解释 ⭐⭐
src
: 外部资源的路径。 type
: 嵌入内容的 MIME 类型。 width
和height
: 设置嵌入内容的尺寸。
嵌入外部资源
1 | <!-- 用于嵌入外部资源 |
⭐⭐ 属性解释 ⭐⭐
data
: 外部资源的路径。 type
: 嵌入内容的 MIME 类型。 width
和height
: 设置嵌入内容的尺寸。
嵌入其他页面
1 | <!-- 用于在网页中嵌入另一个 HTML 文档 --> |
⭐⭐ 属性解释 ⭐⭐
src
: 要嵌入的页面或多媒体资源的 URL。 width
和height
: 设置 iframe 的尺寸。 allow
: 设置允许的特性 如 autoplay, fullscreen 等( ) 。
结构化数据标签
列表标签
1 | <!-- 无序列表 --> |
⭐⭐ 属性解释 ⭐⭐
start
定义列表项目的起始编号 : 。 reversed
指定列表应按降序排列 : 。
表格标签
1 | <table> |
⭐⭐ 属性解释 ⭐⭐
<table>
定义一个表格 : 。 <thead>
定义表格的头部 : 包含表头单元格 。 <th>
这些单元格通常用于显示列标题 , 。 <tbody>
定义表格的主体 : 包含实际的数据行 。 <tr>
和数据单元格<td>
。 <tfoot>
定义表格的底部 : 包含 。 <tr>
和<td>
通常用于显示汇总或总计信息。 <tr>
定义表格中的一行 : 。 <th>
定义表头单元格 : 。 <td>
定义数据单元格 : 。 rowspan
指定合并单元格跨越的行数 : 。 colspan
指定合并单元格跨越的列数 : 。
表单标签
1 | <form action="/submit" method="post" target="_blank" enctype="multipart/form-data"> |
⭐⭐ 属性解释 ⭐⭐
action
指定表单数据提交的目标URL : method
指定提交表单时使用的HTTP方法 : enctype
指定表单数据的编码类型 :
- application/x-www-form-urlencoded
默认 ( ) - multipart/form-data
用于文件上传 ( ) - text/plain
纯文本格式 ( 较少使用 , )
target
指定提交表单后结果页面的显示方式 : 。
- _self
默认 ( 在当前窗口打开 , ) - _blank
在新标签页或窗口打开 ( ) - _parent
在父框架中打开 ( ) - _top
在整个窗口中打开 ( )
<label>
说明文字 : <button>
按钮标签 : <input>
创建各种类型的输入控件 :
- type
定义控件类型 :
- text
单行文本输入框 : 。 - password
密码输入框 : 。 电子邮件输入框 : 。 - number
数字输入框 : 。 - checkbox
复选框 : 。 - radio
单选按钮 : 。 - file
文件上传 : 。 - submit
提交按钮 : 。 - reset
重置按钮 : 。 - required
标记该字段为必填项 : 。 - pattern
使用正则表达式定义输入格式 : 。 - placeholder
提供输入提示文本 : 。 - checked
输入框默认选中 : - multiple: 可以上传多个文件
- id
与 : label
标签中的for
属性相对应- name
传输到服务端的属性名称 :
<select>
和<option>
下拉选择列表 :
- selected
下拉框默认选中 :
<textarea>
多行文本输入框 :
预格式化标签
它保留了文本中的空格
1 | <pre> |
页面布局相关标签
header 标签
1 | <!-- 适用于页面顶部 |
nav 标签
1 | <header> |
main 标签
1 | <!-- 适用于文档的主要内容区域 --> |
aside 标签
1 | <!-- 适用于侧边栏 |
div 标签
1 | <!-- 使用 <div> 标签可以将网页的不同部分 |
footer 标签
1 | <!-- 适用于页脚 |
section 标签
1 | <!-- 主要用于将文档划分为不同的部分或章节 |
article 标签
1 | <!-- 适用于博客文章 |
span 标签
1 | <!-- 常用于对文档中的文本或部分内容进行分组和样式化 |
CSS
CSS
使用方法
1.行内样式
1 | <!-- 在 style 属性中写 CSS 代码 --> |
2.内部样式表
1 |
|
3.外部样式表
⭐⭐首先: 创建一个名为 styles.css 的文件
1 | p { |
⭐⭐然后: 在HTML文档中通过<link>
标签引入这个CSS文件
1 |
|
选择器
标签选择器
1 | <style> |
全局选择器
1 | <!-- 选择页面上的所有的标签 |
类选择器
同一个 classname 可以使用多次
1 | <style> |
ID选择器
同一个 idname 只能使用一次
1 | <style> |
属性选择器
⭐⭐ 基本语法
1 | 1.元素具有指定属性 |
⭐⭐ 使用示例
1 | <!-- [attribute] - 元素具有指定属性 --> |
子选择器
⭐⭐ 基本语法
1 | parent > child { |
⭐⭐ 使用示例
1 | <style> |
后代选择器
⭐⭐ 基本语法
1 | ancestor descendant { |
⭐⭐ 使用示例
1 | <style> |
伪类选择器
⭐⭐ 基本语法
1 | 伪类选择器用于定义元素在某些特定状态下的样式 |
⭐⭐ 使用示例
1 | <!-- 鼠标悬停状态 --> |
伪元素选择器
⭐⭐ 基本语法
1 | selector::pseudo-element { |
⭐⭐ 使用示例
1 | <!-- 在元素内容之前插入内容 --> |
相邻兄弟选择器
⭐⭐ 基本语法
1 | selector1 + selector2 { |
⭐⭐ 使用示例
1 | <style> |
通用兄弟选择器
⭐⭐ 基本语法
1 | selector1 ~ selector2 { |
⭐⭐ 使用示例
1 | <style> |
优先级
特异性
特异性是根据选择器的类型来确定的
从高到低分别是 , :
- 行内样式
直接在HTML元素中通过style属性定义的样式 : 。 - ID选择器
#id ( ) 例如 #header : 。 - 类选择器
.class ( ) 属性选择器 、 [attribute] ( 和伪类选择器 ) :hover等 ( ) 例如 : .intro : [type=”text”] 、 :hover 、 。 - 标签选择器
div ( 和伪元素选择器 ) ::before ( ) 例如 div, p, ::after : 。 - 全局选择器
* ( )
继承性
不是所有的CSS属性都可以继承
通常只有文本相关的属性 。 如颜色 ( 字体等 、 会被子元素继承 ) 即使某个属性可被继承 。 若子元素有明确的样式设定 , 这些设定会覆盖继承来的样式 , 。
层叠性
如果两个或更多的选择器具有相同的特异性
那么最后出现在样式表中的规则将会生效 , 。
这同样适用于外部样式表与内部样式表之间的关系后来加载的样式表中的规则会覆盖先前加载的样式表中的相同规则 , 。
!important
使用!important声明可以覆盖任何特异性更高的样式规则
这意味着如果你在一个样式规则中添加了!important 。 这个规则将优先于其他没有标记为!important的规则 , 。
样式属性
文字相关属性
属性 | 效果 | 可选值 | 示例 |
---|---|---|---|
color |
设置文本的颜色 | 可以使用颜色名 |
color: #FF5733; |
font-family |
定义文本的字体系列 | 可以指定多个字体作为备选 字体族 |
font-family: Arial, sans-serif; |
font-size |
设置字体大小 | 可以使用px |
font-size: 16px; |
font-weight |
定义字体的粗细程度 | 常见的值有normal |
font-weight: bold; |
font-style |
定义字体样式 | 常见的值有normal |
font-style: italic; |
text-align |
设置文本的水平对齐方式 | 可选值包括left |
text-align: center; |
text-indent |
首行缩进 | 可选值px |
text-decoration: 2em; |
text-decoration |
设置文本添加装饰效果 | 可以使用无效果 |
text-decoration: underline; |
line-height |
设置行高 |
可以是一个具体的数值 |
line-height: 1.6; |
letter-spacing |
调整字符之间的间距 | 可以是正数增加间距 |
letter-spacing: 2px; |
word-spacing |
类似于letter-spacing |
可以是正数增加间距 |
word-spacing: 5px; |
背景相关属性
属性 | 效果 | 可选值 | 示例 |
---|---|---|---|
background-color |
设置元素的背景颜色 | 可以使用颜色名称 |
background-color: #f3f3f3; |
background-image |
设置一个或多个背景图像 | 使用URL函数指定图像的位置 |
background-image: url('image.jpg'); |
background-repeat |
定义背景图像如何重复 | repeat repeat-x repeat-y no-repeat |
background-repeat: no-repeat; |
background-position |
设置背景图像的起始位置 | 可以使用关键词组合 |
background-position: center top; |
background-size |
设置背景图片的大小 | 具体的尺寸 百分比 关键字cover contain |
background-size: cover; |
background-attachment |
控制背景图像是固定还是随着页面的其余部分滚动 | scroll fixed local |
background-attachment: fixed; |
background-origin |
指定背景图像的定位区域是相对于哪个盒子进行定位的 | 可以用border-box |
background-origin: padding-box; |
background-clip |
类似于background-origin 可以用来限制背景色或图像的显示范围 |
可以用border-box |
background-clip: content-box; |
background |
可以在一个声明中设置所有单独的背景属性 |
属性值无需按特定顺序排列 background-color > background-image > background-position > background-size > background-repeat > background-attachment > background-origin > background-clip |
background: url('image.jpg') no-repeat center center/cover; |
盒子模型属性
在 CSS 中
盒子模型是围绕 HTML 元素的一个矩形区域 , 用于定义元素如何在页面上布局以及与其他元素的关系 , 每个 HTML 元素都被视为一个矩形框 。 这个框由几个部分组成 , 内容区 : content ( ) 内边距 、 padding ( ) 边框 、 border ( 和外边距 ) margin ( ) 。
属性 | 效果 | 可选值 | 示例 | |
---|---|---|---|---|
内容区 | width |
盒子宽度 |
px % auto initial inherit max-content min-content fit-content |
width: 200px; |
height |
盒子高度 | height: 200px; |
||
内边距 | padding-top |
设置元素顶部的内边距 | padding-top: 10px; |
|
padding-right |
设置元素右侧的内边距 | padding-right: 15px; |
||
padding-bottom |
设置元素底部的内边距 | padding-bottom: 20px; |
||
padding-left |
设置元素左侧的内边距 | padding-left: 25px; |
||
padding |
简写属性 |
padding: 10px; 上下左右均为10px padding: 10px 20px; 上下为10px padding: 10px 20px 30px; 上为10px padding: 10px 20px 30px 40px; 上为10px |
||
外边距 | margin-top |
设置元素顶部的外边距 | margin-top: 10px; |
|
margin-right |
设置元素右侧的外边距 | margin-right: 15px; |
||
margin-bottom |
设置元素底部的外边距 | margin-bottom: 20px; |
||
margin-left |
设置元素左侧的外边距 | margin-left: 25px; |
||
margin |
简写属性 |
margin: 10px; 上下左右均为10px margin: 10px 20px; 上下为10px margin: 10px 20px 30px; 上为10px margin: 10px 20px 30px 40px; 上为10px |
||
边框 | border-width |
定义边框的宽度 | 可以接受具体的长度值 或使用预定义的关键字 |
border-width: 2px; |
border-color |
定义边框的颜色 | 可以使用颜色名称 十六进制颜色码 RGB |
border-color: #0000ff; |
|
border-style |
定义边框的样式 |
none solid dashed dotted double groove ridge inset outset |
border-style: solid; |
|
border-top |
设置元素顶部的边框 | border-top: 2px dashed blue; |
||
border-right |
设置元素右部的边框 | border-right: 2px dashed blue; |
||
border-bottom |
设置元素底部的边框 | border-bottom: 2px dashed blue; |
||
border-left |
设置元素左部的边框 | border-left: 2px dashed blue; |
||
border |
简写属性 | border: 2px solid red; |
||
border-radius |
设置创建圆角边框 | 可以接受具体的长度值(px) |
border-radius: 10px; border-radius: 10px 5px 10px 20px;
|
|
相关属性 | box-shadow |
设置阴影效果 |
h-offset v-offset blur spread color inset |
外阴影 box-shadow: 10px 10px 15px rgba(0,0,0,0.3); 内阴影 box-shadow: inset 5px 5px 10px #888; 多重阴影 box-shadow: 10px 10px 5px grey, -10px -10px 5px blue;
|
box-sizing |
决定元素的宽度和高度如何计算 |
content-box border-box inherit initial |
box-sizing: border-box; |
|
overflow |
设置当元素的内容超出其指定的宽度和高度时应如何展示 |
visible hidden scroll auto clip |
overflow: auto; overflow-x: scroll; overflow-y: scroll;
|
布局相关属性
属性 | 效果 | 可选值 | 示例 | |
---|---|---|---|---|
display |
转换元素的显示模式 |
block inline inline-block none flex inline-flex grid inline-grid table, inline-table, table-row, table-cell等 contents list-item |
display: block; |
|
vertical-align |
设置行内元素垂直对齐方式 |
baseline sub super top text-top middle bottom text-bottom length percentage |
vertical-align: middle; vertical-align: -2px; |
|
flex 布局 |
flex-direction |
设置主轴的方向 |
row row-reverse column column-reverse |
flex-direction: column; |
flex |
设置元素在主轴方向的伸缩比 |
flex-grow flex-shrink flex-basis |
flex: 1; flex: 1 1 200px; 如果省略了 flex-shrink 如果省略了 flex-basis |
|
justify-content |
设置元素在主轴上的对齐方式 |
flex-start flex-end center space-between space-around space-evenly |
justify-content: space-between; |
|
align-items align-self |
设置元素在侧轴上的对齐方式 |
stretch flex-start flex-end center baseline |
align-items |
|
flex-wrap |
设置元素换行的方式 |
nowrap wrap wrap-reverse |
flex-wrap: wrap; |
|
align-content |
当有多行时 |
flex-start flex-end center space-between space-around space-evenly stretch |
align-content: space-between; |
|
定位 | position |
设置元素的定位方式 |
static relative absolute fixed sticky |
position: fixed; |
top | right | bottom | left |
设置元素偏移距离 |
top right bottom left position: static;不适用以上属性 |
position: fixed; top: 20px; left: 30px; |
|
z-index |
设置元素的堆叠顺序 |
可以是任何整数值 值越大显示顺序越靠上 |
position: fixed; z-index: 2; |
动态效果属性
属性 | 效果 | 可选值 | 示例 | |
---|---|---|---|---|
元素转换 | transform |
对元素应用2D或3D转换效果 |
translate rotate scale skew matrix perspective |
沿X轴移动50px transform: translate(50px, 100px); 逆时针旋转45度 transform: rotate(-45deg); 绕X轴旋转 transform: rotateX(45deg); X轴方向放大2倍 transform: scale(2, 1.5); X轴方向倾斜30度 transform: skew(30deg, 20deg); 复杂的2D变换 transform: matrix(1, -0.3, 0, 1, 0, 0); 应用透视并旋转 transform: perspective(1000px) rotateY(45deg); |
transform-origin |
设置元素转换原点 | 默认值为元素的中心点 |
将转换原点设置为左上角 transform-origin: 0 0; |
|
transform-style |
控制子元素在 3D 空间中的渲染方式 通常与 transform 和 perspective 属性一起使用 |
flat | preserve-3d |
把该元素盒子变化为一个3D空间 .box{transform-style: preserve-3d;} 设置透视效果 .box{perspective: 1000px;} |
|
过渡效果 | transition-property |
设置应用过渡效果的CSS属性名称 |
可以指定多个属性名 all 表示所有可过渡的属性 |
transition-property: background-color, width; |
transition-duration |
设置完成过渡效果所需的时间 | 默认值为 0s | transition-duration: 0.5s; |
|
transition-timing-function |
设置过渡效果的速度曲线 |
ease linear ease-in ease-out ease-in-out cubic-bezier |
transition-timing-function: ease-in-out; |
|
transition-delay |
设置过渡效果何时开始 | 默认值为 0s | transition-delay: 0.2s; |
|
transition |
上边效果的复合简写属性 | transition: [property] [duration] [timing-function] [delay]; | transition: background-color 0.3s ease, width 0.3s ease; |
|
光标 | cursor |
设置当鼠标指针悬停时的光标样式 |
default: 默认的箭头光标 pointer: 手型光标 text: 竖线光标 wait: 沙漏或旋转圈 help: 带问号的光标 move: 十字箭头 not-allowed: 圆圈加斜杠 row-resize: 上下箭头 col-resize: 左右箭头 grab: 手掌张开的光标 grabbing: 手掌闭合的光标 url(path): 自定义光标 |
cursor: url('https://example.com/cursor.cur'), pointer; |
透明 | opacity |
设置元素的透明度 | 值的范围 |
opacity: 0.7; |
渐变 | linear-gradient |
创建线性渐变背景 |
direction color-stop |
从上到下的渐变 background: linear-gradient(to bottom, red, blue); 从左上角到右下角的45度角渐变 background: linear-gradient(45deg, red, blue); 包含三个颜色停止点的渐变 background: linear-gradient(to right, red, yellow 50%, green); 渐变透明度 background: linear-gradient(to right, rgba(255,0,0,1), rgba(255,0,0,0)); |
radial-gradient |
创建径向渐变背景 |
shape circle | ellipse size closest-side | farthest-side closest-corner | farthest-corner position color-stop |
基本的径向渐变 background: radial-gradient(circle, red, blue); 使用椭圆形 background: radial-gradient(ellipse farthest-corner, red, blue); 添加更多的颜色停止点以创建更复杂的渐变 background: radial-gradient(circle, red, yellow 30%, green); 改变渐变的起始位置 background: radial-gradient(circle at top left, red, blue); 使用透明度 background: radial-gradient(circle, rgba(255,0,0,1), rgba(255,0,0,0)); |
|
动画 | @keyframes |
定义动画关键帧的CSS样式 |
from 或 0% to 或 100% 可以在 0% 到 100% 之间添加多个百分比值的关键帧 |
@keyframes xxxname {from {margin-left: 0%;} to {margin-left: 100%;}} |
animation-name |
指定应用哪一个 @keyframes 定义的动画 | @keyframes 的名称 | div { animation-name: xxxname; } |
|
animation-duration |
定义完成一个周期的动画需要的时间 | 默认为 0s | animation-duration: 2s; |
|
animation-timing-function |
设置动画的速度曲线 |
linear: 匀速 ease: 默认值 steps ease-in: 缓入 ease-out: 缓出 ease-in-out: 缓入缓出 cubic-bezier(n,n,n,n): 贝塞尔曲线 |
animation-timing-function: ease-in-out; |
|
animation-delay |
设置动画延迟开始时间 | 默认为 0s | animation-delay: 1s; |
|
animation-iteration-count |
设置动画播放的次数 |
默认为 infinite |
animation-iteration-count: infinite; |
|
animation-direction |
设置是否在循环中反向播放动画 |
normal reverse: 反向播放 alternate: 循环交替正反方向播放 alternate-reverse: 循环交替反正方向播放 |
animation-direction: alternate; |
|
animation-fill-mode |
设置动画结束后元素的状态 |
none: 不应用任何样式 forwards: 保持动画结束时的样式 backwards: 在延迟阶段应用动画开始前的第一帧样式 both: 同时应用 forwards 和 backwards |
animation-fill-mode: forwards; |
|
animation-play-state |
设置动画的播放状态 |
running paused |
animation-play-state: paused; |
|
animation |
上述所有属性的简写 | -- | animation: xxxname 2s ease-in-out 1s infinite alternate both running; |
自适应相关属性
属性 | 描述 | 语法 |
---|---|---|
rem |
一种相对长度单位 |
1. 在 CSS 中定义根元素的字体大小 html {font-size: 16px;} 2. 使用 rem 来设置其他元素的大小 相当于 19.2px (1.2 * 16px) body {font-size: 1.2rem;} |
vw |
基于视口宽度的相对单位 |
宽度为视口宽度的80% .container {width: 80vw;} |
vh |
基于视口高度的相对单位 |
高度为视口高度的80% .container {height: 80vh;} |
@media |
根据设备特性应用特定的样式规则 | @media mediatype and (expression) |
⭐⭐ @media 可选值
1 | mediatype: |
⭐⭐ @media 使用示例
1 | /* 1. 根据屏幕宽度调整样式 */ |
LESS
LESS 是一种动态样式表语言
注释
1 | // 单行注释 |
变量
1 | // primary-color |
运算
1 | // 支持数学运算以及内置的函数 |
嵌套
1 | // 以更直观的方式进行样式嵌套 |
混合
1 | // 将一组属性从一个规则集中包含到另一个规则集中 |
继承
1 | .message { |
导入
1 | // 导入其他 LESS 文件 |
导出
LESS 的
手动编译
1 | LESS 官方提供了一个命令行工具 lessc |
实时编译
⭐⭐ 浏览器端实时编译
1 | <!-- 在开发阶段 |
⭐⭐ 使用 VSCode 插件💗推荐💗
1 | 每次保存 .less 文件时 |
⭐⭐ 使用 Webpack
1 | 1. 安装依赖 |
JS
JS
ECMAScript这是JavaScript的核心部分 : 它规定了语言的基本语法 , 数据类型 、 如数字 ( 字符串 、 布尔值 、 对象等 、 ) 运算符 、 流程控制语句 、 如条件语句 ( 循环语句 、 等 ) ECMAScript是JavaScript的标准 。 确保了不同环境下的JavaScript代码可以保持一致的行为 , 。
DOM文档对象模型 : DOM定义了一个与平台无关的接口 , 程序和脚本可以通过这个接口来动态访问和更新文档的内容 , 结构及样式 、 通过JavaScript 。 开发者可以使用DOM提供的API来选择元素 , 修改HTML内容 、 操作属性以及响应用户事件等 、 。
BOM浏览器对象模型 : 提供了与浏览器窗口进行交互的对象 , 例如window对象 , 它使JavaScript有能力控制浏览器显示的页面以外的部分 。 比如弹出新浏览器窗口 , 移动 、 关闭浏览器窗口以及提供对话框来与用户互动 、 如alert ( prompt等 、 ) 此外 。 BOM还允许脚本获取屏幕分辨率信息 , 浏览器版本信息等 、 。
输入/输出
输出
1 | // 1. 使用 console.log() 输出到控制台 |
输入
1 | // 1. 使用 prompt() 获取用户输入 |
基本类型
变量/常量
1 | // var |
number
用于表示整数或浮点数
1 | let integer = 42; // 整数 |
boolean
只有两个字面值
1 | let isTrue = true; |
string
用于表示文本数据
1 | let singleQuote = 'Hello'; |
undefined
表示未定义的值
1 | let a; |
null
表示空值或不存在的对象
1 | let b = null; |
NaN
NaN 在 JavaScript 中代表
1 | let a = "Hello" / 2; // 尝试对非数字进行数学操作 |
BigInt
BigInt 是一种内置对象
1 | let bigInt = 1234567890123456789012345678901234567890n; |
Symbol
Symbol 类型是唯一的且不可变的数据类型
1 | let sym1 = Symbol(); |
类型转换
类型转换是指将一个数据类型转换为另一种数据类型
隐式类型转换是由 JavaScript 自动完成的
显式类型转换是开发者主动通过代码将一种类型转换为另一种类型
⭐⭐ 隐式类型转换
1 | // 数字与字符串相加 |
⭐⭐ 显式类型转换
1 | // 转换为数字 |
⭐⭐ 细节注意
1 | 1. 避免意外的隐式转换 |
运算符
运算符用于执行程序代码运算
算术运算符
运算符 | 描述 |
---|---|
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
取模 |
++ |
自增 放在变量前 放在变量后 |
-- |
自减 放在变量前 放在变量后 |
⭐⭐ 应用示例
1 | let a = 10, b = 3; |
赋值运算符
运算符 | 描述 |
---|---|
= |
基本赋值运算符 |
+= |
两个变量相加后再赋值给左侧变量 |
-= |
两个变量相减后再赋值给左侧变量 |
*= |
两个变量相乘后再赋值给左侧变量 |
/= |
两个变量相除后再赋值给左侧变量 |
%= |
两个变量取模后再赋值给左侧变量 |
⭐⭐ 应用示例
1 | let x = 10; |
比较运算符
运算符 | 描述 |
---|---|
== |
相等 |
=== |
全等 |
!= |
不等 |
!== |
不全等 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
⭐⭐ 应用示例
1 | let num1 = 5, num2 = "5"; |
逻辑运算符
运算符 | 描述 |
---|---|
&& |
逻辑与 |
|| |
逻辑或 |
! |
逻辑非 |
⭐⭐ 应用示例
1 | let p = true, q = false; |
位运算符
运算符 | 描述 |
---|---|
& |
按位与 |
| |
按位或 |
^ |
按位异或 |
~ |
按位非 |
<< |
左移 |
>> |
右移 |
>>> |
无符号右移 |
⭐⭐ 应用示例
1 | let bit1 = 5; // 二进制 |
其他运算符
运算符 | 描述 |
---|---|
? : |
三元运算符 |
, |
逗号运算符 |
typeof |
返回一个字符串 |
delete |
删除对象上的属性 |
in |
检查对象中是否存在指定属性 |
instanceof |
检查某个构造函数的 prototype 属性所指向的对象是否存在另外一个要检测对象的原型链上 |
⭐⭐ 应用示例
1 | // 条件运算符 |
运算符的优先级
运算符优先级决定了表达式中运算符的计算顺序
优先级 | 运算符 |
---|---|
1 | 小括号 |
2 | 一元运算符 |
3 | 算数运算符 |
4 | 关系运算符 |
5 | 相等运算符 |
6 | 逻辑运算符 |
7 | 赋值运算符 |
8 | 逗号运算符 |
流程控制
分支语句
⭐⭐ if...else
语句
if
语句用于基于不同的条件执行不同的代码块else
执行另一个代码块
1 | let age = 20; |
⭐⭐ switch
语句
switch
语句用于基于不同的 case
执行不同的代码块if...else
语句的方式
1 | let day = "Monday"; |
循环语句
⭐⭐ for
循环
for
循环是一种用于重复执行某段代码直到满足特定条件为止的循环结构
1 | for (let i = 0; i < 5; i++) { |
⭐⭐ while
循环
while
循环会在指定的条件为真的情况下重复执行代码块
1 | let i = 0; |
⭐⭐ do...while
循环
do...while
循环与 while
循环类似
1 | let i = 0; |
跳转语句
⭐⭐ break
语句
break
语句用于立即退出循环或 switch
语句
1 | for (let i = 0; i < 10; i++) { |
⭐⭐ continue
语句
continue
语句用于跳过当前循环体中剩余的语句
1 | for (let i = 0; i < 5; i++) { |
异常处理
⭐⭐ try...catch
语句
try...catch
语句用于捕获并处理运行时错误
1 | try { |
函数
函数是组织代码的基本单元之一
函数声明
1 | // 基本的函数定义 |
函数表达式
1 | // 函数也可以作为表达式的一部分来定义 |
箭头函数
1 | // 箭头函数 |
匿名函数
1 | // 匿名函数与立即执行函数表达式(IIFE) |
默认参数
1 | // 从 ES6 开始 |
剩余参数
1 | // ES6 新增剩余参数 |
闭包
闭包是指有权访问另一个函数作用域中的变量的函数
1 | function createCounter() { |
数组/对象
数组
数组是一种用于存储多个值的有序集合
⭐⭐ 基本使用
1 | // 创建数组 |
⭐⭐ 内置方法
JavaScript 提供了丰富的内置方法来操作数组
1 | // 添加元素 |
对象
对象是一种非常重要的数据结构
⭐⭐ 创建对象的几种方法
1 | // 第一种 |
⭐⭐ 访问和修改对象属性
1 | // 可以通过点符号或方括号访问和修改对象的属性 |
⭐⭐ 对象中方法的使用
1 | let mathOperations = { |
⭐⭐ 遍历对象属性
1 | for (let key in person) { |
⭐⭐ 原型与继承
1 | // 原型使用示例 |
⭐⭐ 共享属性/方法
可以通过 prototype 为对象添加共享的属性或方法
1 | // 获取 prototype 对象 |
解构赋值
1 | // 数组解构 |
内置对象/函数
Object
Object 是所有对象的基类
函数名 | 描述 |
---|---|
Object.keys(obj) |
返回对象的所有可枚举属性名 |
Object.values(obj) |
返回对象的所有可枚举属性值 |
Object.entries(obj) |
返回对象的所有键值对数组 |
Object.assign(target, source) |
将一个或多个源对象的属性复制到目标对象 |
Object.create(proto) |
创建一个新对象 |
Object.freeze(obj) |
冻结对象 |
Object.seal(obj) |
密封对象 |
⭐⭐ 使用示例
1 | let obj = { name: "Alice", age: 25 }; |
Array
Array 用于表示有序的数据集合
函数名 | 描述 |
---|---|
push() |
向数组末尾添加元素 |
pop() |
移除数组末尾的元素 |
shift() |
移除数组开头的元素 |
unshift() |
向数组开头添加元素 |
slice(start, end) |
返回数组的一部分 |
splice(index, deleteCount, ...items) |
从数组中添加/删除元素 |
map(callback) |
创建一个新数组 |
filter(callback) |
创建一个新数组 |
reduce(callback, initialValue) |
对数组中的每个元素执行回调函数 |
forEach(callback) |
遍历数组 |
join() |
将数组的所有元素连接成一个字符串 |
⭐⭐ 使用示例
1 | let arr = [1, 2, 3]; |
String
String 用于表示文本数据
函数名 | 描述 |
---|---|
charAt(index) |
返回字符串中指定位置的字符 |
concat(str) |
连接两个或多个字符串 |
includes(searchStr) |
检查字符串是否包含指定子串 |
indexOf(searchStr) |
返回子串首次出现的索引 |
replace(oldStr, newStr) |
替换字符串中的子串 |
split(separator) |
按分隔符拆分字符串为数组 |
toLowerCase() |
转换字符串为小写 |
toUpperCase() |
转换字符串为大写 |
trim() |
移除字符串两端的空白字符 |
match() |
正则匹配 |
⭐⭐ 使用示例
1 | let str = "Hello, World"; |
Math
Math 提供数学相关的常量和函数
函数名 | 描述 |
---|---|
Math.abs(x) |
返回绝对值 |
Math.ceil(x) |
向上取整 |
Math.floor(x) |
向下取整 |
Math.round(x) |
四舍五入 |
Math.max(...values) |
返回最大值 |
Math.min(...values) |
返回最小值 |
Math.random() |
生成范围为 [0, 1) 的随机数 |
Math.pow(base, exponent) |
计算幂 |
Math.sqrt(x) |
计算平方根 |
⭐⭐ 使用示例
1 | console.log(Math.abs(-5)); // 5 |
Date
Date 用于处理日期和时间
函数名 | 描述 |
---|---|
new Date() |
创建当前日期时间对象 |
getTime() |
返回当前日期的时间戳 |
getDate() |
返回当前日期的天数 |
getMonth() |
返回当前日期的月份 |
getFullYear() |
返回当前日期的年份 |
getHours() |
返回当前小时 |
getMinutes() |
返回当前分钟 |
getSeconds() |
返回当前秒 |
setDate(day) |
设置日期的天数 |
toISOString() |
返回 ISO 格式的日期字符串 |
⭐⭐ 使用示例
1 | let today = new Date(); |
JSON
JSON 用于解析和序列化 JSON 数据
函数名 | 描述 |
---|---|
JSON.stringify(obj) |
将对象转换为 JSON 字符串 |
JSON.parse(jsonStr) |
将 JSON 字符串解析为对象 |
⭐⭐ 使用示例
1 | let obj = { name: "Alice", age: 25 }; |
RegExp
RegExp 用于正则表达式匹配
⭐⭐ 方法
函数名 | 描述 |
---|---|
test(string) |
测试字符串是否匹配正则表达式 |
exec(string) |
返回匹配的结果 |
⭐⭐ 正则字符
类别 | 字符 | 描述 |
---|---|---|
字符类 | [abc] |
匹配方括号内的任意字符 |
[^abc] |
匹配方括号内没有列出的任意字符 | |
[a-z] |
匹配指定范围内的任意字符 |
|
\d |
匹配数字字符 |
|
\D |
匹配非数字字符 |
|
\w |
匹配单词字符 |
|
\W |
匹配非单词字符 | |
\s |
匹配空白字符 | |
\S |
匹配非空白字符 | |
量词 | * |
匹配前面的子表达式零次或多次 |
+ |
匹配前面的子表达式一次或多次 | |
? |
匹配前面的子表达式零次或一次 | |
{n} |
匹配前面的子表达式恰好 n 次 | |
{n,} |
匹配前面的子表达式至少 n 次 | |
{n,m} |
匹配前面的子表达式至少 n 次 |
|
边界匹配 | ^ |
匹配输入字符串的开始位置 |
$ |
匹配输入字符串的结束位置 | |
\b |
匹配一个单词边界 | |
\B |
匹配非单词边界 | |
分组与捕获 | ( ... ) |
分组 |
(?: ... ) |
非捕获分组 |
|
\n |
引用之前捕获的分组 |
⭐⭐ 使用示例
1 | // 创建正则表达式的两种方式 |
Function
Function 是 JavaScript 中所有函数的基类
⭐⭐ 方法
函数名 | 描述 |
---|---|
function.call(thisArg, arg1, arg2, ...) |
调用这个函数 |
function.apply(thisArg, [argsArray]) |
调用这个函数 |
function.bind(thisArg, arg1, arg2, ...) |
创建一个新的函数 |
⭐⭐ 使用示例
1 | // 使用 call 方法示例 |
XMLHttpRequest
XMLHttpRequest 是 JavaScript 中的一个内置对象
⭐⭐ GET 请求
1 | // 创建一个 XMLHttpRequest 对象 |
⭐⭐ POST 请求
1 | // 创建一个 XMLHttpRequest 对象 |
Promise
Promise 是 JavaScript 中一个表示异步操作最终完成或失败的内置对象
⭐⭐ 核心作用
1 | 封装异步操作 |
⭐⭐ 基本语法
1 | // Promise 对象通过 new Promise() 构造函数创建 |
⭐⭐ 静态方法
1 | // 快速创建一个已成功的 Promise |
Fetch
Fetch 在 JavaScript 中是一个基于函数的接口
⭐⭐ 基本语法
1 | fetch('https://api.example.com/data') |
⭐⭐ 请求参数
1 | fetch 方法可以接受两个参数 |
⭐⭐ 响应对象
1 | fetch 返回的 Response 对象包含了许多有用的属性和方法 |
⭐⭐ 错误处理
fetch 只有在网络请求失败
1 | fetch('https://api.example.com/data') |
BOM
BOM
window
window 对象
⭐⭐ 属性
属性 | 描述 |
---|---|
location |
包含有关当前 URL 的信息 |
history |
提供对用户浏览历史的访问 |
navigator |
提供了关于浏览器的信息 |
screen |
包含有关用户屏幕的信息 |
document |
指向 HTML 文档 |
⭐⭐ 方法
方法 | 描述 |
---|---|
alert(), prompt(), confirm() |
弹出对话框 |
setTimeout() |
延时执行函数 |
setInterval() |
定时执行函数 |
clearTimeout() |
关闭延时 |
open(), close() |
打开和关闭新窗口 |
moveTo(), resizeTo() |
移动和调整窗口大小 |
scrollTo(), scrollBy() |
调整窗口滚动条 |
⭐⭐ 使用示例
1 | // 弹出一个简单的警告框 |
location
包含了当前页面的 URL 信息
⭐⭐ 属性
属性 | 描述 |
---|---|
href |
完整的 URL |
protocol |
协议 |
host |
主机 |
hostname |
主机名 |
port |
端口 |
pathname |
路径名 |
search |
搜索 |
hash |
哈希 |
⭐⭐ 方法
方法 | 描述 |
---|---|
assign() |
加载一个新的文档 |
reload() |
重新加载当前文档 |
replace() |
用新的文档替换当前文档 |
⭐⭐ 使用示例
1 | console.log(location.href); // 输出当前页面的完整 URL |
history
提供了对用户的浏览历史的访问
⭐⭐ 方法
方法 | 描述 |
---|---|
back() |
后退一页 |
forward() |
前进一页 |
go(n) |
前进或后退指定数目的页面 |
⭐⭐ 使用示例
1 | history.back(); // 后退一页 |
navigator
提供了关于浏览器的相关信息
⭐⭐ 属性
属性 | 描述 |
---|---|
appName |
浏览器名称 |
appVersion |
浏览器版本 |
platform |
运行浏览器的操作系统平台 |
userAgent |
用户代理字符串 |
⭐⭐ 使用示例
1 | console.log(navigator.userAgent); // 输出用户代理字符串 |
screen
提供了有关用户屏幕的信息
⭐⭐ 属性
属性 | 描述 |
---|---|
width |
屏幕分辨率的宽度 |
height |
屏幕分辨率的高度 |
availWidth |
可用屏幕宽度 |
availHeight |
可用屏幕高度 |
⭐⭐ 使用示例
1 | console.log(screen.width); // 输出屏幕宽度 |
DOM
DOM
节点
Node ( ) 文档中的每一个部分都被视为一个节点 : 包括元素 , 属性 、 文本 、 注释等 、 。
元素Element ( ) HTML 或 XML 文档中的标签被视为元素节点 : 。
属性Attribute ( ) 元素上的特性 : 如 id ( class 等 、 被视为属性节点 ) 。
文本节点Text Node ( ) 元素内的文本内容 : 。
获取元素
函数名 | 描述 |
---|---|
document.getElementById(id) |
通过 ID 获取单个元素 |
document.getElementsByClassName(className) |
通过类名获取元素集合 |
document.getElementsByTagName(tagName) |
通过标签名获取元素集合 |
document.querySelector(selector) |
返回与 CSS 选择器匹配的第一个元素 |
document.querySelectorAll(selector) |
返回与 CSS 选择器匹配的所有元素的 NodeList |
⭐⭐ 使用示例
1 | let elementById = document.getElementById("myId"); |
修改元素
函数名 | 描述 |
---|---|
element.innerHTML |
获取或设置元素的 HTML 内容 |
element.textContent |
获取或设置元素的文本内容 |
element.setAttribute(name, value) |
设置元素的属性值 |
element.getAttribute(name) |
获取元素的属性值 |
⭐⭐ 使用示例
1 | let myDiv = document.getElementById("myDiv"); |
添加元素
函数名 | 描述 |
---|---|
document.createElement(tagName) |
创建一个新的元素节点 |
document.createTextNode(text) |
创建一个新的文本节点 |
node.appendChild(child) |
将一个节点作为最后一个子节点添加到另一个节点中 |
node.insertBefore(newNode, existingNode) |
在现有子节点之前插入新节点 |
node.cloneNode(deep) |
复制出来一个新的节点 |
parentNode.replaceChild(newChild, oldChild) |
用新节点替换旧节点 |
⭐⭐ 使用示例
1 | // 创建一个新的 HTML 元素 |
删除元素
函数名 | 描述 |
---|---|
parentNode.removeChild(child) |
从 DOM 中删除指定的子节点 |
⭐⭐ 使用示例
1 | let oldDiv = document.getElementById("oldDiv"); |
元素位置
⭐⭐ 属性
属性 | 描述 |
---|---|
offsetTop |
元素相对于其 offsetParent 节点的顶部偏移量 |
offsetLeft |
元素相对于其 offsetParent 节点的左侧偏移量 |
offsetWidth |
元素的布局宽度 |
offsetHeight |
元素的布局高度 |
scrollLeft |
元素水平方向上的滚动偏移量 |
scrollTop |
元素垂直方向上的滚动偏移量 |
clientTop |
元素上边框的宽度 |
clientLeft |
元素左边框的宽度 |
⭐⭐ 方法
方法 | 描述 |
---|---|
getBoundingClientRect() |
返回一个 DOMRect 对象 |
⭐⭐ 使用示例
1 | // 输出元素相对于其最近的定位父级的顶部和左侧偏移量 |
自定义属性
data-*
属性是 HTML5 中推荐使用的自定义属性方式data-
开头dataset API
来访问和操作
⭐⭐ 在 HTML 中定义 data-*
属性
1 | <div id="myElement" data-id="123" data-name="example" data-status="active"></div> |
⭐⭐ 使用 dataset API
, 操作自定义属性
1 | // dataset 是一个 DOMStringMap 对象 |
⭐⭐ 传统方式操作自定义属性
1 | const element = document.getElementById('myElement'); |
事件处理
函数名 | 描述 |
---|---|
element.addEventListener(event, function) |
为指定元素添加事件监听器 |
element.removeEventListener(event, function) |
移除事件监听器 |
event | 事件 | 描述 |
---|---|---|
鼠标事件 | click |
当鼠标按钮被点击时触发 |
dblclick |
当鼠标双击时触发 | |
mousedown |
当鼠标按钮被按下时触发 | |
mouseup |
当鼠标按钮被释放时触发 | |
mousemove |
当鼠标指针在元素内移动时触发 | |
mouseover |
当鼠标指针移入元素范围内时触发 | |
mouseout |
当鼠标指针移出元素范围时触发 | |
mouseenter |
当鼠标指针进入元素时触发 | |
mouseleave |
当鼠标指针离开元素时触发 | |
键盘事件 | keydown |
当按键被按下时触发 |
keypress |
当按键被按下且该键是一个字符键时触发 | |
keyup |
当按键被释放时触发 | |
表单事件 | submit |
当表单被提交时触发 |
reset |
当表单被重置时触发 | |
focus |
当元素获得焦点时触发 | |
blur |
当元素失去焦点时触发 | |
change |
当元素的值发生改变时触发 | |
input |
当用户输入数据时触发 | |
触摸事件 | touchstart |
当手指放在触摸屏上时触发 |
touchmove |
当手指在触摸屏上滑动时触发 | |
touchend |
当手指从触摸屏上抬起时触发 | |
touchcancel |
当触摸由于某些原因被中断时触发 | |
加载事件 | load |
当整个页面 |
unload |
当用户退出页面时触发 | |
beforeunload |
当窗口 |
|
DOMContentLoaded |
当初始的 HTML 文档被完全加载和解析完成之后触发 |
|
滚动事件 | scroll |
当用户滚动给定元素时触发 |
剪贴板事件 | copy |
当用户发起复制操作时触发 |
cut |
当用户发起剪切操作时触发 | |
paste |
当用户发起粘贴操作时触发 | |
拖拽事件 | dragstart |
当用户开始拖动元素时触发 |
drag |
当元素正在被拖动时触发 | |
dragend |
当拖动操作完成时触发 | |
dragenter |
当被拖动的元素进入放置目标时触发 | |
dragover |
当被拖动的元素在放置目标上移动时触发 | |
dragleave |
当被拖动的元素离开放置目标时触发 | |
drop |
当被拖动的元素放置在放置目标上时触发 |
⭐⭐ 使用示例
1 | // 点击事件 |
事件对象
事件对象
1 | // 当你为一个元素添加事件监听器时 |
⭐⭐ 属性
事件 | 属性 | 描述 |
---|---|---|
基本属性 | type |
事件的类型 |
target |
触发事件的 DOM 元素 | |
currentTarget |
事件监听器绑定到的元素 | |
bubbles |
事件是否会在 DOM 树中冒泡 | |
cancelable |
是否可以取消事件的默认行为 | |
鼠标事件 | clientX, clientY |
鼠标指针相对于浏览器窗口的 X 和 Y 坐标 |
screenX, screenY |
鼠标指针相对于用户屏幕的 X 和 Y 坐标 | |
button |
哪个鼠标按钮被按下 |
|
buttons |
表示当前按下的鼠标按钮的状态 |
|
键盘事件 | key |
按键的键名 |
表单事件 | inputType |
输入操作的类型 |
data |
插入或删除的文本内容 | |
触摸事件 | touches |
当前所有触摸点的列表 |
changedTouches |
涉及当前事件的所有触摸点的列表 | |
targetTouches |
仍在触发目标元素上的触摸点列表 |
⭐⭐ 使用示例
1 | // 基本属性使用示例 |
事件流
在 Web 开发中
捕获阶段
Capturing Phase ( )
- 从最外层的祖先元素开始
向目标元素传播 , 。 - 在这个阶段
事件不会被默认处理 , 而是逐级向下传递直到达到目标元素 , 。 - 可以通过 addEventListener 的第三个参数设置为 true 来指定监听器在这个阶段执行
。
目标阶段
Target Phase ( )
- 当事件到达目标元素时
进入目标阶段 , 。 - 在这个阶段
事件直接在目标元素上触发 , 。 - 这是事件实际发生的阶段
也是开发者通常关注最多的部分 , 。
冒泡阶段
Bubbling Phase ( )
- 事件从目标元素开始
逐级向上传播回最外层的祖先元素 , 。 - 大多数事件都会经历冒泡阶段
但也有例外 , 如 focus, blur 等事件不会冒泡 , 。 - 默认情况下
事件监听器会在冒泡阶段执行 , 即 addEventListener 的第三个参数为 false 或未指定时 , 。
⭐⭐ 模拟事件流
1 | // HTML 结构 |
⭐⭐ 阻止事件流
1 | // 阻止冒泡 |
JQuery
jQuery是一个快速
简单使用
1 |
|
入口函数
1 | // 第一种写法 |
选择器
基本语法
1 | 基本语法 |
基础选择器
1 | // 元素选择器 |
层次选择器
1 | // 后代选择器 |
过滤选择器
1 | // :first |
表单选择器
1 | // :input |
使用示例
1 | // 设置所有<p>元素的文本为"Hello jQuery!" |
事件处理
可以使用 .on()
方法绑定事件处理函数到选定的元素上
1 | // 点击事件 |
文档操作
操作内容
1 | // 获取文本内容 |
操作属性
1 | // 获取属性值 |
操作样式
1 | // 获取单个CSS属性值 |
操作节点
1 | // 在元素开头插入内容 |
动画效果
显示/隐藏
1 | // 显示元素 |
淡入淡出
1 | // 淡入元素 |
滑动效果
1 | // 向下滑动显示元素 |
自定义动画
1 | $("button").click(function(){ |
插件机制
自定义插件
1 | // 自定义元素方法 |
插件库
插件 | 描述 |
---|---|
jQuery Validate |
用于简化表单验证的开发工作 |
jQuery Cookie |
用于处理浏览器中的 Cookie |
jQuery Accordion |
用于以折叠面板的形式显示内容 |
jQuery Autocomplete |
用于提供输入框的自动补全建议 |
jQuery Growl |
用于在网页上显示非阻塞式的消息提示 |
jQuery Prettydate |
用于将日期格式化为更友好的 |
jQuery Tooltip |
用于在用户悬停或聚焦某个元素时显示提示信息 |
jQuery Treeview |
用于创建树形结构的插件 |
jQuery UI |
一个官方的 jQuery 插件库 |
异步请求
jQuery 提供了几个简化 AJAX 操作的接口$.ajax()
$.get()
, $.post()
, $.getJSON()
等$.ajax()
的封装
$.ajax()
⭐⭐ 方法参数
1 | url |
⭐⭐ GET 请求
1 | $.ajax({ |
⭐⭐ POST 请求
1 | var postData = { |
$.get()
用于发起 GET 请求
1 | $.get('https://api.example.com/data', function(data) { |
$.post()
用于发起 POST 请求Content-Type
为 application/x-www-form-urlencoded
1 | $.post('https://api.example.com/post', {name: 'John Doe', age: 30}, function(data) { |
$.getJSON()
专门用于获取 JSON 数据的快捷方式
1 | $.getJSON('https://api.example.com/data', function(data) { |
跨域问题
跨域问题
当使用 AJAX 发起请求时
⭐⭐ CORS 工作原理
简单请求某些类型的请求被认为是 : 简单请求 “ ” 如 GET , POST 、 除特定 Content-Type 外 ( ) 这些请求直接发送到服务器 , 。
预检请求Preflight Request ( ) 对于非简单的请求 : 例如带有自定义头部的 POST 请求 ( ) 浏览器首先发送一个 OPTIONS 请求 , 称为预检请求 ( 以询问服务器是否允许实际请求 ) 。
响应头部检查服务器通过在 HTTP 响应中添加特定的 CORS 相关头部来告诉浏览器哪些源可以访问其资源 : 。
⭐⭐ CORS 相关响应头
Access-Control-Allow-Origin指定允许访问该资源的外域 URL : 可以设置为具体的域名 。 也可以用 * 表示允许所有域名 , 。
Access-Control-Allow-Methods指定允许的 HTTP 方法 : GET, POST 等 ( ) 。
Access-Control-Allow-Headers指定允许的自定义请求头部字段 : 。
Access-Control-Allow-Credentials指示是否允许发送 Cookie 或其他认证信息 : 值为 true 或 false 。 。
⭐⭐ 解决方案
1 | 1. 最直接的方式是让服务器支持 CORS |
扩展
字符实体
字符实体在HTML中用于表示保留字符或不可见字符等特殊字符<
和 >
标记HTML标签的开始和结束
字符实体通常有两种形式
- 命名实体
以 : &
开头接着是实体名称 , 最后以 , ;
结束。
示例: <
表示小于号<
- 数字实体
以 : &#
开头后面跟着字符的十进制Unicode编号 , 最后以 , ;
结束也可以使用 。 x
前缀后跟十六进制编号。
十进制示例: <
表示小于号<
十六进制示例: <
同样表示小于号<
文本相关
显示 | 描述 | 字符实体 |
---|---|---|
空格 | | |
" | 双引号 | " |
' | 单引号 | ' |
数学相关
显示 | 描述 | 字符实体 |
---|---|---|
× | 乘号 | × |
÷ | 除号 | ÷ |
< | 小于号 | < |
> | 大于号 | > |
& | 并 | & |
| | 或 | | |
符号相关
显示 | 描述 | 字符实体 |
---|---|---|
¢ | 分 | ¢ |
£ | 镑 | £ |
¥ | 人民币 | ¥ |
€ | 欧元 | € |
§ | 小节 | § |
© | 版权 | © |
™ | 商标 | ™ |
® | 注册商标 | ® |
字体图标
字体图标是一种使用Web字体来显示图标的现代技术
字体图标本质上是特殊的字符集
Font Awesome
一个非常流行的字体图标库
提供了大量的图标 , 并且易于集成 , 。
官网: https://fontawesome.dashgame.com
1 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"> |
Material Icons
来自Google的Material Design图标集合
。
官网: https://mui.com/material-ui/material-icons
1 | <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> |
Ionicons
由Ionic团队维护的一套高质量图标
。
官网: https://ionic.io/ionicons
1 | <script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script> |
Bootstrap
由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的
。
官网: https://www.bootcss.com
1 | <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"> |
Iconfont
Iconfont 是阿里巴巴推出的一个矢量图标库平台
官网: https://www.iconfont.cn
Axios JS 库
Axios 是一个基于 Promise 的网络请求库
主要特性
- 支持 Promise
Axios 基于 Promise API : 允许更简洁的异步代码编写 , 。 - 浏览器和 Node.js 兼容性
既可以在浏览器环境中使用 : 也可以在服务器端 , Node.js ( 使用 ) 。 - 拦截请求和响应
可以对请求或响应进行预处理或后处理 : 。 - 自动转换 JSON 数据
Axios 自动将数据从 JSON 转换为 JavaScript 对象 : 。 - 客户端支持防止 CSRF
XSRF ( 攻击 ) 通过设置适当的请求头来提供保护 : 。 - 取消请求
支持取消已经发出但未完成的请求 : 。 - 超时配置
可以通过设置指定请求的超时时间 : 。
基本使用
1 | <!-- 可以直接通过 CDN 引入 --> |
并发请求
1 | // 可以同时发起多个请求 |
全局配置
可以通过 axios.defaults
设置全局默认配置
1 | axios.defaults.baseURL = 'https://api.example.com'; |
配置选项
可以通过配置选项来自定义请求行为
1 | // url |
拦截器
Axios 支持请求和响应拦截器
⭐⭐ 添加请求拦截器
1 | axios.interceptors.request.use(config => { |
⭐⭐ 添加响应拦截器
1 | axios.interceptors.response.use(response => { |
取消请求
1 | const CancelToken = axios.CancelToken; |
错误处理
Axios 中的错误处理通常包括检查响应状态码以及捕获请求中的异常情况
1 | axios.get('/user/12345') |
学习资源
- 视频
HTML5+CSS3+移动web视频教程【 】 : https://www.bilibili.com/video/BV1kM4y127Li
JavaScript入门到精通【 】 : https://www.bilibili.com/video/BV1Y84y1L7Nn
前端框架Jquery从零到精通【 】 : https://www.bilibili.com/video/BV1ey4y1k73p
- 教程
- 菜鸟教程
: https://www.runoob.com
- W3school
: https://www.w3school.com.cn
- 菜鸟教程
- 文档
- MDN
: https://developer.mozilla.org/zh-CN/
- HTML
: https://developer.mozilla.org/zh-CN/docs/Web/HTML
- CSS
: https://developer.mozilla.org/zh-CN/docs/Web/CSS
- JavaScript
: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
- MDN
- 工具
- 对照表
: https://developer.mozilla.org/zh-CN/docs/Glossary/Entity
- 解码工具
: https://mothereff.in/html-entities
- 在线正则表达式测试
: https://tool.oschina.net/regex
- 对照表
- 插件
- 轮播图插件
: https://www.swiper.com.cn
- 实用工具库
: https://www.lodashjs.com
- 轮播图插件