理解CSS | 青训营笔记

170 阅读4分钟

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

一、本堂课重点内容:

  1. CSS 代码构成
  2. CSS 使用方法
  3. CSS 流程之选择器组、文本渲染
  4. 调试 CSS
  5. CSS 选择器的特异度
  6. CSS 继承
  7. CSS 求值过程解析
  8. CSS 布局方式及相关技术
  9. CSS 盒模型 - 行级
  10. CSS 盒模型 - 块级

二、详细知识点介绍:

CSS介绍

1.CSS是什么?

  • Cascading Style Sheets层叠样式表
  • 用来定义页面元素的样式
    • 设置字体和颜色
    • 设置位置和大小
    • 添加动画效果

2.CSS代码语法

image.png

3.页面中使用CSS

  • 外链
  • 嵌入
  • 内联

4.CSS是如何工作的

image.png

CSS选择器

1.选择器Selecter

  • 找出页面中的元以便给他们设置样式素
  • 使用多种方式选择元素
    • 按照标签名、类名或id
    • 按照属性
    • 按照DOM树中的位置

2.通配选择器*

3.标签选择器

4.id选择器#

5.i类选择器.

6.属性选择器

属性的值匹配某一种条件下进行选择

7.伪类选择器(不基于标签和属性定位元素)

  • 状态伪类
<a href="http://example.com">
  example.com
</a>

<label>
  用户名:
  <input type="text">
</label>

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

a:visited {
  color: gray;
}

a:hover {
  color: orange;
}

a:active {
  color: red;
}

:focus {
  outline: 2px solid orange;
}
</style>
  • 结构性伪类:根据节点在DOM树中出现的位置
<ol>
  <li>阿凡达</li>
  <li>泰坦尼克号</li>
  <li>星球大战:原力觉醒</li>
  <li>复仇者联盟 3</li>
  <li>侏罗纪世界</li>
</ol>

<style>
li {
  list-style-position: inside;
  border-bottom: 1px solid;
  padding: 0.5em
}

li:first-child {
  color: coral
}

li:last-child {
  border-bottom: none;
}
</style>

image.png

8.组合

image.png

颜色

字体font-family

  • 通用字体族 image.png
  • 字体列表最后写上通用字体族
  • 英文字体放在中文字体前面
  • 使用Web Fonts Web 字体是一种 CSS 特性,允许您指定在访问时随您的网站一起下载的字体文件,这意味着任何支持 Web 字体的浏览器都可以使用您指定的字体。
<h1>Web fonts are awesome!</h1>

<style>
  @font-face {
    font-family: "Megrim";
    src: url(https://fonts.gstatic.com/s/megrim/v11/46kulbz5WjvLqJZVam_hVUdI1w.woff2) format('woff2');
  }

  h1 {
    font-family: Megrim, Cursive;
  }
</style>

image.png

字体大小font-size

  • 关键字:small、medium、large
  • 长度:px、em
  • 百分数:相对于父元素字体大小

字体风格font-style

默认normal,斜体:italic

字重font-weight

行高line-height

文字对齐text-align

文字间距spacing

  • letter-spacing
  • word-spacing

首行文本缩进text-indent

文字修饰text-decoration

  • none
  • underline下划线
  • line-through中划线
  • overline上划线

处理空白符white-space

  • normal
  • nowrap强制不换行
  • pre保留所有空格和换行
  • pre-wrap一行显示不下自动换行
  • pre-line合并空格,保留换行

调试CSS

image.png

选择器的特异度

image.png

继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值

显式继承inherit

通过一个容器改变容器内所有元素

*{
  box-sizing:inherit;  /*box-sizing本身不可继承,通过通配选择器使所有box-sizing变成可继承的*/
}
html{
   box-sizing:border-box; /*将html所有box-sizing默认元素设置为border-box*/
                          /*宽度包含padding和border在内*/
}
.some-weight{
   box-sizing:content-box;  /*.some-weight内所有box-sizing设置为content-box*/
}

初始值

  • CSS中,每个属性都有一个初始值
    • background-color的初始值为transparent
    • margin-left的初始值为0
  • 可以使用initial关键字显式重置为初始值
    • background-color:initial

CSS求值过程

CodePen - 青训营/CSS/取值过程 (cdpn.io)

布局

1. 布局是什么?

image.png

2. 布局相关技术

image.png

3. 盒子模型

image.png

width
  • 指定content box宽度
  • 取值为长度、百分数、auto
  • auto由浏览器根据其他属性确定
  • 百分数相对于容器的content box宽度
height
  • 指定content box宽度
  • 取值为长度、百分数、auto
  • auto取值由内容计算得来
  • 百分数相对于容器的content box宽度
  • 容器有指定的高度时,百分数才生效
padding
  • 指定元素四个方向的内边框
  • 百分数相对于容器宽度
border
  • 指定容器边框样式、粗细和颜色
  • 三种属性
    • border-width
    • border-style
    • border-color
  • 四个方向
    • border-top
    • border-right
    • border-bottom
    • border-left
案例

当四条边框颜色不同时 CodePen - 青训营/CSS/三角形 (cdpn.io)

margin
  • 指定元素四个方向的外边框

  • 取值为长度、百分数、auto

  • 百分数相对于容器宽度

  • margin:auto水平居中

  • margin collapse在垂直方向上有边距的合并,折叠

content-box:

padding和border不被包含在定义的width和height之内。 盒子的实际宽度=设置的width+padding+border

border-box:

padding和border被包含在定义的width和height之内。 盒子的实际宽度=设置的width(padding和border不会影响实际宽度)

overflow控制溢出内容的展示
  • visible默认
  • hidden截掉超出部分
  • scroll滚动条

4.块级vs.行级

image.png

image.png

image.png

常规流Normal Flow

image.png

行级排版上下文

image.png

块级排版上下文

image.png

BFC内的排版规则

image.png

5.Flex Box

image.png

image.png

Flex Box

image.png

justify-content控制水平方向对齐关系

image.png

align-items控制垂直方向对齐关系

image.png

align-self

image.png

order
Flexibility

image.png

flex-grow设置 flex 项 [主尺寸] 的 flex 增长系数。

image.png

flex-shrink

5.Grid布局

image.png

display:grid
  • display:grid使元素生成一个块级的Grid容器
  • 使用grid-template相关属性将容器划分为网格
  • 设置每一个子项占哪些行/列
划分网格

colums行 rows列 CodePen - 青训营/CSS/grid-template (cdpn.io)

grid line网格线

CodePen - 青训营/CSS/grid-area (cdpn.io)

float 浮动
position绝对定位

image.png

position:relative

image.png

position:absolute

image.png

学习CSS几点建议

image.png