理解 CSS | 青训营笔记

118 阅读5分钟

CSS 简要发展历史

CSS是一种用于描述网页上元素样式的语言,它的作用是将HTML元素的外观和布局进行控制。CSS可以让网页的外观更加美观、易于阅读和易于导航。

屏幕截图 2023-04-26 205549.jpg

CSS 基础知识

CSS中的选择器用于选取需要设置样式的HTML元素,常见的选择器有标签选择器、类选择器、ID选择器、属性选择器、后代选择器等。

层叠、优先级

屏幕截图 2023-04-26 205943.jpg 层叠三大规则(优先程度递减):

  • 样式表来源(优先程度递增):

    • 用户代理样式
    • 用户样式表
    • 作者样式表
  • 选择器优先级

屏幕截图 2023-04-26 210835.jpg

  • 源码位置

屏幕截图 2023-04-26 210949.jpg

由层叠概念引申出的CSS 代码 good practice
  • 选择器尽量少用 id
  • 尽量不用 !important
  • 自己的样式加载在引用库样式的后面

CSS 的值和单位

  • 文字类:比如像inital这种关键字、颜色、位置等
  • 数值类:比如z-index-1这种数值、或有单位的数值、百分比等
  • 函数生成:比如calc()、min()、max()等
单位
  • 长度:
    • 绝对长度:px、pt、cm、in...
    • 相对长度:em、rem、ex...
  • 时间:- s、ms
  • 角度: deg、gard、tum、rad等
  • 分辨率:- dpi、dpcm、dppx

屏幕截图 2023-04-26 211603.jpg

盒模型

  • 控制盒子类型display: block.inline、inline-block、flex
  • 控制盒子大小& 计算方式: width, height、box-sizing: content-box,border-box
  • 控制盒中内容流 overflow: auto、scroll、hidden...
  • 控制定位 position: static、relative 、abeolute 、fxed ,sticky
  • 是否可见 visibility: visible、hidden

屏幕截图 2023-04-26 212654.jpg

弹性盒子布局

flex item 的布局将受 flex container 属性的设置来进行控制和布局;flex item 不再严格区分块级元素和行内元素;flex item 默认情况下是包裹内容的,但是可以设置宽度和高度。

display: flex:flex container 以 block-level 形式存在,即块元素。

display: inline-flex:flex container 以 inline-level 形式存在,即行内元素。

屏幕截图 2023-04-26 214246.jpg

flex-container 父元素属性
  • flex-direction:该属性决定主轴的方向,有 4 种取值:row、row-reverse、column、column-reverse。

  • flex-direction:该属性决定主轴的方向,有 4 种取值:row(默认值)、row-reverse、column、column-reverse。

  • flex-wrap:决定元素单行显示还是多行显示。有 3 种取值:nowrap(默认值)、wrap(单行显示)、wrap-reverse(修改了交叉轴,即从下到上排列)。

  • flex-flow:是 flex-direction 和 flex-wrap 的简写属性。任何顺序,都是可省略的。

  • justify-content:该属性决定了 flex-item 在 main axis 上的对齐方式

  • align-items:该属性决定了 flex-item 在 cross axis 上的对齐方式。

  • align-content:space-evenly 有兼容性问题。 在 flex container 设置高度后有剩余空间才可能会设置该属性,但是一般开发中都不会设置盒子的高度,而是由内容撑开。

flex-item 子元素属性
  • order:决定 flex-items 的显示顺序。
  • align-self:单独设置某一个 flex-item 在 cross axis 上的排布方式。
  • flex-grow:决定 了 flex items 如何扩展或拉伸或成长。

网格 布局

grid 布局:通过 grid-template-columns 和 grid-template-rows 属性来定义网格中的列和行

屏幕截图 2023-04-26 215207.jpg

屏幕截图 2023-04-27 204449.jpg

Grid 和 Flex 布局的使用策略

屏幕截图 2023-04-27 204656.jpg

Position 定位

为了我们可以在文档流的基础上,让元素移动,做出更多灵活的改变。当position属性的取值非static的时候,可以使用top, right, bottom, left对其进行定位。

屏幕截图 2023-04-27 204820.jpg

层叠上下文

CSS层叠上下文定义了元素如何根据z-index属性进行层次叠加。

  • 每个层叠上下文由一组HTML元素和它们的子元素构成,并且这些元素按照一定的规则垂直地贴合在一起形成平面。
  • 在一个平面中,每个层叠上下文都有自己的层级关系,即z轴方向的顺序。
  • 在同一个层叠上下文中,具有较高z-index值的元素会被放置在具有较低z-index值的元素上方;而在不同层叠上下文中,其z-index值的比较就不仅仅局限于自身了。

屏幕截图 2023-04-27 205036.jpg

当一个元素形成了层叠上下文时,它就具有了一定的独立性和优先级,其子孙元素会在该元素内部形成自己的层叠关系,并且不会影响到其他元素。同时,该元素也可以通过z-index属性与其他元素进行相对位置调整。

屏幕截图 2023-04-27 205639.jpg

变形、过渡、动画

transition 过渡
  • transition-property 设置元素中参与过渡的属性
  • transition-duration属性用来设置过渡需要花费的时间
  • transition-timing-function属性用来设置过渡动画的类型。
  • transition-delay 属性用来设置过渡效果何时开始

屏幕截图 2023-04-27 210117.jpg

animation 动画

屏幕截图 2023-04-27 210726.jpg

响应式设计

响应式设计原则
  • 优先选用流式布局,如百分比、flex、 grid等
  • 使用响应式图片,匹配尺寸,节省带宽
  • 使用媒体查询为不同的设备类型做适配
  • 给移动端设备设置简单、统一的视口
  • 使用相对长度,em、rem、vw 做为长度度量
媒体查询

媒体查询允许某些样式只在页面满足特定条件时才生效。我们可以将媒体类型(如screen、print) 以及媒体特性(如视口宽度、屏幕比例、设备方向:横向或纵向)做为约束条件。

屏幕截图 2023-04-27 211732.jpg

设备像素

设备像素:显示器上绘制的最小单位,显示屏通过控制每个像素点的颜色,使屏幕显示出不同的图像。

屏幕截图 2023-04-27 211854.jpg

CSS 像素

CSS像素也叫参考像素。CSS像素(reference pixel) 其实是一个视角单位。规范给出的定义是,1css像素是从一臂之遥看解析度为96DPI (即1英寸96点)的设备输出时,1点(即1/96英寸)的视角

屏幕截图 2023-04-27 212019.jpg

viewport 布局视口

布局视口(viewport)是页面中html元素(根元素)的包含块,默认情况下,window.document.documentElement.clientWidth 就是viewport的宽度。在移动设备中,默认的布局视口由于历史兼容pc屏幕的原因,并不符合需求,我们经常需要用<meta>标签对viewport进行设定,来完成移动端设备的适配。

屏幕截图 2023-04-27 212304.jpg

移动端 viewport 的 meta 标签中的属性:

  • width
  • height
  • initial-scale
  • minimum-scale
  • maximum-scale
  • user-scalable:是否允许用户缩放