第五届字节跳动青训营 前端进阶学习笔记(五)CSS进阶

news2024/10/5 11:35:11

文章目录

    • 前言
    • CSS的重要特性
      • 1.选择器特指度
          • (1)选择器优先级
          • (2)选择器特指度
      • 2.继承
          • (1)默认继承
          • (2)显式继承
      • 3.初始值
      • 4.CSS属性值的计算过程
    • 布局(Layout)
      • 1.布局相关技术
      • 2.盒子模型
          • (2)height
          • (3)padding
          • (4)border
          • (5)margin
      • 3.块级元素和行级元素
    • 排版上下文
      • 1.常规上下文
      • 2.行级排版上下文 IFC
      • 3.块级排版上下文 BFC
      • 4.FlexBox
      • 5.Grid布局
      • 6.浮动
          • (1)display
    • 总结

前言

课程重点:

  • CSS特性
  • CSS布局规则
  • flex
  • grid

CSS的重要特性

1.选择器特指度

在设置CSS属性的时候,可能一个元素会被同时应用多条相同规则,而这些相同的规则当然是不可能同时生效的。当出现多条相同的属性时,到底会生效哪一套规则呢?这里就要提到CSS选择器特指度的概念了。

(1)选择器优先级

首先选择器的优先级按照以下顺序由低到高排序,级数越高的规则优先级越高。

  • 0级 通配符(*)、选择符和逻辑组合伪类
  • 1级 标签选择器
  • 2级 类、属性选择器和伪类
  • 3级 ID选择器
  • 4级 内联style
  • 5级 !important
(2)选择器特指度

除了基本的优先级外,CSS还具有一个特指度的概念。在CSS中,选择符的特指度由选择符本身的组成部分决定。通常一个特指度由四个部分组成,例如0,0,0,0。选择符特指度的值通过下述规则确定:

  • 行内样式的特指度为1,0,0,0
  • 选择符中的每个ID属性值加0,1,0,0
  • 选择符中的每个类属性值、属性选择或伪类0,0,1,0
  • 选择符中的每个元素和伪元素加0,0,0,1。
  • 连结符和通用选择器不增加特指度

具体比较规则是按照四部分的顺序,按照从左到右的权值大小依次进行比较,比如说0,3,2,1和0,2,8,7进行比较,0,3,2,1的优先级更高。

2.继承

(1)默认继承

在CSS中,父元素所有可以被子元素继承的样式都会被它的子元素所继承,当然也有不会被子元素继承的属性,比如border和background。同时,继承的特指度为0。

(2)显式继承

显式继承就是使用inhert关键字,显式地从父类继承属性。

body {
    background: white;
}

#app {
    background: inhert;
}

3.初始值

在CSS中,每个属性都拥有一个初始值,比如backgrond-color的初始值是transparent,margin-left的初始值是0。在CSS中,可以使用initial属性将元素的值指定为初始值。

#app {
    font-size: 18px;
    color: #232323;
}

#app .content {
    font-size: initial;
    color: initial;
}

4.CSS属性值的计算过程

  • 首先,根据DOM树和样式规则,对应用到当前页面的规则进行以下筛选:选择器匹配、属性有效、是否符合当前media等。
  • 然后,对于样式表中各属性设置的属性值进行声明,当发现有层叠属性值的时候,应用选择器特指度,特指度最高的规则里的属性值生效。
  • 如果属性不具有特指度,则进行继承属性或应用初始值。
  • 在属性值都确定之后,然后开始进行值的转换:将相对单位转换为绝对单位,将相对路径转换为绝对路径。
  • 接着再对值做进一步的转化,比如将关键字和百分比等都转换为绝对值。
  • 最后,将所有小数值都转化为整数,然后将属性值应用到元素上。

https://cdpn.io/webzhao/debug/xxXyzRd

布局(Layout)

  • 确定元素大小和位置的算法
  • 依据元素、容器、兄弟节点和内容等信息进行计算

1.布局相关技术

  • 常规流
    • 行级
    • 块级
    • 表格布局
    • FlexBox
    • Grid布局
  • 浮动
  • 绝对定位

2.盒子模型

在HTML中,所有元素都是一个盒子模型。从内到外分别是content-box,padding-box,border-box和margin-box。

image.png

##### (1)width - 指定content-box的宽度 - 取值为长度、百分比、auto - auto由浏览器根据其他属性确定 - 百分比相对于容器content-box的宽度
(2)height
  • 指定content-box的高度
  • 取值为长度、百分比、auto
  • auto由内容计算而来
  • 百分比相对于容器content-box的高度
  • 容器有指定高度时,百分比才能生效
(3)padding
  • 指定四个方向的内边距
  • 百分比相对于容器的宽度
(4)border
  • 指定容器边框粗细、样式和颜色
(5)margin
  • 指定四个方向的外边距
  • 取值可以是长度、百分比和auto
  • 百分比相对于容器的宽度
  • 使用margin: auto;可以使容器水平居中

3.块级元素和行级元素

  • 块级元素:不和其他元素并列摆放、适用所有盒模型属性。
  • 行级元素:盒模型中的width、height属性不适用。

排版上下文

1.常规上下文

  • 根元素、浮动和绝对定位的元素会脱离常规流
  • 其他元素都在常规流内
  • 常规流中的盒子,在某种排版上下文中会参与布局

2.行级排版上下文 IFC

只包含行级盒子的容器会创建一个IFC

IFC内排版规则

  • 盒子在一行内水平摆放
  • 一行放不下时,换行显示
  • text-align决定一行内盒子的水平对齐
  • vertical-align决定一行内盒子的垂直对齐
  • 避开浮动元素

3.块级排版上下文 BFC

某些元素会创建一个BFC

  • 根元素
  • 浮动、绝对定位、inline-block
  • Flex子项和Grid子项
  • overflow值不是visible的块盒
  • display: flow-root

BFC内的排版规则

  • 盒子从上到下摆放
  • 垂直margin合并
  • BFC内盒子的margin不会与外面的合并
  • BFC不会和浮动元素重叠

4.FlexBox

FlexBox是什么

  • 可以控制子级盒子的摆放的流向和顺序
  • 可以控制子级盒子的宽度和高度
  • 可以控制子级盒子的水平和垂直方向的对齐
  • 可以控制子级盒子的折行

FlexBox的属性

  • flex-direction:控制子元素的流向
  • justify-content:控制子元素的水平对齐方式
  • align-items:控制子元素的垂直对齐方式
  • order:控制子元素的排列顺序

Flexibility

可以设置子元素的伸展,当容器有剩余空间时,子元素伸展;否则,子元素收缩。

  • flex-flow:有剩余空间的伸展能力
  • flex-shrink:剩余空间不足时的收缩能力
  • flex-basis:没有伸展或收缩时的基础长度

5.Grid布局

  • display: grid使元素生成一个块级grid容器
  • 使用grid-templete相关属性将容器划分为网格

6.浮动

(1)display
  • position:relative
    • 在常规流里的布局
    • 相对于自己本应该在的位置布局
    • 使用top、bottom、left和right属性设置偏移长度
    • 流内其他元素当它没有偏离一样布局
  • position:absolute
    • 脱离常规流
    • 相对于最近的static祖先定位
    • 不会对流内元素布局造成影响

总结

本节课主要介绍了CSS的几个很重要的特性:继承、特指度和初始值。然后,介绍了有关CSS布局的相关概念:行级盒子LFC、块级盒子BFC、FLexBox、Grid布局和浮动的相关概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搜索?——P3956 [NOIP2017 普及组] 棋盘

传送门: [NOIP2017 普及组] 棋盘 - 洛谷 思路: 将棋盘的每一个格子看做一个点,建一个无向图用来跑最短路. 这道题本应用搜索来做,但是转换成最短路好像简单点 建图: 1.对于已经有颜色的格子,在扫描四个方向的格子对相同颜色的建条长度为0…

【目标检测】目标检测究竟发展到了什么程度?聊聊这22年!

目录:目标检测的发展历程一、引言二、背景三、目标检测发展脉络3.1 传统目标检测算法3.1.1 Viola Jones Detector3.1.2 HOG Detector3.1.3 DPM Detector3.1.4 局限性3.2 Anchor-Based中的Two-stage目标检测算法3.2.1 RCNN3.2.2 SPPNet3.2.3 Fast RCNN3.2.4 Faster R…

Allegro如何设置Net Group操作指导

Allegro如何设置Net Group操作指导 Allegro除了可以对一组网络设置Bus以外,同样支持创建Net Group,如下图 功能和Bus的功能类似,并且同一个Net Group里面的网络可以形成一个shape形式的Group,方便查看 具体创建方法操作如下 打开规则管理器选择Electrical

MySQL窗口函教-开窗聚合函数(SUM()、AVG()、MAX()、MIN()、COUNT())

MySQL窗口函教-开窗聚合函数(SUM()、AVG()、MAX()、MIN()、COUNT())和传统的聚合函数区别?最大的区别在于,一个操作列,一个是依次操作行,最终显示出每一行,最后的效果就是呈现叠加的效果-- 开窗…

Windows环境下安装配置Mosquitto服务及入门操作介绍

文章目录一、概念梳理二、下载与安装三、关于配置文件的一些重要说明四、配置登录账号和密码参考: 博客一、概念梳理 Mosquitto是一款实现了消息推送协议MQTT 3.1的开源消息代理软件,提供轻量级的、支持可订阅/可发布的消息推送模式,是设备与…

mf10ccwm芯片说明部分译文

MF10-N是一种通用的双二阶状态变量滤波器,其中心频率与应用于时钟输入(fCLK)的方波的频率成正比。通过将引脚12连接到适当的直流电压,滤波器中心频率fO可以等于fCLK/100或fCLK/50。通过使用晶体时钟振荡器可以非常精确地设置&…

《深入浅出计算机组成原理》学习笔记 Day5

动态链接1. 静态链接与动态链接2. 地址无关3. PLT 和 GOT参考1. 静态链接与动态链接 静态链接(Static Link)是通过合并代码段的方法来使程序装载至内存; 动态链接(Dynamic Link)则是链接加载到内存中的共享库&#xf…

数据结构之栈与队列详解

文章目录前言一、栈1.栈的概念及定义2.栈的实现(1)栈的结构(2)StackInit(初始化)(3)StackPush(压栈)(4)StackPop(出栈&…

与众不同的异域年夜饭体验,你最中意哪一款?

年夜饭,中国人一年中最重要的一顿团圆聚餐,不仅丰富多彩,还充满了各种吉祥寓意。如果你选择的是出境旅游过春节,那么一次异域年夜饭体验也可以让你的旅行充满乐趣,收获与众不同的别样回忆。今天就跟着小旅城去看看&…

1597_AURIX_TC275_GPIO简介

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 左上角画出来的这个寄存器可以进行输入输出的控制。从右边上下拉设备这里可以看得出来,输入输出其实都是可以配置的。当端口配置为输入的时候,逻辑图中的输出驱动会…

使用文本编辑器编写Java源代码

使用文本编辑器编写Java源代码 编写JavaJavaJava应用程序,可以使用任何一个文本编辑器来编写程序的源代码,然后使用JDKJDKJDK搭配的工具进行编译和运行,在这里,我将介绍一个使用简单的文本编辑器来开发一个JavaJavaJava应用程序的…

【创业分享】2022年,仅赚几万,但却很踏实?

大家好,欢迎来到停止重构的频道。本期,我们停一下技术讨论,反思一下2022年的变化以及展望一下2023年。回顾2022这是我们以正式商业主体创业的第一年。总的来说,除了不赚钱和软件产品还没做出来以外,其实还不错。自媒体…

Linux常用命令——tcpreplay命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tcpreplay 将PCAP包重新发送,用于性能或者功能测试 补充说明 简单的说,tcpreplay是一种pcap包的重放工具,它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后…

Spark Core 编程入门,常用算子介绍

RDD的创建 如下代码,Spark RDD编程的入口对象是SparkContext对象(不论何种编程语言),只有构建出SparkContext,基于它才能执行后续的API调用和计算 本质上,Spark Context对编程来说,主要功能就是创建第一个RDD出来 # …

JVM 垃圾回收(深入理解Java虚拟机第三章)

垃圾判断算法 引用计数法 每个对象增加引用计数器,引用加一,失效减一,为零判定为垃圾数据。 缺点:循环引用难以解决 根搜索算法 从树状引用链向下查找,如果对象无法找到,则标记为垃圾数据。 JVM算法 …

Java反射学习

反射的概念 Reflection(反射)是Java被视为动态语言的关键 反射机制允许程序在执行期借助于Reflection API获得任何类的内部信息, 并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象&…

【JavaEE】阻塞队列 + 生产者消费者模型

目录 阻塞队列 阻塞队列的使用 生产者消费者模型 模型的两个好处 1. 降低耦合 2. 削峰填谷 简单实现阻塞队列 阻塞队列 阻塞队列是在一般的队列上升级而来的。 对于队列为空时,如果还想取队列中的元素,此时阻塞队列就会进行阻塞。 对于队列为满时…

fpga的SD卡读BMP图片显示实验(SPI模式)

对于 SD 卡的 SPI 模式而言,采用的 SPI 的通信模式为模式 3,即 CPOL1,CPHA1,在 SD 卡 2.0 版本协议中,SPI_CLK 时钟频率可达 50Mhz。SD 卡的 SPI 模式,只用到了 SDIO_D3(SPI_CS)、SD…

Nacos 部署简单使用

文章目录1、前置相关知识及说明2、官网3、环境4、Nacos 和 Zookeeper、Eureka 的主要区别5、安装部署 & 启动5.1、Windows下载安装包部署单机部署集群部署测试6、使用服务端客户端 - SpringBoot 使用 Nacos Client7、运维健康检查获取配置,验证服务端是否正常异…

【DX-BT24蓝牙模块连接Arduino与手机透传教程】

【DX-BT24蓝牙模块连接Arduino与手机透传教程】1. 前言2. 接线3. 程序设计详解4. 演示效果5. 小结1. 前言 大夏龙雀科技DX-BT24&BT24-S&BT24-PA蓝牙模块,拥有5.1蓝牙协议,模块内置标准串口协议。前期设置蓝牙名称为VOR,采用默认波特率9600,详细…