理解CSS | 青训营笔记(1)

简介: 理解CSS | 青训营笔记


本次课程主要内容

  • 基础知识
  • 布局和定位
  • 层叠上下文
  • 变形, 过渡 , 动画
  • 响应式设计
  • CSS 生态相关

CSS 简要发展历史

CSS,全称为层叠样式表(Cascading Style Sheets),是一种用于描述网页展示效果的语言。它可以定义字体、颜色、布局、边框、背景等方面的样式,使得网页看起来更加美观、规范、易读。

CSS的发展历史可以大致分为以下几个阶段:

  1. 1994年-1996年,CSS的诞生。在Web诞生初期,网页的排版样式是直接写在HTML标签中的,这导致了维护困难、代码冗长的问题。于是,W3C组织开始着手开发CSS规范,并在1996年发布了CSS1标准。
  2. 1998年-2007年,CSS的成熟和普及。随着CSS在网站开发中的应用越来越广泛,W3C不断更新和完善了CSS规范,同时也涌现出了许多优秀的CSS框架和预处理器,如Bootstrap、LESS、SASS等,使得CSS的编写变得更加高效、灵活、可重用。
  3. 2009年至今,CSS3时代的到来。CSS3是CSS规范的最新版本,新增了大量的特性和功能,如动画、渐变、阴影、弹性盒子、网格布局等,使得网页样式的实现更加丰富、灵活、响应式。

总之,CSS从最初的实验性语言到如今的成熟体系,经历了一个漫长而又不断创新的发展过程,为Web设计和开发带来了前所未有的变革。

① 基础知识

1.1 选择器

image.png

1.2 选择器的优先级

内联 > id > class = attribute = pseudo-class > type = pseudo-element

  • 首页

理解CSS | 青训营笔记

心安事随

2023-04-2357阅读24分钟

关注

本次课程主要内容

  • 基础知识
  • 布局和定位
  • 层叠上下文
  • 变形, 过渡 , 动画
  • 响应式设计
  • CSS 生态相关

CSS 简要发展历史

CSS,全称为层叠样式表(Cascading Style Sheets),是一种用于描述网页展示效果的语言。它可以定义字体、颜色、布局、边框、背景等方面的样式,使得网页看起来更加美观、规范、易读。

CSS的发展历史可以大致分为以下几个阶段:

  1. 1994年-1996年,CSS的诞生。在Web诞生初期,网页的排版样式是直接写在HTML标签中的,这导致了维护困难、代码冗长的问题。于是,W3C组织开始着手开发CSS规范,并在1996年发布了CSS1标准。
  2. 1998年-2007年,CSS的成熟和普及。随着CSS在网站开发中的应用越来越广泛,W3C不断更新和完善了CSS规范,同时也涌现出了许多优秀的CSS框架和预处理器,如Bootstrap、LESS、SASS等,使得CSS的编写变得更加高效、灵活、可重用。
  3. 2009年至今,CSS3时代的到来。CSS3是CSS规范的最新版本,新增了大量的特性和功能,如动画、渐变、阴影、弹性盒子、网格布局等,使得网页样式的实现更加丰富、灵活、响应式。

总之,CSS从最初的实验性语言到如今的成熟体系,经历了一个漫长而又不断创新的发展过程,为Web设计和开发带来了前所未有的变革。

① 基础知识

1.1 选择器

image.png

1.2 选择器的优先级

内联 > id > class = attribute = pseudo-class > type = pseudo-element

image.png

属性继承

image.png

CSS 中的 值 和单位

image.png

盒子模型

image.png

盒模型例子

image.png

② 布局和定位

2.1 概述

image.png

2.2 块级格式化上下文(block formating context)

块级格式化上下文(Block Formatting Context)是Web页面中的一种CSS渲染模式,它决定了元素如何布局和相互作用。

具体来说,当一个HTML元素形成了BFC时,它会创建一个独立的渲染区域,在这个区域内的元素布局不会影响到外部元素。这也就意味着,同一个BFC区域内的元素会按照一定的规则进行垂直方向的布局,而且它们之间的边距、浮动等属性也会受到特殊的处理。

常见的触发BFC的条件包括:

  1. 根元素
  2. 浮动元素(float属性不为none)
  3. 绝对定位元素(position为absolute或fixed)
  4. display属性值为inline-block、table-cell、table-caption、flex、inline-flex的元素
  5. overflow属性值不为visible的元素

在实际开发中,我们可以利用BFC的特性,来解决一些布局上的难题,如清除浮动、避免margin重叠等问题。同时,BFC还可以提高页面渲染的效率和性能。

image.png

2.3 内联级格式化上下文(Inline Formatting Context)

内联级格式化上下文(Inline Formatting Context)是Web页面中的另一种CSS渲染模式,它定义了内联元素(inline-level boxes)如何排列和相互作用。

具体来说,当一个HTML元素形成了IFC时,它会创建一个独立的渲染区域,其中内联元素会按照一定的规则进行水平方向的布局,同时也会受到特殊的处理,例如可以通过vertical-align属性来控制它们在垂直方向上的对齐方式。

常见触发IFC的条件包括:

  1. 根元素
  2. display属性值为inline、inline-block、inline-table、inline-flex的元素
  3. 设置了text-align、vertical-align、line-height属性的元素
  4. 在块级元素中的文本内容

在实际开发中,我们可以利用IFC的特性,来解决一些布局上的问题,如水平居中、文本垂直居中等。同时,IFC还可以提高页面渲染的效率和性能。因此,在理解和应用BFC的基础上,深入理解IFC同样是很有必要的。

image.png

一些例子

image.png

  1. 单行文字垂直居中
<style>
    .title{
        background: #000;
        color: #fff;
        font-size: 18px;
        line-height: 36px;
      }
</style>
<body>
    <div class="title">我是标题</div>
</body>
  1. icon 和 文字 保持居中垂直
  <style>
        .title{
            background: #000;
            color: #fff;
            font-size: 18px;
            margin-left: 4px;
            vertical-align: middle;
        }
        .image{
            width: 24px;
            height: 24px;
            vertical-align: middle;
        }
    </style>
    
     <div class="warp">
        <div class="title">奥里给</div>
        <img src="图片相对地址"  class="image">
    </div>

2.4 外边距塌陷

image.png

2.5 弹性盒子布局(常用✌️✌️✌️)

可以去看下我这篇文章 详细讲解了flex 布局

FLex布局详解 - 掘金 (juejin.cn)

2.6 Grid 布局

CSS Grid Layout是CSS的一项新特性,它可以帮助我们灵活、高效地构建网页布局。GRID布局简单来说就是基于行和列进行定位而构成自适应的二维网格。

以下是使用Grid布局实现网页布局的基本步骤:

  1. 在父容器中定义grid环境:通过给父元素设置display: grid属性,创建一个grid环境。
  2. 划分行与列:通过grid-template-rows、grid-template-columns属性划分出网格的行与列,并可设置其大小等信息。
  3. 定义子元素位置:通过grid-row、grid-column属性指定每个子元素要占据哪些行与列,或者使用grid-area属性直接为每个子元素指定代表区域。
  4. 调整子元素大小:通过使用grid-row-span、grid-column-span、grid-row-start、grid-row-end、grid-column-start、grid-column-end等属性,对子元素进行跨行或跨列操作、或者调整子元素的尺寸。
  5. 完善样式:对子元素进行样式调整,如添加背景色、边框等,使之更符合设计要求。

学习和使用CSS Grid布局可以优化网页排版布局,增强网页的美观度和交互性。同时,该技术也在不断完善和发展中,为Web开发提供更多的可能性。

image.png

示例 :

image.png

demo代码: CSS部分

 .container {
            display: grid;
            grid-template-rows: repeat(2, 1fr);
            /* 将容器划分为两行,每行占据相等的空间 */
            grid-template-columns: repeat(2, 1fr);
            /* 将容器划分为两列,每列占据相等的空间 */
            gap: 10px;
            /* 设置网格之间的间隔 */
            
            background-color: pink;
        }

        .box1 {
            grid-row: 1 / 2;
            /* 指定该元素跨越第一行到第二行 */
            grid-column: 1 / 2;
            /* 指定该元素跨越第一列到第二列 */
            background-color: #f00;
            /* 设置背景色 */
        }

        .box2 {
            grid-row: 1 / 2;
            /* 指定该元素跨越第一行到第二行 */
            grid-column: 2 / 3;
            /* 指定该元素跨越第二列到第三列 */
            background-color: #0f0;
            /* 设置背景色 */
        }

        .box3 {
            grid-row: 2 / 3;
            /* 指定该元素跨越第二行到第三行 */
            grid-column: 1 / 2;
            /* 指定该元素跨越第一列到第二列 */
            background-color: #00f;
            /* 设置背景色 */
        }

        .box4 {
            grid-row: 2 / 3;
            /* 指定该元素跨越第二行到第三行 */
            grid-column: 2 / 3;
            /* 指定该元素跨越第二列到第三列 */
            background-color: #ff0;
            /* 设置背景色 */
        }

HTML 部分

 <div class="container">
        <div class="box1">Box 1</div>
        <div class="box2">Box 2</div>
        <div class="box3">Box 3</div>
        <div class="box4">Box 4</div>
 </div>

效果图:

image.png

2.7 FLex 布局 和 Grid 布局 对比

image.png

2.8 定位

定位属性 作用描述
position: static 默认值,元素在正常流中位置不受影响
position: relative 相对定位,元素的位置相对于其正常位置进行偏移,但仍保持在正常流中
position: absolute 绝对定位,元素的位置相对于最近的非static祖先元素确定,如果不存在,则相对于初始包含块。会从正常流中删除,并不保留原本位置的空白
position: fixed 固定定位,元素的位置相对于viewport(浏览器窗口)进行偏移,不随滚动条滚动,会从正常流中删除,并不占据空间
position: sticky 粘性定位,元素在跨越特定阈值前为相对定位,之后为固定定位

image.png

③ 层叠上下文(CSS Stacking Context)

3.1 概念

CSS层叠上下文(CSS Stacking Context)是CSS rendering的一个重要概念,它定义了元素如何根据z-index属性进行层次叠加。

具体来说,每个层叠上下文由一组HTML元素和它们的子元素构成,并且这些元素按照一定的规则垂直地贴合在一起形成平面。在这个平面中,每个层叠上下文都有自己的层级关系,即z轴方向的顺序。

在同一个层叠上下文中,具有较高z-index值的元素会被放置在具有较低z-index值的元素上方;而在不同层叠上下文中,其z-index值的比较就不仅仅局限于自身了,如以下几种情况:

  1. 层叠上下文父元素的背景色:当两个层叠上下文相互重叠时,如果父元素的背景色与子元素不同,则背景色优先于 z-index 判断。
  2. 层叠上下文的层级分离: 在不同层叠上下文之间,即使后者的位置在前者之下,元素的层级也可能反转,也就是说放在前面的元素可能被遮挡。
  3. 根据文档流的顺序:在相同层叠上下文中,后面出现的元素会覆盖在前面出现的元素之上。

image.png

3.2 形成层叠上下文的条件

形成层叠上下文的条件包括:

  1. 根元素即HTML元素
  2. position属性值为absolute、relative、fixed、sticky的元素
  3. display属性值为flex、inline-flex、grid、inline-grid的元素
  4. opacity属性值不为1的元素
  5. transform属性值不为none的元素
  6. mix-blend-mode属性值不为normal的元素
  7. filter属性值不为none的元素
  8. z-index属性值为除auto以外的数字的元素
  9. isolation属性值为isolate的元素
  10. -webkit-overflow-scrolling属性值为touch的元素

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

image.png

3.3 编写z-index 的建议

image.png



目录
相关文章
|
2月前
|
前端开发 JavaScript 开发者
理解CSS | 青训营笔记(3)
理解CSS | 青训营笔记(3)
32 0
|
2月前
|
机器学习/深度学习 编解码 前端开发
理解CSS | 青训营笔记(2)
理解CSS | 青训营笔记
30 0
|
5月前
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
76 2
|
5月前
|
移动开发 前端开发 JavaScript
CSS选择器 前端开发入门笔记(十)
CSS选择器 前端开发入门笔记(十)
65 1
|
5月前
|
编解码 前端开发 iOS开发
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
101 1
|
5月前
|
前端开发 JavaScript 容器
CSS属性:定位属性+案例讲解:博雅互动 前端开发入门笔记(五)
CSS属性:定位属性+案例讲解:博雅互动 前端开发入门笔记(五)
51 1
|
5月前
|
XML 编解码 前端开发
css设计文本样式 前端开发入门笔记(十二)
css设计文本样式 前端开发入门笔记(十二)
33 0
|
5月前
|
Web App开发 XML 前端开发
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
70 0
|
2月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果
HTML+CSS 实现通用的企业官网页面(记得收藏)
HTML+CSS 实现通用的企业官网页面(记得收藏)