Web 前端开发语言备忘录
HTML
Hyper Text Markup Language(超文本标记语言),文件名以 .html 为后缀,网站首页一般配置为 index.html
HTML 标签以 <标签名>内容</标签名> 的格式定义,没有内容的自闭合标签可以写成 <标签名 /> 或 <标签名>。天生自闭合的标签有 <br>换行,<hr>水平线,<input>输入框等
在 VS Code 新建文件,使用 !+Tab 快捷键自动生成文件内容
<!DOCTYPE html>表示文件是 HTML 5类型<html>标签为页面主构造
body页面元素
Document Object Model(DOM)
<header>页眉,<nav>导航栏<main>主内容,子内容<article>、<section>,侧边栏<aside><footer>页脚
块级元素(CSS 配置为 display: block)包括:标题 <h1> ~ <h6>,段落 <p>,表单 <form>,自定义元素 <div> 、<blockquote> 块引用、<address> 联系方式、列表<ul><ol>等
内联元素(CSS 配置为 display: inline)包括<span> 自定义元素,<img>图片、<a>超链接、<strong> 加粗、<em> 斜体、<q> 行内引用、 <cite> 引文作者、<sub> 下标、 <sup> 上标、 <abbr> 缩略词等
属性:提供有关某个元素的更多信息。例如
- 超链接
<a>的属性中,href配置文件地址或文档中的DOM 元素 id或是mailto:的详细信息,title属性配置鼠标悬停提示,download属性配置默认文件名,target="_blank"在新窗口中打开。配置rel="noopener noreferrer"增强安全性 - 图片
<img>的属性中,src="文件地址"配置外部地址,alt="显示文本"配置文件显示失败时的文本,另外通过width 和 height属性配置图片尺寸
列表:<ul> 无序列表,<ol> 有序列表,<li> 各项目;<dl> 描述性列表
表格 <table>:
<caption>表格描述<thead>表头,<tbody>分项,<tfoot>表尾<tr>各行<th>用于表内标题,<td>用于表内各项colspan属性可配置横向跨列单元格,rowspan属性可配置纵向跨行单元格
- 通过给
<th>配置 scope 属性方便辅助阅读 - 通过给
<th>配置 id 属性,<td>和<th>用 headers 属性完成对上级 id 的引用
表单<form>: action 属性为提交的链接,method 属性配置 HTTP 请求方法
- 对于行级元素,可以通过
<div>标签进行分割 - 常用元素
<label>标题、<textarea>多行文本、<select>下拉框<option>下拉框的选项等 - 下面的元素,可以通过配置
disabled无法选中:<input>输入框或按钮:type属性配置类型,name和value属性是表格提交时的键值对,id属性绑定<label> 元素的 for属性;required属性检查输入有效性,checked属性初始选中,<button>元素的type属性配置按钮类型<fieldset>将部分元素合并到一组,内置<legend>作为标题
代码块:<code> 标记计算机通用代码,<pre>:用于保留空白字符,<var> 标记具体变量名, <kbd> 标记键盘输入, <samp> 标记计算机程序的输出。
<figure> 元素可以包裹一些画面布局元素,并通过 <figcaption> 添加文字说明
CSS
Cascading Style Sheets(层叠式样式表)是一种样式语言,用于描述页面元素的呈现方式。可以直接嵌入 HTML 文档定制网页的外观和布局,也可以作为外部样式表单独存在。
在页面中应用的方法有:
- 在
<head>元素内插入<link rel="stylesheet" href="CSS文件目录位置">作为外部链接 - 在
<head>元素内插入<style>元素,在其中编写 CSS 样式 - 在
<body>中需要应用样式的元素配置style或class属性
CSS 规则包含由属性和值组成的声明。值可以是数字、长度、百分比、颜色、图像、位置、字符串和标识符以及函数。父元素通过 writing-mode 属性定义子元素的块级容器堆叠方向,以及行内元素排布方向
选择器 SELECTOR
| 元素选择器 | 类选择器 | ID选择器 | 标签选择器 | |
|---|---|---|---|---|
| HTML标签属性 | 无 | 加入属性 class="类名" |
加入属性 id="id名" |
加入属性 attr |
| CSS定义语法 | 元素名 {样式} |
.类名 {样式} |
#id名 {样式} |
元素名[attr] {样式} |
- 在实践中,类选择器是最常见的。可以将不同标签绑定相同类名,方便统一配置参数。
- 由于 id 的级别最高,具有唯一性,在 DOM 索引出现多个同 id 元素时会报错。
- 选择器列表:使用相同样式的选择器通过
,隔开 - 关系选择器:后代选择器(空格
` )跨级匹配所有后代;子代选择器(>)只匹配直接子代;邻接兄弟选择器(+)同级元素下一个元素;通用兄弟选择器(~`)跨同级元素匹配 - 伪类选择器(Pseudo-classes)的语法为
元素名:状态名,状态包括 :link未访问,visited已访问,hover鼠标悬停,active点击等;或通过函数定义,如div:first-child表示第一个子元素div,p:nth-of-type(1)选择器选择的是同一父元素下的第1个p元素。
颜色 COLOR
颜色
color:可通过①英文名、②函数rgb(red, green, blue)或 hsl、③定义 Hex(#RGB的16进制表示)完成配置背景颜色 background-color,边框颜色 border-color
定义
rgba(red, green, blue, alpha)通过透明度通道调整当前元素透明度透明度属性
opacity取值范围也是 0~1,用于改变整个元素及其所有子元素的透明度,不能精确调整文本或背景样式
文本 TEXT
- 字体(名称):通过
font-family定义,可同时定义多种,优先级从左到右 - 显示大小(数值px):通过定义
font-size调整字号,line-hight定义行高 - 显示效果:
font-weight粗细(数值),font-style显示效果(italic斜体),text-decoration装饰(underline下划线,overline上划线,line-through删除线) text-align文字对齐,text-shadow定义文字阴影
盒子模型 BOX MODEL
在浏览器“开发者工具”→“元素 Element”→ “计算样式 Computed”中,可以查看网页盒子模型。
从外到内分别是 margin 外边距、border 边框、padding 内边距、content 内容;
前三者有
top上、right右、button下、left左之分盒子模型的尺寸不计入 margin 属性,该属性仅影响外部空间,可以配置负值(表示超出父元素的上边界):
- 标准盒子模型的空间尺寸为
内容+内边距+边框 - 替代盒子模型(配置
box-sizing: border-box)中,width和height属性定义的是元素的可视总尺寸,包括内容、内边距和边框
- 标准盒子模型的空间尺寸为
border 可配置
width style color属性content 有
width和height属性,<span>元素可额外配置margin,border和padding属性
例如:
1 | <div class="container"> |
1 | .container { |
- 当值只有两个时,第一个表示上下,第二个表示左右
- 边框除了宽度,还需要定义类型
- 本地的尺寸通过
width 和 height定义
布局 DISPLAY
| 普通布局 | 是否换行 | 可设置宽高 | 适合用途 |
|---|---|---|---|
block 块级 |
✅换行 | ✅可以 | 页面结构布局 |
inline 内联 |
❌不换行 | width✅height❌ | 文本内嵌样式 |
inline-block 内联块级 |
❌不换行 | ✅可以 | 导航栏、图片等元素 |
none 隐藏 |
❌不显示 | ❌不可见 | 控制元素显隐 |
垂直方向同级并列元素的外边距折叠(Margin Collapsing)
- 两个正外边距相遇时,结合成一个外边距,其值为两者中较大的那个值
- 两个负外边距相遇时,上下元素的重叠程度是两者中绝对值最大的那个值
- 外边距一正一负时,间距为正值减去负值的绝对值
多列布局
浮动布局:向子元素添加 float 属性,使其固定在父元素的相对位置上,同时配置 margin-方向 属性将周围环绕的元素推开。
- 浮动元素处于正常文档流之外,会在块级元素上方遮挡、并被内联元素环绕
- 阻止其他元素环绕,可以对周围元素配置
clear属性,则对应方向上不能有浮动元素 - 浮动元素会超出父元素的边界,通过给父元素配置
display: flow-root解决
均匀排布:向块级元素、表格(非单元格)、列表元素等添加 column-count 或 column-width 属性,可实现均匀多列布局(无法单独修改其中某列的显示效果)。容器通过 column-gap.属性调整列间距,并通过 column-rule.属性修改间距样式;容器子元素配置 column-span:all 可以让该元素跨越所有列,配置 break-inside:avoid 可以避免内容折断
弹性布局 FLEX
水平/垂直弹性排布:给父容器配置弹性布局 display: flex,子元素都会成为弹性项目
- 主轴(排列方向)通过
flex-direction属性定义(row、row-reverse、column、column-reverse);通过flex-wrap: wrap属性防止子元素单行排列造成的内容溢出;上述两个属性合并配置在flex-flow属性中。 - 通过父容器
gap属性调节子元素间隙。也可以调整弹性项目对齐方式:justify-content控制主轴方向,align-items控制交叉轴方向。可以给某个弹性项目配置align-self属性单独控制normal(默认):在主轴方向相当于flex-start开始处;在交叉轴方向相当于stretch,与尺寸最大的子元素对齐end或flex-end在末尾对齐center居中对齐space-between在弹性项目间均匀分布空白空间(两侧贴边)space-around在弹性项目周围分布空白空间
- 弹性项目的
flex属性可一次性配置三个变量:flex-grow无单位,控制占用空间比例;flex-shrink无单位,控制溢出父容器时的缩减量;flex-basis有单位,最小空间尺寸 - 弹性项目的
order属性可以调整显示顺序,较大者靠后,其余按源顺序排列
网格布局 GRID
以行(row)、列(column)、沟槽(gutter)的形式划分容器
在父容器配置 display: grid 后,子元素都会成为网格项目。
- 显式网格:通过
grid-template-columns和grid-template-rows指定尺寸。 - 隐式网格:显式网格放不下的元素,默认参数是
auto(根据放入的内容自动调整)。可通过grid-auto-rows和grid-auto-columns属性定义 fr表示网格容器中可用空间的一份。可以使用repeat(数量, 单位)函数定义布局,minmax(最小值, 最大值)函数定义弹性尺寸
沟槽宽度可以通过 column-gap 和 row-gap 属性进行配置,二者可合并配置在 gap 属性中。可以是任意单位或比例,但不能是 fr 单位。
子网格:子元素配置 display: grid 网格布局,可以将 grid-template-columns 和 grid-template-rows 属性配置为 subgrid 继承网格尺寸,gap: inherit 继承沟槽宽度
1 | /* 横向通过auto-fill自动配置重复次数,纵向配置最小高度*/ |
网格中的元素放置
- 基于线的放置:根据文档的 书写模式 对分隔线进行编号,根据垂直线
grid-column-start和grid-column-end(缩写为grid-column)、水平线grid-row-start和grid-row-end(缩写为grid-row)放置元素。对每个元素分别配置开始与结束的线序号,使用/符号分开,负值表示逆向计数。这种方式仅限于显式定义的网格范围,不会考虑由于项目溢出而自动生成的隐式网格线。 - 使用
grid-template-areas定义布局元素的名称,为子元素添加grid-area属性绑定该名称。要求需要填满网格的每个格子,跨格元素重复书写名字,使用.符号让一个格子留空,所有名字只能出现在一个连续的矩形区域。
定位 POSITION
CSS 页面布局通过默认位置、周围元素、父容器或主窗口,控制元素在页面中的精确位置
| position 属性 | 是否脱离文档流 | 定位参考对象 | 会不会滚动跟着动 |
|---|---|---|---|
static(默认) |
❌ 否 | 无 | ✅ 会 |
relative(相对定位) |
❌ 否 | 自己原始位置 | ✅ 会 |
absolute(绝对定位) |
✅ 是 | 最近的已定位祖先元素(position不为static的祖先元素) | ✅ 会 |
fixed(固定定位) |
✅ 是 | 浏览器窗口(viewport) | ❌ 不会 |
sticky(粘性定位) |
❌ 粘住前✅ 粘住后 | 父容器(限制粘性定位范围)、视口(决定触发效果的时机) | ❌ 不会 |
- 除默认的静态定位元素外,通过
top,bottom,left和right属性定义偏移量。 - 默认情况下后定义的元素会覆盖先定义的元素,此时可以通过配置
z-index属性调整优先级 - 粘性定位可以用于创建滚动索引。用于导航栏时,为防止遮挡,需要给下方元素配置
scroll-margin-top - 绝对定位可用于创建选项卡消息框等
响应式设计
@rules:在特定情况下生效。例如 @media 的媒体查询,可以在特定的断点处改变显示样式
JavaScript
作为编程语言,用于编写页面逻辑、调用接口、连接数据库
Node 是包含了 Chrome 浏览器 V8 引擎的 C++ 程序,可作为 JavaScript 运行时环境,将依赖下载到项目目录 node_modules 文件夹并通过 package.json 配置
在 HTML 文件的 <head> 或 <body> 标签下均可添加 <script> 标签用于编写 JavaScript,建议放在 <body> 标签末尾。优点是避免加载页面时的解析代码影响显示效果,在页面组件加载完成后再进行显示效果渲染。
关注点分离:将 JavaScript 文件写在 .js 文件中,在 <script> 标签中添加 src 属性
使用场景:通过 Web Storage API 在本地保留数据,利用 DOM API 操作页面元素
变量
| 特性 | var |
let |
const |
|---|---|---|---|
| 作用域 | 全局作用域 | 局部作用域 | 局部作用域 |
| 可重复声明 | ✅ 允许 | ❌ 不允许 | ❌ 不允许 |
| 可修改值 | ✅ 可以 | ✅ 可以 | 🚫 不可以重新赋值(但数组或对象内容可变) |
| 存在变量提升 | ✅ 有提升(初始化为 undefined) |
⚠️ 有暂时性死区 | ⚠️ 有暂时性死区 |
数据类型
| 数据类型 | 示例 | 描述 |
|---|---|---|
number |
42, 3.14, NaN, Infinity |
所有数字(整数、浮点数、NaN) |
string |
"Hello", '世界' |
字符串,文本数据 |
boolean |
true, false |
布尔值 |
undefined |
undefined |
未赋值的变量默认值 |
null |
null |
空值,表示“无” |
symbol |
Symbol('id') |
唯一值,用于对象属性的唯一键 |
bigint |
123n |
大整数(超过 2^53 - 1) |
- 基本数据类型使用
typeof方法,判断数组用:Array.isArray(数组名)方法 typeof null === "object"是历史遗留问题(指针0x00为零),不是对象!- 索引编号从 0 开始
字符串
- 可以用单引号
'、双引号"或反引号 ` 进行定义 - 模板字符串使用 ` 定义边界,通过
${变量名}绑定具体数据 - 通过
length属性获取长度 toUpperCase()和toLowerCase()方法可转换大小写substring(起始编号,终止编号 +1)方法分割字符串,split(分割点)转化为数组
集合
- 数组构造函数
const numbers = new Array(1, 2, 3, 4, 5);,也可以直接定义const listExample = ["apples", 10, true];。使用 TypeScript 需显式声明数据类型 - 数组通过
变量名[索引编号]获取元素,通过push(元素内容)在末尾添加元素,通过unshift(元素内容)在头部添加元素, 通过pop()方法删除末尾元素。通过数组名.indexOf(元素内容)方法得到索引编号 Set(元素1, 元素2)集合,Map([[元素1键, 元素1值], [元素2键, 元素2值]]),可创建WeakMap进行垃圾回收
对象
- JavaScript 对象是键值对组合,声明在
{元素1键: 元素1值, 元素2键: 元素2值}结构体中 - 结构体只有数据,对象有方法,类有继承
- 通过
对象名.属性名获取单个元素的值,也可用于赋值 - 通过
const {元素1名, 元素2名} = 对象名同时提取多个元素的值 - JSON 是一种数据格式,用于数据传输,结构类似于对象数组,键都是双引号。可使用
JSON.stringify(数组名)方法将对象数组转成 JSON
| 特性 | Map | 对象(Object) | 数组(Array) |
|---|---|---|---|
| 键类型 | 任意类型(对象、函数等) | 仅字符串或Symbol | 数字索引 |
| 顺序保证 | 插入顺序 | ES6后字符串键有顺序(但不推荐依赖) | 严格索引顺序 |
| 大小获取 | size属性直接获取 | 需要手动计算(Object.keys().length) | length属性直接获取 |
| 性能 | 频繁增删操作更高效 | 频繁增删性能较差 | 中间插入/删除效率低 |
| 迭代 | 直接可迭代(forEach等) | 需要Object.keys等外部方法转换 | 直接可迭代 |
| 默认属性 | 纯净无原型属性 | 有原型继承的属性(toString等) | 有数组方法(push等) |
条件语句
==表示值相同,类型可以不同,===表示值和类型都相同- 条件语句:
if/else,也可使用 条件?运算符 或 逻辑&&语法。 switch语句的case需使用break,否则穿透式执行,default执行默认条件- 循环语句
for/while,另有:for(let 迭代器 of 对象名)获取可迭代对象的值,for(let 变量名 in 数组名)用于遍历(不推荐使用)
特性方法
bind()方法第一个参数是thisArg,用于绑定函数的this(可以为null)。之后的参数是预设的参数,- 动态查找链:调用
对象名.__proto__通过原型链访问该对象构造函数的原型(现代JavaScript建议使用Object.getPrototypeOf()替代__proto__) - 回调函数:传递给高阶函数作为参数的函数,由接收回调的高阶函数决定调用时机,用于实现异步操作或事件处理。
- ES6 的 Promise(生产者) 通过链式调用(消费者)
.then(执行内容).catch(异常处理)实现异步处理 - 在 ES8 中有
async/await语法糖 - 当执行到
setTimeout(回调函数, 指定时间)时,会立即设置一个定时器,执行完后续代码后将回调函数加入任务队列并执行
- ES6 的 Promise(生产者) 通过链式调用(消费者)
export命名导出,export default默认导出,在调用时通过import {方法名1, 方法名2} from '文件目录'引入- 操作DOM:
window.document.querySelector('元素名'),操作页面布局document.body.style.backgroundColor - ES6 引入的简写方式
- 对象属性简写:对于已声明的变量,当属性名和变量名相同时,可以省略属性值和冒号。包括属性值简写(传递参数时直接调用参数名,不需要
参数名: 参数值)、方法简写(函数名: function() {}简化为函数名() {}) - 计算属性名:在对象字面量中使用
[expression]作为属性名时,JavaScript 会先计算括号内表达式的值,然后将计算结果转换为字符串(或 Symbol)作为最终的属性名
- 对象属性简写:对于已声明的变量,当属性名和变量名相同时,可以省略属性值和冒号。包括属性值简写(传递参数时直接调用参数名,不需要
参考链接:


