首页 > 其他分享 >理解CSS

理解CSS

时间:2023-09-10 22:02:44浏览次数:26  
标签:元素 层叠 布局 transform 理解 样式表 inline CSS

CSS(Cascading Style Sheet)对HTML做补充,做效果。现在使用的为最新的CSS3.

层叠(Cascading)

层叠三大规则:(优先级依次递减)

  1. 样式表来源
  2. 选择器优先级
  3. 源码位置

1、样式表来源重要次序排序

  1. 用户代理样式(浏览器默认样式)
  2. 用户样式表 很少有
  3. 作者样式表 developer写的
  4. 作者样式表中的 !important
  5. 用户样式表中的 !important
  6. 用户代理样式表中的 !important

2、选择器优先级

具体优先级:

image.png

源码顺序

The last declaration in document order wins.

  1. 对于@import的样式,根据@import的顺序
  2. 对于link和style标签的样式,根据在document中的顺序决定。
  • 选择器尽量少用id
  • 尽量不要用!important
  • 自己的样式加载在引用库样式的后面

继承

继承方向:

  • 大部分具有继承特性的属性和文本相关,color、font、font-family、font-size、font-weight、font-variant、fontstyle、line-height、letter-spacing、text-align、text-indent、texttransform、white-space以及word-spacing。还有少部分列表、表格的属性。

  • 可以使用inherit关键字显式指定一个属性值从其父元素继承

CSS值和单位

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

盒模型

浏览器根据视觉格式化模型(visual formatting model),将所有元素表示为盒子模型,css通过盒模型做layout。

  • 控制盒子类型display: block、inline、inline-block、flex、…

  • 控制盒子大小&计算方式width,height …box-sizing: content-box、border-box

  • 控制盒中内容流overflow: auto、scroll、hidden、…

  • 控制定位position: static、relative、absolute、fixed、sticky

  • 是否可见visibility: visible、hidden、…

padding、border、margin中,只有margin可以设置负值

常规流布局

任意的盒子display

  • 外部显示类型(display-outside):规定了该盒子如何与同一格式上下文中的其他元素一起显示
  • 内部显示类型(display-inside):规定了该盒子内部的布局方式。比如display: flex;其外部显示是block,参与BFC;display: inline-flex,则外部显示是inline,参与IFC。他们内部的盒子都参与弹性盒子布局。

常规流的盒子

  • 外部显示为block
    • display: block | flex | grid |table | flow-root |…
    • 块级格式化上下文(BFC)(block formatting context)
  • 内部显示为inline
    • display: inline | inline-block |inline-flex | inline-grid |inline-able | …
    • 参与内联级格式化上下文(inline formatting context)

弹性盒子布局

Flexible Box Layout是为了提供更加高效灵活的布局方式,在即便是宽高未知的情况下,也能排列和分割一个盒子内部的布局。而且在不同布局方向(横向/纵向)的调整更为灵活。

网格布局

2017年推出的Grid布局可以定义由行和列组成的二维布局,然后将元素放置到网格中。元素可以只占其中一个单元格,也可以占据多行或多列。

Flex 和 Grid

建议:

  1. 大面积或整体布局推荐使用Grid布局
  2. 小面积或组件中,或Grid Item中可以使用Flex做灵活布局

定位Position

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

层叠上下文 (The Stacking Context)

层叠上下文是对HTML元素的三维构想,将元素沿着垂直屏幕的虚构的Z轴排开。

形成新的层叠上下文的条件(任一即可):

  • position: relative或absolute;并且z-index不是auto

  • position: fixed或sticky

  • flex或grid的子元素;并且z-index不是auto

  • opacity的值小于1

  • transform的值不为none

  • will-change的值不为通用值

  • ……详见规范

层叠顺序

层叠级:

关于z-index的使用建议:

  1. 使用css变量或者预处理语言的变量,管理z-index的值
  2. 将预设间隔设置10或100,方便后续的插入

变形、过度、动画

transform变形

2D相关属性:

  • transform: translate(移动)、rotate(旋转)、scale(放缩)、matrix(变形矩阵)等
  • transform-origin: right top、center等表示变形时依据的原点

3D相关属性:

  • transform: translate3d、rotate3d、scale3d、matrix3d等

  • transform-origin: right top、50px 30px等表示变形时依据的原点

  • transform-style: flat或preserve-3d看子元素的3d表现perspective:观看点距离z=0这个平面的距离,可以在transform中用

  • perspective()使用作用为当前元素,也可以直接使用,给后代元素一个统一值

  • perspective-origin:观看者的位置,如top、bottom等

  • backface-visibility:元素正面只有朝向观察者的时候可见

Transition 过渡

通过指定某些元素属性从一种起始状态,在一段时间内以某种变化节奏,过渡到终止状态。

Animation 动画

  • @keyframes关键帧用来定义动画过程中出现的关键样式
  • animation-*相关属性用来为元素添加动画

transform transition animation 性能

如何写动画性能更好?

1.尽量不用触发reflow的属性

2.在遇到性能问题时可以触发硬件加速,比如设置will-change属性、设置transform3d等

3.尽量使用transform和opacity去写动画

响应式设计

媒体查询

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

使用媒体查询的一些Tips

1.媒体查询同样遵循cascading层叠覆盖原则,min-和max-选择一个

2.由于设备的多样化逐渐不可枚举,断点的选择尽量根据内容选择

3.由于断点的增加会增加样式处理的复杂度,所以尽量减少断点

设备像素

$$ 假设像素是X*Y \ PPI=X/屏幕宽度(inch)=Y/屏幕宽度(inch)=\sqrt(X^2+Y^2)/屏幕宽度(inch) $$

$$ DPR(设备像素比)=设备像素/CSS像素 $$

viewport

常见的移动端viewport的设置

1.保持scale为1

2.保持scale放缩参数是1/dpr

相对长度的使用

em
  • 在非font-size属性中使用是相对于自身的字体大小
  • 在font-size上使用是相对于父元素的字体大小(一般不在这个属性上使用,因为font-size的继承特性,多重嵌套后大小会不断放大或缩小,产生混乱)
rem

根元素的字体大小。通过伪类:root或者html选择器选定。由于是根元素的font-size,所以不会像em那样出现多重嵌套问题,减少了复杂性,同时作为一个相对单位,可以进行适配放缩,可以用来做响应式布局.

vw & vh

vw:视窗宽度的1%。vh:视窗高度的1%。同样,vw也可以作为响应式布局的基准单位。由于vw天然是视口宽度的1%,所以不需要js动态配置。应用和rem方案类似.

CSS生态相关

总结

本次课程主要讲解了CSS(Cascading Style Sheet)的相关知识。首先介绍了CSS层叠及规则,其中包括样式表来源、选择器优先级和源码位置等重要规则。接着,讲解了CSS的盒模型、常规流布局、弹性盒子布局和网格布局等相关概念。并深入探讨了CSS的定位属性、层叠上下文和相应的层叠顺序等,以及变形、过渡和动画等特性。最后还详细讲解了响应式设计中的媒体查询、设备像素、viewport、相对长度的使用等相关知识。

总之,CSS作为前端开发中不可或缺的重要组成部分,是实现Web页面美化以及响应式布局的核心技术。同时,也需要注意其层叠、继承等规则,尽量避免影响其性能。

标签:元素,层叠,布局,transform,理解,样式表,inline,CSS
From: https://blog.51cto.com/u_16189732/7428407

相关文章

  • 3.SpringCloud理解
    SpringCloud是一个用于构建分布式系统的开发工具集合,它基于SpringBoot提供了一套简化的微服务架构开发组件。SpringCloud提供了多个模块,包括服务注册与发现、配置管理、负载均衡、断路器、网关等,这些模块可以帮助开发者快速构建和部署分布式系统。服务注册与发现:通过使......
  • 深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel
    深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel文档库openpyxl一、Python安装openpyxl二、Pycharm为项目安装openpyxl一、Python安装openpyxlpip3installopenpyxlCollectingopenpyxlDownloadingopenpyxl-3.0.9-py2.py3-none-any.whl......
  • python系列之:深入理解函数、方法以及函数和方法的区别
    python系列之:python系列之:深入理解函数、方法以及函数和方法的区别一、函数二、函数参数1.必需参数2.关键字参数3.默认参数4.不定长参数三、函数和方法的区别一、函数Python定义函数使用def关键字,一般格式如下:def函数名(参数列表):函数体函数实际例子如下所示:defmax(a,......
  • 深入理解Java if判断:提升编程效率的关键步骤
    Java中的if判断语句是一种条件语句,用于根据指定条件执行不同的代码块。if语句通常由一个布尔表达式和一个或多个语句组成。如果布尔表达式的结果为true,则执行if语句后面的语句;否则,跳过if语句后面的语句。下面是一个if语句的示例:intx=10;if(x>5){System.out.println("x......
  • 彻底理解什么是反函数以及反函数的求导
    我们经常听到的是“求解反函数之前先把x和y互换”,其实这样的说法掩盖了反函数的本质。同时,为什么y=arcsinx的反函数是x=siny,但有时候我们也说反函数是y=sinx,以及反函数的导数怎么计算,全部都在下面这篇文章中哦: 求解反函数的导数,你真的会吗?(首先需要知道什么是反函......
  • 理解贷款利率(名义利率与实际利率、年化利率、单利与复利、还款方式、折现率与内部收益
    在生活中,经常会看到这样的宣传:某银行:信用卡分期,月利率低至0.28%某购物网站:零首付购XXX,每期只需支付0.6%手续费这些利率真的有这么低吗?也许你看到过一些文章,告诉你这些利率都是骗人的,实际利率高的吓人。然后会给你一个公式,告诉你怎么计算实际的利率。但为什么用这些公式......
  • 如何理解虚拟DOM
    虚拟DOM(VirtualDOM)是一种在一些JavaScript库和框架中使用的概念,最为著名的是React。它是一种在内存中构建的轻量级的、存在于JavaScript层面的表示,用于高效地更新和渲染用户界面。虚拟DOM的工作原理如下:初始渲染:当应用程序的状态发生变化时,虚拟DOM会创建一个完整的虚拟DOM树结构......
  • css-定位
    相对定位top-20px——first上移20px  绝对定位:相对于浏览器:  相对于父级元素(给父级元素一个position)  固定定位:彻底定死,区别绝对定位 相当于加了z轴,好多图册     ......
  • 前端使用proxy代理解决跨域的问题
     实现方法:本地向proxy代理服务器发送请求,proxy接收本地请求,转换为目标地址相同IP和端口向目标地址发送请求。配置:(注意:因为我是本地启动的后端服务器,所以使用地址为localhost'一些为/api')vue.config.jsdevServer:{open:true,proxy:{"/localhost":{/......
  • web前端技能方法总结(css、js、jquery、html)(2)
    创建链接块display:block;列表样式在一个无序列表中,列表项的标志(marker)是出现在各列表项旁边的圆点。在有序列表中,标志可能是字母、数字或另外某种计数体系中的一个符号。要修改用于列表项的标志类型,可以使用属性list-style-type:ul{list-style-type:square;}1上面的声明把......