LearnWeb13-CSS07-CSS开发流程

LearnWeb13-CSS07-CSS开发流程

[!summary]+
这一章节主要是涵盖开发 css 的各部分,有一些需要掌握的技能的 TODO 还有一些代码风格之类的东西

TODO

  • [ ] 后续如果初窥门路了可以研究整理一下如何去找参考文献的思路。
  • [ ] 熟练使用使用开发者工具进行网站调试的方式。

    DOC 查找

如何查阅 MDN 是一个很重要的技能(当今确实是可以使用 GPT 替代,但是也要掌握基础技能):

  • 当希望知道一个模块有什么属性可以设置的时候应该在 Modules 中查找对应的模块内容,例如表格的相关属性
  • 当希望属性用法的时候才去查看对应的属性

Debug 调试

尝试熟练去使用开发者模式去查看盒模型,调整颜色,布局,查看属性,添加属性等。

编写规范

可以参考: MDN 的 CSS 代码规范的示例的同时,遵循组织 CSS 的一些准则,来确定自己的编写规范。

我的开发流程:

  1. 使用 Layer 导入组件库
  2. 使用 Layer 设置默认层,包括表格预设,各种预设的东西
  3. 使用 Layer 设置主题层
  4. 定义 custom 内容,内容的组织可以参考: OOCSS 面向对象的 CSS 设计,或者基于文章结构的组织(基础如 body,h -> 组件,例如不带 index 的列表-> 站点 level 如导航栏 -> 特指内容)

编写过程中:

  • 保持命名方式统一
  • 添加注释说明各部分内容
  • 保持缩进和换行
  • 为一些颜色之类的数值设置变量,避免重复修改多个地方

LearnWeb12-CSS06-表格样式处理

LearnWeb12-CSS06-表格样式处理

[!summary]+
表格的部分主要还是要实操,MDN 中给了一个例子,这里给我的启示是要更多的去阅读表格的相关属性,或者去阅读别人对表格设计中用到的元素,才能更好的掌握一些设计的思路,这里就给出本文中给出的一些常见的属性和设置方法,后续在具体实践中慢慢补充。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
table{
table-layout: fixed;
width: 100%;
border-collapse: collapse;
border: 3px solid purple;
}

thead th:nth-child(1) {
width: 30%;
}

thead th:nth-child(2) {
width: 20%;
}

thead th:nth-child(3) {
width: 15%;
}

thead th:nth-child(4) {
width: 35%;
}

th,
td {
padding: 20px;
}
  • 当为表格设置初始样式的时候,使用 layout 为 fixed 会使得表格的行为更好预测,避免由于内容产生的畸变导致难以设置或者出现一些奇怪对齐情况,使用 fixed 然后设置每一列的宽度,在对内容进行处理可能更好。
  • 使用 nth-child 设置每一列的宽度,最终相加为 100%,使得在不同分辨率下比较好控制。
  • border-collapse: collapse; 原本两个格子之间会有两条边线,这样的话可以合并重叠的边线,让表格更符合我们的预期。
  • 使用 text-align 设置对齐方式
  • 使用 theadtfoottbody 来分别设置样式,可以做出类似三线表之类的东西
  • 为标题 caption 设置对应的样式

后续可能会找一些比较常见的表之类的来整理,& 查看一下组件库。


LearnWeb11-CSS05-部分常见样式设置

LearnWeb11-CSS05-部分常见样式设置

[!summary]+
该篇章主要收集一些常见的样式设置的参考页和一些需要记住的重要设置内容,由于不可能记住所有的属性和设置,善用查询可能才是唯一的王道。


CSS 中的值与单位

CSS 中的值与单位 这里介绍常见的一些值和单位,有一些新的可能会有所缺失,但是大部分都有了,这里可以列举几个常见但是之前不理解的。

  • em 相对字体大小
  • vw 视窗宽度,值为百分比的含义
  • 百分比:与父辈容器的百分比
  • rgba 或者 rgb 的第四个值代表透明度,十六进制想设置透明度的话,就在后面再加两位 16 进制表示透明度的百分比。

这里倒是提示我们需要有个比较好的取色器或者像 vscode 中的色盘来编写 css,颜色搭配网站在 css 中也是很重要的。


LearnWeb10-CSS04-盒子模型

LearnWeb10-CSS04-盒子模型

[!summary]+
HTML 和 CSS 中,所有的元素都是基于一个个的 Box 去渲染的,理解盒子模型的设计,才能知道如何进行布局,从而使的页面按照希望的样子呈现,该定义实际上和 HTML 的块级元素和内联元素使完全相对应的。需要注意两者之间的关联性。

块级盒子(Block Box)和内联盒子(Inline Box)

块级盒子和 HTML 中的块级元素使相互对应的,例如 hp 有以下的特点:

  • 与其他元素之间会换行
  • 因为换行,在内联的方向上(也就是行)会占据所有可用空间,即绝大多数情况下和父容器一样宽。
  • width 和 height 属性均可发挥总用
  • 内边距(padding), 外边距(margin)和边框(border)会将其他元素从当前盒子周围“推开”

内联盒子和 HTML 中的内联元素相互对应,例如 span, em, strong 等,有以下的特点:

  • 不会换行
  • width 和 height 属性不起作用
  • 垂直方向的内边距、外边距以及边框会被应用但是不会把其他处于 inline 状态的盒子推开。
  • 水平方向的内边距、外边距以及边框会被应用且会把其他处于 inline 状态的盒子推开。

如果希望切换元素的内联或者块级属性,可以通过对盒子的 display 属性设置进行切换,对应的属性值为 inlineblock,而更有趣的,如果我们希望不换行,但是内联中的 widthheight 属性起到作用,可以使用 inline-box 属性。

Inline-box 属性在导航栏/链接元素中很常见,我们通过增大内容区域来使得链接存在更大的命中区域,同时不影响别的元素的呈现。

在这里还会看到片一个十分常见的盒子属性 flex 其通常会将外部的显示类型转换为 block,但是内部的显示类型设置为 flex,对其内部的各个子元素,都将转换为 flex 元素,并基于 flex 即弹性盒子的规则进行布局,可以生成更灵活的界面,这个后面在排版部分针对性的了解,这里简单介绍如下:

  • flex 会将内部的元素默认沿着行的方向均分切成几个 box,但是具体的切分可以根据后续的属性进行定义。
  • 如果希望 flex 的外部为内联的,则使用 inline-flex 属性。

LearnWeb09-CSS03-层叠层

LearnWeb09-CSS03-层叠层

[!summary]+
本章节是额外对于优先级的补充章节,在使用上可能会没有明显的感知,但是从概念上理解 CSS 的优先级和后续复杂项目的开发中还是起到了比较大的作用,该章节介绍层叠层的概念,在原先的优先级判定上添加了层的概念。

层叠概念回顾

该 Section 内容完全摘录自 MDN CSS 教程,也算是对于整体重要性和优先级的一个很好的总结。

  1. 相关声明:找到所有具有匹配每个元素的选择器的声明代码块。
  2. 重要性:根据规则是普通还是重要对规则进行排序。重要的样式是指设置了 !important (en-US) 标志的样式。
  3. 来源:在两个按重要性划分的分组内,按作者、用户或用户代理这几个来源对规则进行排序。
  4. :在六个按重要性和来源划分的分组内,按层叠层进行排序。普通声明的层顺序是从创建的第一个到最后一个,然后是未分层的普通样式。对于重要的样式,这个顺序是反转的,但保持未分层的重要样式优先权最低。
  5. 优先级:对于来源层中优先权相同的竞争样式,按优先级对声明进行排序。
  6. 出现顺序:当两个来源层的优先权相同的选择器具有相同的优先级时,最后声明的具有最高优先级的选择器的属性值获胜。

CSS 渲染过程中会逐步往下选择,如果在中间已经决出了胜负就不会继续往下,例如对一个元素在每个来源中只有一个定义,那么在来源层就可以决出胜负,无需往下了,而若获胜的来源中有多个层定义了同个属性,那么就会对比各个层的优先级,诸如此类。

其他的部分前文已经基本提到了,接下来补充来源和层的两个概念。

![note]+
三个来源中的:’用户代理’指的是浏览器,用户指的是网站访问者,作者指的是网站开发者,浏览器内部将来自这三个来源的样式表进行来源的排序。

来源的优先级排序

有三种层叠来源类型:用户代理样式表、用户样式表和作者样式表。浏览器根据来源和重要性将每个声明分为六个来源分组。有八个优先权级别:六个来源分组、正在过渡的属性和正在动画的属性。优先权的顺序是从具有最低优先权的普通用户代理样式,到当前应用的动画中的样式,到具有最高优先权的重要用户代理样式,再到正在过渡的样式:

  1. 用户代理普通样式
  2. 用户普通样式
  3. 作者普通样式
  4. 正在动画的样式
  5. 作者重要样式
  6. 用户重要样式
  7. 用户代理重要样式
  8. 正在过渡的样式

<style> 元素直接在元素上声明的样式是作者样式。不包括动画和过渡样式,用户代理普通样式具有最低优先权;用户代理重要样式具有最高优先权。


LearnWeb08-CSS02-CSS入门

LearnWeb08-CSS02-CSS入门

[!note]+

  1. 你永远无法记住所有的 CSS 属性,善用参考资料:MDN CSS reference 和 GPT
  2. 善用浏览器的开发者面板在页面上及时编辑 CSS。

CSS 运行逻辑

前面在 LearnWeb00-Web入门 中简单提及了浏览器以及 CSS 起了什么作用,这里则是对于 CSS 是如何具体参与进页面的渲染的讲解,包括早该知道的 DOM 的定义也会在这里介绍,是 CSS 是如何运行的读书笔记。

image.png

浏览器获取了 HTML 之后:

  1. 会拉取其所依赖的所有 CSS,JS 和静态资源(Parser HTML)
  2. 解析 HTML 代码,根据其中的 Tag、Class、ID 和相互之间的关系将 HTML 解析成 DOM ,每个元素作为其中的一个节点放进相对应的桶中。(元素桶、ID 桶之类)

紧接着,在拉取完 CSS 之后,浏览器开始解析 CSS,基于 CSS 中的选择器找到每个样式所属的 DOM 节点,并将其添加进去。

最后基于最终的 DOM(Document Object Model) 渲染出完整的页面,这里对 DOM 进行一个简单的解释:

一个 DOM 有一个树形结构,标记语言中的每一个元素、属性以及每一段文字都对应着结构树中的一个节点(Node/DOM 或 DOM node)。节点由节点本身和其他 DOM 节点的关系定义,有些节点有父节点,有些节点有兄弟节点(同级节点)。

此外浏览器在渲染过程中如果遇到了位置的 CSS 会直接跳过相应的 CSS ,然后渲染下一个规则。


LearnWeb07-HTML04-表格基础

LearnWeb07-HTML04-表格基础

[!summary]+
HTML 中需要使用 CSS 进行样式组合才能得到一个阅读体验较好的表格,目前还是先专注在 HTML 的部分,后面到 CSS 部分的时候再合起来一起看。

本文主要是参考 MDN 范例中的源码以及对应的文章 HTML 表格基础的一篇阅读笔记。

表格基础

从源码开始我们可以看到表格对应的 Tag 核心的一下几个:

  • <Table> 包裹整个表格
  • <caption> 设置表格的标题
  • <tr> 一行一行的包裹表格,全称应该是 table row

可以看到 HTML 中编写表格是使用 <tr> 进行逐行编写的,逐行的描述整个表格:

  • <td> 描述表格的内容语义,table data
  • <th> 描述表格的标题语义,即首行首列的标题元素 table header

主要的元素就是上面这些,但是复杂的表格包括:合并的单元格(纵向和横向)需要再 thtd 中使用额外的属性来定义:colspanrowspan

  • colspan="2" 属性定义占据两个单元格宽度(横向合并)
  • rowspan="3" 属性定义占据三个单元格的宽度(纵向合并)

然后每个 tr 中排除掉被合并的单元格还需要多少个 td 需要我们自己计算。

HTML 的表格基础样式

可以使用 colgroupcol 为整列设置同样的样式,每个 col 元素代表一列,如果需要一条元素定义多列的样式的时候可以使用 span 属性,下述代码会将第二列背景设置为黄色。

对单个单元格设置样式可以仿照使用 style 属性来嵌入对应的 css 样式,包括宽度什么的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table>
<colgroup>
<col />
<col style="background-color: yellow" />
</colgroup>
<tr>
<th>Data 1</th>
<th>Data 2</th>
</tr>
<tr>
<td>Calcutta</td>
<td>Orange</td>
</tr>
<tr>
<td>Robots</td>
<td>Jazz</td>
</tr>
</table>

HTML 表格结构化

[!quota]+
由于表格在结构上有点复杂,如果把它们定义得更加结构化,那会帮助我们更能了解结构。一个明确的方法是使用 <thead><tfoot><tbody>,这些元素允许你把表格中的部分标记为表头、表尾、表体三部分。

这样的结构化实际上没有什么默认 style,主要是帮助我们后续定义各个部分的样式。

其他

  • 表格元素支持嵌套
  • 使用 scope 属性 来支持视障人士来理解这个表格

LearnWeb06-HTML03-多媒体元素

LearnWeb06-HTML03-多媒体元素

[!summary]+
接下来主要探讨 HTML 中的多媒体元素,图片、视频、音频以及 iframe 等等。

图片元素 Image

1
<img src="<img_url or location>" />

src:最基本的图片元素仅需一个 src 属性来指向图片资源,这样就可以将图片导入页面中,其中关于 Location 这里有一个 SEO Tips(Google Recommand):

  • 本地存储推荐存储于 images
  • 图片的命名更加具备描述性。
  • 不要将自己的 SRC 属性指向他人网页上的照片(这种行为为”盗链”)

如图像元素和视频元素这类嵌入的元素,有时候也被成为替换元素:元素的内容和原始尺寸由外部资源所定义,而非元素本身。(可以使用属性或者 CSS 进行控制)

alt:alt 为了视障,节省带宽,浏览器支持问题等原因设置的代替图片出现的描述性文本,推荐根据图片内容进行编写:

  • 装饰需求: 使用空的 alt="" 避免输出多余信息,同时推荐将装饰性图片在 CSS 文件中定义而非 html,下文会详细讲解 CSS 设置装饰图片
  • 内容需求:如果正文中没有描述,则 alt 对图片进行描述,否则设置为空。

widthheight :上文中提到图片的 size 由外部资源决定,单位了适应页面的大小,可以使用 img 标签中的 width 和 height 属性来实现对图片的缩放,同时也会在页面尚未加载完成时预留空间,避免页面结构混乱。(因此无需缩放也建议,获取图片的 size 写入属性。)

title:类似超链接中的 title 属性,可以给照片添加悬停提示,当空间不够时可以通过这种方式来添加部分信息,但不推荐。

figurefigcaption:创建一个容器(box),可以为图片在图片下方添加说明,像论文中的那种,对于无障碍用户来说起到和 alt 一样的作用。

1
2
3
4
<figure>
<img src= "https://the-network-photo" alt="" title="key img", width="400", height="200" />
<figcaption>通过为网络添加一个低纬嵌入来实现用最小的空间代价控制网路行为</figcaption>
</figure>

figure 中可以存放几张图片、一段代码、音视频、方程、或者任何其他的内容,而不只是单张照片,类似的补充说明的场景都可以使用 figure 元素呈现。


LearnWeb05-HTML02-要素察觉

LearnWeb05-HTML02-要素察觉

[!summary]+
本章节在 HTML01 的基础上加深对于一些基础概念,标签等的认知,还是以 HTML 编写的基础知识为主。

块级元素和内联元素

块级元素和内联元素就像 Markdown 的内联代码和代码块两种写法,一个需要另起一行且会占据行,下一个元素必须另起一行,如 <p> 段落等。而内联元素就是可以嵌入行内,内联元素前后都无需换行,一般如强调,高亮,超链接一类。

  • 正是由于这种结构,块级元素在使用的时候除了内容,往往还承担着网页的结构相关的工作,如页眉,页脚, 列表,导航栏等等;
  • 块级元素不会嵌套在内联元素中,但是可能嵌套在另一个块级元素中。
  • 内联元素则通常在块级元素中和文本一起使用。

需要注意的是这类元素分类是过时的,HTML 定义了更加详细具体的分类,为了便于理解暂时使用旧的定义来做简单的区分。

布尔属性

前文提到过,属性通常以 k-v 键值对的形式呈现,但是有部分属性是没有值的,其 key 通常与值有着相同的含义,如 disabled,该布尔属性本身就代表着禁用,例如输入框 <input> 禁用就会阻止用户的输入。

1
<input type="text" disabled />

这样就会创建一个无法输入的输入框,通常会以灰色呈现,type 则限制了输入框的输入类型。


LearnWeb04-JS01-基础webJS编写

LearnWeb04-JS01-基础webJS编写

[!summary]+
JS 除了 WEB 在现代还有很多 NodeJS 的应用也会使用 JS,这里只介绍 web 相关的 JS 代码编写的部分。

ref: mdn JS 快速入门 | 《数据结构与算法 JavaScript 描述》

Intro

JavaScript 是一门完备的动态编程语言,可以借由诸多开发者编写的大量工具,为网站提供动态交互的特性(结合浏览器应用程序接口 API)主要用到的包括:

  • 浏览器应用程序接口(API):浏览器内置的 API 提供了丰富的功能,比如:动态创建 HTML 和设置 CSS 样式、从用户的摄像头采集处理视频流、生成 3D 图像与音频样本等等。
  • 第三方 API:让开发者可以在自己的站点中整合其他内容提供者(Twitter、Facebook 等)提供的功能。
  • 第三方框架和库:用来快速构建网站和应用。

HTML 引入 JS 代码

为了使得代码更清晰且好组织,本文依然使用引入外部 JS 的办法进行代码结构组织,HTML 中引入相关 JS 的方法和 CSS 的方法类似但略有不同。具体代码如下:

1
<script src="scripts/main.js" defer></script>

这一段代码可以加在 Head 部分,其中的 defer 属性,及 deferred 延迟,是为了让元素都加载完成后再加载 JS 部分代码,否则最好将 JS 的引入放在 HTML 快要结束的部分</body> 的前一行)。避免 JS 元素对 HTML 提前进行修改导致 HTML 加载失效。

参考资料:async-defer | Medium