了解并理解CSS | 青训营笔记

91 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第2天

CSS的基础介绍

CSS作为前端三件套之一,全称是Cascading Style Sheets。也就是层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。简而言之,CSS决定了网页中各个元素的样式即它们的视觉效果。

CSS一般由Selector(选择器)和Declaration(声明)构成,其中声明又由Property(选择器)和Value(值)组成。举个例子

    h1{                            #h1 —— Selector
        color = "red";             #color —— Property,"red" —— Value
        front-size = 14px;         #front-size = 14px —— Declaration
    }

那在页面中我们应如何使用CSS?一般通过三种方式:1.外链 使用<link>标签引用 2.嵌入<style>标签中编写 3.内联 在标签内部通过style属性编写

CSS的使用方法

Selector(选择器)

Selectot的作用是找出页面中的元素,方便设置它们的样式。CSS提供了多种方法方便我们选择元素,但一般使用以下几种:

  • 按照标签名,类名,id
  • 按照属性名
  • 按照DOM树中的位置.

由于内容过多并简单,举几个例子就不全部展开了。

通配选择器

<style>
* {
  color: red;
  font-size: 20px;
}
</style>

标签选择器

<style>
h1 {
  color: orange;
}
p {
  color: gray;
  font-size: 20px;
}
</style>

伪类(pseudo-classes)

这种方法不基于标签和属性定位元素,它通过结构和状态定位元素。一般有两种伪类:结构性伪类,状态伪类

状态伪类

<style>
a:link {
  color: black;
}

a:visited {
  color: gray;
}

a:hover {
  color: orange;
}

</style>

组合和选择器组

~BRLB7U1CDZ4{TX0W%F[9DL.png 85T{M9ME7(KFR][SRE0}E8N.png

文本渲染

  • RGB——最普遍的调色方法
  • HSL——色相(H):基本颜色,饱和度(S):鲜艳程度,亮度(L):明亮程度
  • alpha——透明度
  • front-size——字体大小
  • 等等

注意点:在HTML里多个空格或换行会合并成一个。如果有特殊需求可以通过white-space进行修改。

CSS调试

  • 右键点击页面选择检查
  • 使用快捷键
    • Ctrl+Shift+I (Windows)
    • Cmd+Opt+I (Mac)

深入了解CSS

CSS 选择器的特异度

  • 因为在css中可能会有多个样式同时影响同一个元素的某个属性,CSS选择器的特异度可以解决作者,用户和用户代理的样式冲突。

  • 如何计算CSS选择器的特异度?特异度由三个东西的选择器数量决定:一是id,二是类(包括伪类),三是标签。权重是id最高,类次之,标签最小。

CSS 继承

CSS继承是指子元素中某些属性会自动继承其父元素的计算值,除非显性指定一个值。一般来说,文本属性是可继承的,但是和盒模型相关的属性一般不可继承。除非在通配选择器将属性的值设置为inherit。

CSS 初始值

CSS中每个元素都具有初始值,可以使用initial关键字进行重置

CSS 求值过程

在了解以上内容后,通过以下的流程图,我们能大致明白一个元素的样式是怎样计算出来的。

]RF9_0OWN4U)L06{`[Y0EVF.png {$`329O(RJ$65V1BTAV{(UA.png

布局

布局(Layout)是一种确定内容大小位置的算法,依据元素,容器等内容进行计算。

盒模型

这张图包含了常见的盒模型元素,具体元素的属性用法这里就不一一介绍了。

image.png

再了解完基础的盒模型后,它还有两种常见的布局规则:块级(Block Level Box)和行级(Inline Level Box)

image.png

Display属性决定盒子按照哪种布局规划排版。

常规流(Normal Flow)

image.png

这里注重讲下FlexBoxGrid布局

FlexBox

FlexBox可以控制子级盒子:

  • 摆放的方向,顺序
  • 盒子的高宽
  • 水平和垂直方向的对齐
  • 是否折行 盒子的宽高和是否折行一般由以下属性控制flex-grow,flex-shrink,flex-basis(也可以缩写成flex)

其他控制由flex-direction,justify-content,align-items等属性实现

Grid布局

Grid布局是将空间分割成一个一个网格,再设置每个子项占据哪些网格。

  • 一般使用grid-template-rows(columns) 来划分网格
  • 也可以使用grid-rows(columns)-start(end)grid-area 根据网格线决定布局。

定位(Position)

Position属性用于定位元素在盒中的位置

  • relative:相对于自己本应该存在的位置位移
  • absolute:相对于最近的非static祖先定位。

学习CSS的建议

  • 学会利用MDNW3C CSS规范等文档
  • 保持好奇心,善用浏览器的开发者工具
  • 持续学习,CSS的新特性还在不断出现