目录
Step1 前端语言的基本能力
市面上流行的前端语言:
- HTML
- Hypertext Markup Language
- 主要用来构建网站的框架结构,控制布局等
- CSS
- Cascading Style Sheet 层叠样式表
- 为网站的元素添加样式,用于增强网站的外表和体验
- Javascript
- JS用于Web网站的交互功能,例如一些按钮点击、轮播图等
根据上述图片可知,HTML相当于人的骨架,CSS相当于人的皮肤,JS相当于人的肌肉;各司其职。
HTML
HTML是一门标签语言,如上图所示,所有的元素都由标签构成,不同的标签所代表的作用不同,例如head标签、body标签等。
CSS
CSS 的语法十分简单,由上图所述,CSS语句由选择器和属性列表组成。 但是想要将HTML元素进行适当的组合,达到想要的效果,仍需要进行不断的尝试。 选择器包括:
- 类选择器
- 标签选择器
- id选择器
- 子选择器
- 伪元素选择器
- 兄弟选择器
元素自身使用伪类选择器,元素内容选择伪元素选择器
JavaScript
JS的一些通用能力:
- 用户输入
- 简单的客户端运算
- 交互控制
- 平台无关性
- 处理日期和时间
- 修改HTML内容
- 检测用户的浏览器和操作系统
现代的JS的一些能力:
- 预变量 let/Const
- 箭头函数
- 字符串模板
- 扩展数组函数
- 支持默认参数
- 变量重命名
上图是js的一些产品
JS基本语法:
- ①: 七种变量类型
- ②: 基本语法
- ③: 对象
- ④: 函数
Browser
浏览器一般包含两种引擎:
- 渲染引擎
- 渲染引擎首先会根据HTML元素构建DOM树
- 然后计算CSS树生成CSS OM 树
- 根据结合的DOM树的结构特性和OM树的样式特性,渲染引擎会计算网页的排版,将样并且会推断其中一部分是一个整体,形成一个个图层,以加快渲染效率
- 最后将页面绘制出
以2017年的V8引擎举例,介绍JS引擎的工作流程
- JavaScript 引擎
- 首先JS引擎会将JS源码通过语法解析生成AST语法树
- 接着通过Ignition解析为字节码
- 虚拟机会直接识别字节码,这里的
Turbofan
如果识别到有热点代码,可以反过来让Tuborfan直接生成优化后的机器码- 如果Turbofan 发现有变量类型的改变,就会进行一个
Optimize
的流程,并且将代码返回给Ignition进行再次识别。
Step2 前端语言的协作配合
纵轴代表时间轴 - 横轴代表HTML、CSS、JS等语言相关
从上图我们可以看到
- HTML 的相关技术较少
- CSS 的相关技术较多
- OOCSS
- BootStrap等等
- JS 的相关技术最多
- JS ES系列
- React Native、Vue Native
- React、Preact
- Vue
CSS in HTML
CSS 在HTML中有三种表现引入方式,如上图所述
- 直接在HTML标签内部的
style
属性中引入- 直接在HTML的
head
标签内通过style
标签引入- 通过在
head
标签内使用link
标签进行引入
JavaScript in HTML
JS 在HTML中既可以直接编写,也可以通过外部文件引入
JS中定义的函数是面向HTML全局的,并且JS的脚本加载是会阻塞HTML文件加载的
JS在HTML中会将HTML内的标签分解为各个元素,并且支持在JS函数中引用并能够对其进行修改
JS 的事件触发机制包括两个阶段,分为事件捕捉和事件捕获。
- 事件捕捉的顺序是从DOM->HTML->……->BUTTON的顺序
- 对计算机来说,能够方便它更精准的找到事件触发的元素
- 事件捕获的顺序是冒泡顺序
- 对开发者来说,方便他们做一些事件代理等功能
JS的任务执行机制
- 首先JS里有一个宏任务队列
Macrotask Queue
以及 微任务队列Microtask Queue
- 它会先完成宏任务队列里所有的宏任务依次执行,只有完成了所有的宏任务,才会去从微任务队列里取出任务执行
- 执行完成微任务队列之后才会再去执行宏任务队列里的任务
微任务: 常见的
Promise
、Callback
等等 宏任务: 常见的一些浏览器上的代码,例如setTimeOut()
、setInterval()
等等
HTML in JavaScript
在JS中,我们可以通过DOM树来操纵HTML语言,但是在后续的发展当中产生了一些模板和框架,使得我们可以通过使用模板来进行数据绑定等等。
例如在上图中,我们使用了
mustache
模板来进行对name变量的动态绑定。右侧是更加现代化的
JSX
技术,可以完美的结合HTML和JavaScript,使用类似于函数等方式对HTML标签进行动态修改
CSS in JavaScript
JS 修改CSS元素也有许多中途径:
- 通过对DOM树下标签的
Style
属性进行修改即可- 通过React 函数返回的HTML标签内部属性进行修改
- Vue可以通过使用template模板指定样式,例如上图右侧的jade
CSS中容易出现全局类名冲突等问题,但是
CSS Module
会帮助我们随机生成一个类名来防止类类名冲突。而
JSS
则是直接在JS代码使用变量的形式,通过自定义变量来标识类名,然后在标注类名时,将变量带入即可解决全局类名冲突的问题。
Step3 你不知道的HTML(5)
HTML DTD
HTML只是一门标记语言,无法形成完整的控制流
HTMl 全部标签分类
- 文档型
- <!DOCTYPE>
- <head>
- <body>
- 闭合型
- 闭合标签
- <p></p>
- 空标签
- <br>
- <img>
- <input>
- 闭合标签
- 换行型
- 块级标签
- <div>
- <h1>、<h2、……、<h6>
- 行内标签
- <span>
- <a>
- 块级标签
- H5新元素
- 语义化标签
- 媒体标签
- <video>
- <audio>
- <embed>
- 表单标签
- <input type="date">
- <input type="color">
- 功能标签
- <canvas>
- <progress>
HTML head标签
HTML body标签
ARIA
HTML语义化标签
用对比不用好 不用比用错好