Insights·2026-09-08

HTML、CSS、JavaScript 是什么 — 浏览器读的三个文件

浏览器把服务器发来的内容画成画面时,读的就是这三个文件。展示什么是 HTML,长什么样是 CSS,按下去发生什么是 JavaScript。CSS 并不是因为 HTML 无法表达样式才出现的,而是因为文档会长到无法维护才被拆出来。样式不生效时,原因通常不是语法错误,而是某条更精确的规则已经胜出。TypeScript 是加在 JavaScript 之上、用来钉住值的形态的一层规则。

HTML·CSS·JavaScript — 브라우저가 읽는 파일 셋 — 글의 요약 도식

职责被分成了三份

上一篇说过,浏览器从服务器接收文件并画出画面。接收的就是这三个文件。

HTML 写的是展示什么:这个画面上有标题、有列表、有登录按钮。CSS 写的是长什么样:那个按钮在右上角、背景是黄色、字号是多少像素。JavaScript 写的是按下去发生什么:点这个按钮就播放视频。

不同浏览器能画出同样的画面,原因就在这里。无论 Chrome、Edge 还是 Firefox,收到这三类文件后都按约定好的规则组合成画面。过去确实有过同一份 CSS 在不同浏览器里显示不同的年代,如今基本消失了。

把一个按钮拆成三份来写
HTML  — 有什么
<button class="btn">登录</button>

CSS   — 长什么样
.btn { background: #ffcc00; font-size: 16px; }

JavaScript — 按下去发生什么
document.querySelector('.btn').addEventListener('click', ...)

CSS 为什么被单独拆出来

对比图:在每个 HTML 标签上写 style 属性,与把样式单独拆分到 CSS 中。

先纠正一个常见说法。CSS 不是因为 HTML 无法表达样式才出现的。

在 HTML 里也能写样式,给每个标签加上 style 属性即可。问题在于文档会因此变得难以承受地长。一个按钮就要写颜色、尺寸、间距、边框,这样的元素有几百个,文档就没法读了。

所以样式被单独拆了出来。有什么放在 HTML,长什么样放在 CSS。同一份样式能被多个元素复用,这个好处也是从同一次拆分中来的。

样式不生效时,别先怀疑语法

对比图:样式不生效时,向智能体提出请求的两种说法。

CSS 里第一道真正的坎是优先级,因为多条规则可以同时落在同一个元素上。

指向一个按钮的方式有好几种:按标签名写 button,按类名写 .btn,或者更窄地写成 button 里的 span。当这些规则同时落在同一个元素上时,指得更窄的那条获胜。

所以颜色不变时先找语法错误是在浪费时间。通常语法没问题,而是别处一条更窄的规则已经胜出。在浏览器开发者工具里点开那个元素,哪条赢了、哪条被划掉了,一目了然。

让智能体来改时这个区分同样有用。「这个类上的背景色好像被别的规则压过了」比「颜色改不动」结束得快得多。

指向的方式示例有多窄
标签名button { }宽
类名.btn { }中
用关系收窄button span { }窄

TypeScript 不是 JavaScript 的别名

JavaScript 本是为了让画面动起来而生的,但因为它是编程语言,也开始被用在服务端。能计算、能存值、能循环,我们就叫它语言,JavaScript 满足这些条件。HTML 只描述画面结构,所以叫标记而不叫语言。

随着要处理的事情变大,问题浮现了:没有事先钉住某个值是数字还是文字,填错了值也要等到运行时才有人发现。

于是在上面加了一层规则。声明这个值是数字、那个值是文字,对不上就在运行前被拦下。这就是 TypeScript。它不是要重新学一门语言,而是给 JavaScript 加上了形态声明。

氛围编程产出的项目多半是 TypeScript,原因也在这里。代码越是由智能体而非人来写,这种在运行前拦下错配的机制就越值钱。