跳到主要内容
前端开发基础:HTML、CSS 与 JavaScript 核心入门 | 极客日志
HTML / CSS 大前端
前端开发基础:HTML、CSS 与 JavaScript 核心入门 前端开发核心三件套详解,涵盖 HTML 结构标记、CSS 样式布局及 JavaScript 交互逻辑。重点讲解 HTML 常用标签、语义化布局、表单处理及 HTTP 请求基础;深入解析 CSS 选择器、盒模型、Flex 弹性布局及文本样式。适合初学者快速建立前端知识体系,掌握网页构建的基本原理与实战技巧。
禅心 发布于 2026/4/9 更新于 2026/7/20 35 浏览前言
前端开发的概述
前端开发(Front-end Development)是指创建网站或 Web 应用程序用户界面(UI)及用户体验(UX)部分的过程,涉及用户直接与之交互的所有内容。
通常我们说的前端就是 WEB 前端,也就是写网页的。
核心职责
界面实现 :将设计稿转化为可交互的网页
用户体验优化 :确保界面响应迅速、操作流畅
浏览器兼容性 :保证在不同浏览器和设备上表现一致
性能优化 :提高页面加载速度和运行效率
与后端协作 :通过 API 获取和提交数据
核心技术栈
基础三件套
HTML:页面结构和内容
CSS:样式和布局
JavaScript:交互逻辑和行为
现代技术生态
框架/库:Vue、React、Angular 等
CSS 预处理器:Sass、Less
构建工具:Vite、Webpack、Parcel
包管理器:npm、yarn、pnpm
类型系统:TypeScript
测试工具:Jest、Cypress、Testing Library
简单概括三件套的作用与关系:HTML 是网页的元素骨架,CSS 是网页的装潢皮肤,JavaScript 是网页的大脑。三者共同构建完整的网页。
开发环境的搭建
推荐使用以下工具进行开发:
浏览器:谷歌 Chrome / Edge(或其他主流浏览器)
编辑器:VS Code
HTML 基础
HTML 简介
HTML(HyperText Markup Language,超文本标记语言)是用于创建网页的标准标记语言。写好的 HTML 代码文件,拖拽到浏览器上,就可以让它解析并渲染出相应的内容!
你可以理解为,如果你想写一个页面展示出来,那么里面的各种展示元素就是用 HTML 代码编写的。
HTML 特点
它并不是严格意义上的编程语言,而是一种标记语言,但对我们来说也是得写代码的~
它使用一种叫做标签的东西来描述网页上的内容,HTML 代码就是由标签组成的
它的文件扩展名为 .html 或 .htm
HTML 是由浏览器解析并渲染成可视化网页的(也就是说浏览器认识这个 HTML,然后能解析并渲染出东西来)
<!DOCTYPE html >
<html lang = >
我的第一个网页
Hello HTML!
"zh-CN"
<head >
<meta charset ="UTF-8" >
<title >
</title >
</head >
<body >
</body >
</html >
双标签格式 :<标签名 属性名="属性值">双标签内容</标签名>
单标签格式 :<标签名 属性名="属性值"/>
文档类型声明 :<!DOCTYPE html> 声明文档类型为 HTML5
根元素 :<html> 是文档的根元素,包含整个 HTML 文档,浏览器解析的时候,会直接解析 html 标签内部的文本内容!
头部区域 :<head> 包含元数据(网页重要信息设置)、网页的标题、引入文件(引入一些便携的代码文件,辅助开发)等
主体区域 :<body> 包含网页的可见内容,这才是以后总打交道的区域~
标签的属性,是为了让标签实现具体功能效果的~ 而具体怎么去实现,实现怎样的效果,就需要开发者按照需求去定义了,当然,只要这个标签支持就问题~
最常用标签与语义化布局标签
最常用标签 我们先直接来介绍很多常用的标签,分别是大标题标签,文字段落标签,地址链接标签,换行标签以及图片标签。
<h1 > 欢迎来到我的网站</h1 >
<p > 这是一个段落,<strong > 加粗文字</strong > 和 <em > 斜体文字</em > 示例。</p >
<a href ="https://www.example.com" target ="_blank" > 访问示例网站</a >
<br >
<img src ="logo.png" alt ="网站 Logo" width ="200" >
布局类标签(语义化标签) 顾名思义就是这些标签的名字,就代表了它们应该在网页的哪个部分出现!但这些标签又本身没有这个实际效果...
<header > , <nav > , <main > , <section > , <footer >
header 就是页头区域
nav 就是网页导航栏区域
main 就是主体区域
section 指的是一个段落区域
footer 是页尾区域(这个页尾区域,基本上每个正规的网页都应该是差不多固定长那样的,啥样呢?我随便打开个网站哈,大家看到了吧,就是备案的信息,几乎都在页尾区域的!这个时候肯定有人好奇,欸?敲上了这些标签,但它们并没有按照你说的位置去渲染在网页上啊,这是怎么回事?)
答:这个就是比较有意思的地方了,规定是 CSS 做这种位置的布局,而不能用 HTML 去做这部分的功能,对,这是一个约定、规定。也就导致了,HTML 这几个布局类标签,失去了布局的功能,仅存的只有语义化本身了,所以也有很多人将他们称之为语义化标签或语义化布局标签!
链接与图片 <a href ="https://www.google.com" > Google</a >
<a href ="about.html" > 关于我们</a >
<a href ="https://www.example.com" target ="_blank" > 在新标签页打开</a >
<a href ="https://example.com" target ="_blank" rel ="noopener" > 这个 rel = noopener 就是安全的新窗口链接</a >
<a href ="#section1" > 锚点</a >
<h2 id ="section1" > 第一部分内容</h2 >
<img src ="图片路径" alt ="图片显示不出来的替代文本(图片描述文本)" >
<img src ="images/photo.jpg" alt ="一张风景照片" >
<img src ="banner.png" alt ="网站首页横幅" width ="800" height ="200" loading ="lazy" >
<a href ="https://www.example.com" > <img src ="logo.png" alt ="Example 公司 Logo" > </a >
列表
<ul >
<li > 列表项 1</li >
<li > 列表项 2</li >
<li > 列表项 3</li >
</ul >
<ol >
<li > 第一步</li >
<li > 第二步</li >
<li > 第三步</li >
</ol >
<ul >
<li > 水果
<ul >
<li > 苹果</li >
<li > 香蕉</li >
</ul >
</li >
<li > 蔬菜
<ul >
<li > 胡萝卜</li >
<li > 菠菜</li >
</ul >
</li >
</ul >
定义列表 <dl >
<dt > 术语名称</dt >
<dd > 术语的定义或描述</dd >
<dt > 另一个术语</dt >
<dd > 它的解释</dd >
</dl >
表格 <table >
<caption > 我是表格的标题</caption >
<thead >
<tr >
<th > 商品</th >
<th > 价格</th >
<th > 库存</th >
</tr >
</thead >
<tbody >
<tr >
<td > 苹果</td >
<td > 5 元/斤</td >
<td > 100</td >
</tr >
<tr >
<td > 香蕉</td >
<td > 3 元/斤</td >
<td > 200</td >
</tr >
</tbody >
<tfoot >
<tr >
<td colspan ="2" > 总计</td >
<td > 300 件</td >
</tr >
</tfoot >
</table >
横向合并:用 colspan="n"(跨 n 列)
纵向合并:用 rowspan="n"(跨 n 行)
<table border ="1" >
<tr >
<th > 姓名</th >
<th colspan ="2" > 联系方式</th >
</tr >
<tr >
<td > 王五</td >
<td > 电话</td >
<td > 邮箱</td >
</tr >
<tr >
<td rowspan ="2" > 赵六</td >
<td > 138****1234</td >
<td > [email protected] </td >
</tr >
<tr >
<td > 139****5678</td >
<td > [email protected] </td >
</tr >
</table >
<!DOCTYPE html >
<html lang ="zh" >
<head >
<meta charset ="UTF-8" >
<title > 学生成绩表</title >
<style >
table { width : 100% ; border-collapse : collapse; margin : 20px 0 ; }
th , td { border : 1px solid #999 ; padding : 10px ; text-align : center; }
th { background-color : #e0e0e0 ; }
caption { font-size : 1.2em ; font-weight : bold; margin-bottom : 10px ; }
</style >
</head >
<body >
<table >
<caption > 高一(3)班期中考试成绩</caption >
<thead >
<tr >
<th > 姓名</th >
<th > 语文</th >
<th > 数学</th >
<th > 英语</th >
</tr >
</thead >
<tbody >
<tr >
<td > 小明</td >
<td > 85</td >
<td > 92</td >
<td > 88</td >
</tr >
<tr >
<td > 小红</td >
<td > 90</td >
<td > 87</td >
<td > 93</td >
</tr >
</tbody >
</table >
</body >
</html >
表单 HTML 表单(Form)是网页中用于收集用户输入用的,属于核心的构成部分。比如登录、注册、搜索、留言、下单等交互功能都需要它来配合完成。
此外对于表单这一块内容,我们还需要先单独为大家讲解下何为请求。以及 Post/Get 这两种请求方式的区别。(PS:虽然我们并没有正儿八经的后端与 JS 的学习,但也可以用 HTML 先来观察请求发送数据的效果。这样也有助于我们后续的学习。)
基本的网络请求相关知识
网络请求 :是指 客户端(如浏览器、手机 App、程序等)向 服务器 发送的一种 数据交互行为,目的是获取资源、提交数据或执行某种操作。它是现代互联网应用实现数据通信的基础 。
最基本、常见的请求:在浏览器中打开一个网页(其实就是浏览器向服务器请求 HTML 文件 ~)
URL :统一资源定位符。在现代互联网中,通常用作网络请求的目标地址(知道地址,才能知道要把数据发送到哪里)
目前,我们说的网络请求,通常指的都是 HTTP 协议的请求。
就像两个人聊天要遵守语言语法一样,浏览器和服务器通信也要遵守 HTTP 这套'网络语言'。
HTTP 请求报文
方法(Method):GET(获取)、POST(提交)等
路径(Path):/ 表示首页
协议版本:HTTP/1.1
请求头(Headers):附加信息,比如浏览器类型、语言偏好
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Accept: text /html
HTTP 响应报文
状态码:200 表示成功,404 表示页面没找到
响应头:说明内容类型(HTML、图片、JSON 等)
响应体:真正的数据(网页、图片、API 返回的数据)
HTTPS:你把要求写在加密信封里,只有厨房能打开——别人偷看也看不懂
✅ 所以登录、支付等敏感操作,必须用 HTTPS(地址栏有 🔒 图标)
何为字符编码 我们都知道,计算机其实只懂 0 和 1(也就是二进制)。包括各种各样的文件,本质也是二进制。所以计算机是不能直接理解'你好'、'Hello'或者一个表情 😊。
所以,这就很烦,人类只能发明一种方法:给每个 字符 分配一个 数字编号,然后把 数字 转成 二进制,这样计算机就能存储和传输文字了。
这个'字符 ↔ 数字'的对应规则,就叫做 字符编码(Character Encoding)。
Unicode :天下一统,它是一个超级大表,给世界上几乎所有的字符都分配了一个唯一的编号(叫'码点')。但这玩意可不是数字啊,所以就有了 UTF-8 把 Unicode 编号转成字节序列。
兼容 ASCII:所有 ASCII 字符(0–127)在 UTF-8 中和原来一模一样(1 个字节)。
✅ 节省空间:英文用 1 字节,中文一般用 3 字节,生僻字或 emoji 用 4 字节。
✅ 无乱码风险:只要大家都用 UTF-8,文字就能正确显示。
✅ 互联网主流:现在 98% 以上的网页都用 UTF-8!
所以,unicode 是一种编码的标准,而 utf-8 是编码方式,是真正的做事的东西。
Get 与 Post 请求方式 网络请求,也是要分请求方式来进行的。目前主流的,还是 Get 与 Post,这俩种方式,在进行数据交互时,各有特色。
get 方式:比较裸露,会把发送的数据直接拼到 URL 上。以 https://api.example.com 为例
post 方式:数据藏在 HTTP 请求的'身体(请求体)'里,对用户不可见,也更安全(相对而言)。
正文 <form action ="/submit" method ="post" >
<input type ="text" name ="username" placeholder ="用户名" >
<input type ="password" name ="password" placeholder ="密码" >
<input type ="email" placeholder ="邮箱" >
<input type ="number" name ="age" min ="0" max ="120" >
<input type ="radio" name ="gender" value ="male" > 男
<input type ="radio" name ="gender" value ="female" > 女
<input type ="checkbox" name ="hobby" value ="reading" > 阅读
<input type ="checkbox" name ="hobby" value ="music" > 音乐
<select name ="city" >
<option value ="" > 请选择城市</option >
<option value ="bj" > 北京</option >
<option value ="sh" > 上海</option >
</select >
<textarea name ="message" rows ="4" cols ="50" placeholder ="请输入留言..." > </textarea >
<input type ="file" name ="avatar" accept ="image/*" >
<input type ="submit" value ="提交表单" >
<button type ="submit" > 提交</button >
</form >
<input type ="date" >
<input type ="range" min ="0" max ="100" >
<input type ="color" name ="theme_color" >
<input type ="url" >
<input type ="search" >
<form action ="/register" method ="post" >
<label > 用户名:<input type ="text" name ="username" required > </label > <br >
<label > 邮箱:<input type ="email" name ="email" required > </label > <br >
<label > 密码:<input type ="password" name ="password" minlength ="6" required > </label > <br >
<label > 性别: <input type ="radio" name ="gender" value ="m" > 男 <input type ="radio" name ="gender" value ="f" > 女 </label > <br >
<label > 兴趣: <input type ="checkbox" name ="hobbies" value ="sports" > 运动 <input type ="checkbox" name ="hobbies" value ="music" > 音乐 </label > <br >
<label > 头像:<input type ="file" name ="avatar" accept ="image/*" > </label > <br >
<button type ="submit" > 注册</button >
</form >
语义化标签 <header > 页眉</header >
<nav > 导航</nav >
<section > 区域</section >
<article > 文章</article >
<aside > 侧边栏</aside >
<footer > 页脚</footer >
多媒体标签 <video src ="movie.mp4" controls > </video >
<audio src ="music.mp3" controls > </audio >
Iframe 嵌入 <iframe src ="URL" width ="宽度" height ="高度" > </iframe >
<iframe src ="https://example.com" width ="800" height ="600" > </iframe >
<iframe src ="local-page.html" style ="width:100%;height:400px" > </iframe >
<iframe width ="560" height ="315" src ="https://www.youtube.com/embed/视频 ID" frameborder ="0" allowfullscreen > </iframe >
<iframe src ="https://maps.google.com/maps?q=地址" width ="600" height ="450" > </iframe >
<iframe srcdoc ="<h1>直接嵌入的内容</h1><p>这段 HTML 代码会被直接渲染</p>" width ="300" height ="150" > </iframe >
<iframe src ="..." sandbox ="allow-scripts allow-forms" > </iframe >
<iframe src ="doc.pdf" type ="application/pdf" width ="100%" height ="600px" > </iframe >
allow-scripts - 允许执行脚本
allow-forms - 允许提交表单
allow-same-origin - 允许同源访问
allow-popups - 允许弹出窗口
CSS 样式与布局
CSS 语法与规则 在学习 HTML 的时候,我们就提到过。CSS 是专门装潢的,给网页内容装潢的。也就是给 HTML 标签,这些元素装潢的。比如对文字进行大小、颜色控制,设置背景图片,改变某些元素的位置,设计元素们的布局等。
语法结构 CSS 语法结构由 选择器(Selector) 和 声明块(Declaration Block) 组成:
大概意思是说,我们必须得通过一些标识符,来确定某个页面上的元素,然后对其进行装潢工作。
选择器 {
属性 1 : 值 1 ;
属性 2 : 值 2 ;
}
现在,我来给大家介绍两个常用于文本的修饰属性,然后直接用标签名来作为选择器。
h1 {
color : red;
font-size : 24px ;
}
本人在这里,再给大家介绍一些常用的单位:px、%、vw、vh
CSS 使用规则
行内样式(内联样式优先级最大) :每个标签都可以在 style 属性里面,写它的 CSS 声明。
<p style ="color:red;" > 我是一个段落</p >
内部样式(优先级仅次于行内样式) :css 样式代码,写到 head 标签内的 style 标签里。
<!DOCTYPE html >
<html >
<head >
<meta charset ="utf-8" >
<title > 第一个网页</title >
<style >
p { color : blueviolet; font-size : 15px ; }
h2 { color : coral; }
</style >
</head >
<body >
<h1 > 我是 h1 标题</h1 >
<h2 > 我是 h2 标题</h2 >
<p style ="color: red; font-size: 30px;" > 我是一个段落</p >
<p > 我是第二个段落</p >
</body >
</html >
外联样式(与内联优先级一致,看谁后写的,就会覆盖前面) :从外部 css 文件,引入进来的。
p {
color : darkorange !important ;
font-size : 75px ;
}
<!DOCTYPE html >
<html >
<head >
<meta charset ="utf-8" >
<title > 第一个网页</title >
<style > p {color : blueviolet;font-size : 15px ;}h2 {color :coral;}</style >
<link rel ="stylesheet" href ="./demo.css" >
</head >
<body >
<h1 > 我是 h1 标题</h1 >
<h2 > 我是 h2 标题</h2 >
<p style ="color: red; font-size: 30px;" > 我是一个段落</p >
<p > 我是第二个段落</p >
</body >
</html >
CSS 选择器
基本选择器
元素选择器 :选择器就是标签名,然后修饰这个标签名,那么只要是这个标签的,就都会有这个装潢效果。
类选择器 :一般,强调一组,我们才会使用类选择器。但随着互联网发展,类选择器,无论你强调啥,几乎都用类选择器。
ID 选择器 :强调唯一性,只有是这个 ID 的元素,才会生效装潢。
通配符选择器 :最常用的就是 *,一般都是用在 网页初始化样式上。目前了解即可。
<!DOCTYPE html >
<html >
<head >
<meta charset ="utf-8" >
<title > 第一个网页</title >
<style >
p { color : blueviolet; font-size : 15px ; }
#PID { color : red; }
.ppap { color : green; }
</style >
</head >
<body >
<p id ="PID" class ="ppap" > 我有 id、class</p >
</body >
</html >
组合选择器 div p { color : blue; }
div > p { font-size : 18px ; }
h1 + p { margin-top : 0 ; }
常用伪类与伪元素选择器 伪类和伪元素是 CSS 中用于选择元素的特殊状态或特定部分的机制,它们不是直接通过 HTML 标签、类或 ID 选择的,而是由 CSS 动态生成的。
打个比方:某个元素鼠标经过的状态,我需要对这个元素进行装潢。那么你就得用 伪类选择器 选择器:hover。后面的 :hover 就是状态。
button :hover { background : #555 ; }
input :focus { border : 2px solid blue; }
tr :nth-child (odd) { background : #f2f2f2 ; }
button :not (.disabled ) { cursor : pointer; }
input :disabled { opacity : 0.5 ; }
input :invalid { border-color : red; }
.tooltip ::after { content :"提示文字" ; display : none; }
.tooltip :hover ::after { display : block; }
p ::first-letter { font-size : 24px ; }
::selection { background : #ffcc00 ; }
还有一个选择器,叫做属性选择器(相信大家在进行完前面选择器学习后。是可以查资料,自行去了解学习的。所以,由于本人在实际开发中,用到的不多,也就不再做过多的讲述 ~)
PS:其实在真实的项目开发中,我们可以边去查资料,边去开发。没有谁是刻意去背这些东西的。犯不上 ~
文本与字体样式
字体样式 p {
font-family : "Arial" , "Helvetica" , sans-serif;
font-size : 24px ;
font-weight : bold;
font-style : oblique;
*/
line-height : 1.5 ;
font : italic bold 16px /1.5 "Times New Roman" , serif;
}
文本样式 p {
color : #336699 ;
text-align : center;
text-decoration : none;
text-decoration-color : red;
text-decoration-style : solid;
*/
text-indent : 2em ;
letter-spacing : 2px ;
word-spacing : 0.5em ;
white-space : pre;
text-shadow : 2px 2px 4px rgba (0 ,0 ,0 ,0.5 );
}
.ellipsis {
white-space : nowrap;
overflow : hidden;
text-overflow : ellipsis;
width : 200px ;
}
.multi-line-ellipsis {
display : -webkit-box;
-webkit-box-orient : vertical;
-webkit-line -clamp: 3 ;
overflow : hidden;
text-overflow : ellipsis;
}
盒模型概念 盒模型概念:其实就是 CSS 的'俄罗斯套娃',当然,你必须得知道 双标签都可以当作一个盒子来看待。然后你才要去定义盒子内容、内边距、边框、外边距等概念。
默认盒模型 .box {
box-sizing : content-box;
width : 200px ;
height : 100px ;
padding : 20px ;
border : 5px solid blue;
margin : 10px ;
}
总宽度:200 (width) + 20+20 (padding) + 5+5 (border) + 10+10 (margin) = 270px
总高度:100 (height) + 20+20 (padding) + 5+5 (border) + 10+10 (margin) = 170px
怪异盒模型 规则:你设置的 width 和 height 已经包含了 Content、Padding 和 Border。
.box {
box-sizing : border-box;
width : 200px ;
height : 100px ;
padding : 20px ;
border : 5px solid blue;
margin : 10px ;
}
总宽度:200 (width) + 10+10 (margin) = 220px
总高度:100 (height) + 10+10 (margin) = 120px
传统布局
默认文档流 .block { display : block; }
.inline { display : inline; }
.inline-block { display : inline-block; width : 100px ; }
浮动布局(了解即可) <div class ="container" >
<div class ="sidebar" > 侧边栏</div >
<div class ="main" > 主内容</div >
</div >
.sidebar { float : left; width : 200px ; background : #f0f0f0 ; }
.main { margin-left : 220px ; background : #e0e0e0 ; }
.container ::after {
content :"" ;
display : table;
clear : both;
}
定位布局 .relative { position : relative; top : 10px ; left : 20px ; }
.absolute { position : absolute; top : 0 ; right : 0 ; }
.fixed { position : fixed; bottom : 20px ; right : 20px ; }
.sticky { position : sticky; top : 0 ; }
现代布局
弹性布局 容器可以改变其子项的宽度/高度,以最好地填充可用空间,适应所有类型的显示设备和屏幕尺寸。
容器:display: flex
主轴:flex-direction 定义的方向
交叉轴:与主轴垂直的方向
<div class ="flex-container" >
<div class ="item" > 1</div >
<div class ="item" > 2</div >
<div class ="item" > 3</div >
</div >
.flex-container {
display : flex;
justify-content : center;
align-items : center;
gap : 10px ;
flex-wrap : wrap;
}
.item { flex : 1 ; min-width : 100px ; }
.container {
display : flex;
flex-direction : row;
flex-direction : row-reverse;
flex-direction : column;
flex-direction : column-reverse;
}
.container {
display : flex;
flex-wrap : nowrap;
flex-wrap : wrap;
flex-wrap : wrap-reverse;
}
.container {
display : flex;
justify-content : flex-start;
justify-content : flex-end;
justify-content : center;
justify-content : space-between;
justify-content : space-around;
justify-content : space-evenly;
}
.container {
display : flex;
align-items : stretch;
align-items : flex-start;
align-items : flex-end;
align-items : center;
align-items : baseline;
}
.container {
display : flex;
flex-wrap : wrap;
height : 400px ;
align-content : stretch;
align-content : flex-start;
align-content : flex-end;
align-content : center;
align-content : space-between;
align-content : space-around;
}
.item :nth-child (1 ) { order : 3 ; }
.item :nth-child (2 ) { order : 1 ; }
.item :nth-child (3 ) { order : 2 ; }
.item :nth-child (1 ) { flex-grow : 1 ; }
.item :nth-child (2 ) { flex-grow : 2 ; }
.item :nth-child (1 ) { flex-shrink : 0 ; }
.item :nth-child (2 ) { flex-shrink : 1 ; }
.item :nth-child (1 ) {
align-self : auto;
align-self : flex-start;
align-self : center;
}
颜色与背景
CSS3 新特性
媒体查询 相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online