前端与 HTML | 青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
0x1 前端
-
什么是前端
- 解决图形用户界面(GUI)人机交互的问题
- 跨终端
- PC/移动浏览器
- 客户端/小程序
- VR/AR 等
- Web 技术栈
一句话总结前端工程师的工作:使用 Web 技术栈解决多端 GUI 人机交互问题
-
前端技术栈
在浏览网页时:
- 在浏览器中,通过 HTML 展示结构和内容,通过 CSS 表现样式,通过 JavaScript 控制行为
- 在服务器中,渲染 “HCJ” 的代码,使其图形化
- 通过各种网络协议(HTTP,TCP/IP)等,完成人机交互
由此可见,前端的技术栈主要为 三件套 和 网络协议,其中,三件套为前端的范畴
-
前端应该关注功能、美观、无障碍、安全、性能、兼容性、用户体验
-
前端的科技树
- 通过
node.js
开发服务端 - 通过
Electron
或ReactNative
开发客户端 - 通过
WebRTC
开发 P2P 型在线传输,实现多人会议等 - 通过
WebGL
开发一些 3D 游戏 - 通过
WebAssembly
将 C++ 等代码编译渲染成网页
- 通过
-
开发环境
-
浏览器
IE/Edge Chrome Firefox Safari
-
编辑器
VSCode Vim WebStorm
-
0x2 HTML
-
什么是 HTML
超文本标记语言:
HyperText Markup Language
-
超文本(HyperText):即除文本外,还包含图片、视频等信息表达形式
-
标记语言(Markup Language):即使用标签化的语言(如
<p>段落</p>
)-
在标签化的语言中,可以在标签中添加属性,如
<p color="xxx"></p>
中的color
就是属性名、xxx
就是属性值 -
当某个标签中不需要嵌套其他标签时,可以省略结束标签,如
<br />
-
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>页面标题</title> </head> <body> <h1>一级标题</h1> <p>一个段落</p> </body> </html>
对于上述的一段简单的 HTML 代码,其中:
<!DOCTYPE html>
用于说明使用的 HTML 版本<html></html>
是页面的根标签<head></head>
用于存放页面的源数据<body></body>
用于存放需要面向用户展示的内容
-
-
文档对象模型(DOM)树
再次以上述代码举例,其对应的 DOM 树如下:
-
HTML 语法
- 标签和属性不区分大小写,推荐使用小写
- 空标签可以不闭合,如
<input />
- 属性值推荐使用双引号包裹
- 某些属性值可以省略,如
required
、readonly
-
标签
-
标题(
h1
~h6
) -
列表
-
有序列表
<ol> <li>第一项</li> <li>第二项</li> <li>第三项</li> </ol>
-
无序列表
<ul> <li>xyz</li> <li>abc</li> <li>!@#</li> </ul>
-
key-value
<dl> <dt>xxx:</dt> <dd>xxx1</dd> <dt>yyy:</dt> <dd>yyy1</dd> <dd>yyy2</dd> <dd>yyy3</dd> </dl>
-
-
链接
<a href="http://example.com" target="_blank">链接</a>
-
多媒体
图片:
<img src="xxx.jpg" alt="替代性文本" width="200" />
音频:
<audio src="xxx.wav" controls />
视频:
<video src="xxx.avi" coontrols />
-
输入
输入提示:
<input placeholder="提示文本" />
条状选择:
<input type="range" />
范围输入:
<input type="number" />
日期输入:
<input type="date" min="2000-01-01" />
多行输入:
<textarea>多行输入文本</textarea>
单选输入:
<label><input type="radio" name="xxx">a</label> <label><input type="radio" name="xxx">b</label>
多选输入:
<label><input type="checkbox" name="xxx">a</label> <label><input type="checkbox" name="xxx">a</label>
下拉选择:
<select> <option>a</option> <option>b</option> <option>c</option> </select>
辅助输入:
<input list="lists" /> <datalist id="lists"> <option>aaa</option> <option>bbb</option> <option>ccc</option> </datalist>
-
文本
长引用:
<blockquote cite="引用地址"> <p>xxxxx</p> </blockquote>
短引用:
-
作品引用
<p> xxx<cite>yyy</cite>zzz </p>
-
内容引用
<p> xxx<q>yyy</q>zzz </p>
代码引用:
<p><code></code></p>
多行代码:
<pre><code></code></pre>
加粗:
<strong></strong>
斜体:
<em></em>
-
-
-
内容划分
0x3 HTML 语义化
-
什么是语义化
-
HTML 中的元素、属性及属性值都拥有某些含义
-
开发者应该遵循语义来编写 HTML
-
-
好处
- 代码可读性
- 可维护性
- 搜索引擎优化
- 提升无障碍性
-
传达内容,而非样式
-
如何做到
- 了解每个标签和属性的含义
- 选择最适合描述内容的标签
- 不使用可视化工具生成代码