1510 字
8 分钟
前端三件套:HTML、CSS 与 JavaScript

1. 引言#

如果把前端开发比作盖房子,那么:

  • HTML 是房屋的骨架和结构 —— 墙壁、地板、天花板
  • CSS 是装修和装饰 —— 油漆、壁纸、家具摆放
  • JavaScript 是水电系统和智能家居 —— 开关灯、调节温度、自动窗帘

三者各司其职,缺一不可。理解了这三件套,你就拿到了前端世界的入场券。


2. HTML:网页的骨架#

2.1 HTML 是什么?#

HTML(HyperText Markup Language,超文本标记语言)使用标签来描述页面的结构和内容。它不关心好不好看,只关心「有什么」和「是什么」。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个网页</title>
</head>
<body>
<header>
<h1>欢迎来到我的网站</h1>
<nav>
<a href="/">首页</a>
<a href="/about">关于</a>
</nav>
</header>
<main>
<article>
<h2>文章标题</h2>
<p>这是一段正文内容。</p>
</article>
</main>
<footer>
<p>&copy; 2026 我的网站</p>
</footer>
</body>
</html>

2.2 常用 HTML 标签#

分类标签用途
结构<header>, <main>, <footer>, <nav>, <article>, <section>语义化布局
标题<h1> ~ <h6>六级标题,h1 最重要
文本<p>, <span>, <strong>, <em>段落、行内文本、加粗、强调
链接<a href="...">超链接
媒体<img>, <video>, <audio>图片、视频、音频
列表<ul>, <ol>, <li>无序列表、有序列表
表单<form>, <input>, <button>, <select>用户输入
容器<div>通用块级容器

2.3 语义化 HTML#

语义化就是用正确的标签描述正确的内容,而不是满屏的 <div>

<!-- ❌ 不推荐:全是 div -->
<div class="header">
<div class="title">标题</div>
</div>
<!-- ✅ 推荐:使用语义标签 -->
<header>
<h1>标题</h1>
</header>

语义化的好处:

  • SEO:搜索引擎更好地理解页面内容
  • 可访问性:屏幕阅读器能准确传达信息给视障用户
  • 可维护性:代码结构清晰,团队协作更轻松

3. CSS:网页的皮肤#

3.1 CSS 是什么?#

CSS(Cascading Style Sheets,层叠样式表)负责网页的视觉呈现:颜色、字体、间距、布局、动画等。

/* 选择器 { 属性: 值; } */
body {
font-family: 'Inter', sans-serif;
background-color: #f5f5f5;
color: #333;
line-height: 1.6;
}
h1 {
font-size: 2rem;
font-weight: 700;
color: #1a1a2e;
}
.card {
background: white;
border-radius: 12px;
padding: 24px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

3.2 核心概念#

选择器#

/* 元素选择器 */
p { }
/* 类选择器(最常用) */
.card { }
/* ID 选择器 */
#header { }
/* 组合选择器 */
.card:hover { }
nav > a { }
input[type="text"] { }

盒模型#

每个元素都是一个矩形盒子,由内到外依次是:

层次属性说明
contentwidth / height内容区域
paddingpadding内边距(内容到边框)
borderborder边框
marginmargin外边距(元素到元素)
.box {
width: 300px;
padding: 20px;
border: 1px solid #ddd;
margin: 16px;
/* 实际占用宽度 = 300 + 20×2 + 1×2 + 16×2 = 374px */
}

布局:Flexbox 和 Grid#

/* Flexbox:一维布局 */
.container {
display: flex;
justify-content: space-between; /* 水平分布 */
align-items: center; /* 垂直居中 */
gap: 16px; /* 间距 */
}
/* Grid:二维布局 */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 三列等宽 */
gap: 24px;
}

响应式设计#

/* 移动端优先 */
.card {
width: 100%;
}
/* 平板 */
@media (min-width: 768px) {
.card {
width: 50%;
}
}
/* 桌面 */
@media (min-width: 1024px) {
.card {
width: 33.33%;
}
}

4. JavaScript:网页的大脑#

4.1 JavaScript 是什么?#

JavaScript(简称 JS)是一门动态、弱类型的脚本语言,让网页「活」起来。它运行在浏览器中,可以操作 HTML 和 CSS,响应用户交互。

// 点击按钮,切换主题
const button = document.querySelector('#theme-toggle');
const body = document.body;
button.addEventListener('click', () => {
body.classList.toggle('dark-mode');
const isDark = body.classList.contains('dark-mode');
button.textContent = isDark ? '☀️ 浅色模式' : '🌙 深色模式';
});

4.2 核心概念速览#

变量和作用域#

// let:可变变量(块级作用域)
let count = 0;
count += 1;
// const:不可变常量(块级作用域)
const API_URL = 'https://api.example.com';
// var:旧式写法,有作用域提升问题,不推荐
var oldWay = '不要这样写';

数据类型#

类型示例说明
Number42, 3.14, NaN所有数字都是浮点数
String'hello', "世界", `模板`文本
Booleantrue, false逻辑值
Object{ name: 'Alice', age: 25 }键值对
Array[1, 2, 3]有序列表
Functionfunction() {} / () => {}可调用对象
Undefinedundefined未定义
Nullnull空值

DOM 操作#

// 查询元素
const el = document.querySelector('.card');
const els = document.querySelectorAll('.card');
// 修改内容
el.textContent = '新文本';
el.innerHTML = '<strong>加粗文本</strong>';
// 修改样式
el.style.backgroundColor = '#f0f0f0';
el.classList.add('active');
el.classList.remove('hidden');
// 创建和插入元素
const newDiv = document.createElement('div');
newDiv.textContent = '我是新元素';
document.body.appendChild(newDiv);

异步编程#

// Promise
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
// Async / Await(更推荐的写法)
async function fetchData() {
try {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
console.log(data);
} catch (err) {
console.error('请求失败:', err);
}
}

5. 三者如何协作#

一个实际的前端页面是 HTML、CSS、JavaScript 的协同作品:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>三件套协作示例</title>
<!-- CSS -->
<style>
body { font-family: sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; }
.counter { display: flex; align-items: center; gap: 16px; }
#count { font-size: 2rem; font-weight: bold; }
button { padding: 8px 16px; border: none; border-radius: 8px; cursor: pointer; }
.plus { background: #4CAF50; color: white; }
.minus { background: #f44336; color: white; }
</style>
</head>
<body>
<h1>计数器</h1>
<!-- HTML:结构 -->
<div class="counter">
<button class="minus" onclick="decrement()">-</button>
<span id="count">0</span>
<button class="plus" onclick="increment()">+</button>
</div>
<!-- JavaScript:行为 -->
<script>
let count = 0;
const countEl = document.getElementById('count');
function increment() {
count++;
countEl.textContent = count;
}
function decrement() {
count--;
countEl.textContent = count;
}
</script>
</body>
</html>

看到没?HTML 搭好架子,CSS 画好样子,JavaScript 赋予脑子。三者各司其职,组成了你在浏览器里看到的每一个网页。


6. 学习路线建议#

阶段内容建议时长
入门HTML 常用标签 + CSS 选择器 + JS 变量和函数2~3 周
进阶CSS 布局(Flex/Grid)+ JS DOM 操作 + 事件3~4 周
实战响应式设计 + AJAX/Fetch + ES6 语法4~6 周
框架React 或 Vue(二选一入门)8~12 周

建议:不要试图一次学完所有东西。先掌握 HTML 和 CSS 做出静态页面,再学 JavaScript 加上交互,最后再接触框架。基础越扎实,框架学起来越轻松。


7. 小结#

HTML、CSS、JavaScript 这「三件套」是前端开发的基石,无论你以后使用什么框架(React、Vue、Angular),写什么工具(Webpack、Vite),最终输出的都是这三样东西。

记住这个类比就够了:HTML 是骨架,CSS 是皮囊,JavaScript 是灵魂。

前端三件套:HTML、CSS 与 JavaScript
https://www.hehonglei.cn/technology/frontend-basics-html-css-js/
作者
Honglei He
发布于
2026-06-17
许可协议
CC BY-NC-SA 4.0