盒子模型

所有HTML元素可以看作盒子,它包括:边距,边框,填充,和实际内容。

CSS中组成一个块级盒子需要:

  • Content box: 这个区域是用来显示内容,大小可以通过设置 width 和 height.
  • Padding box: 包围在内容区域外部的空白区域; 大小通过 padding 相关属性设置。
  • Border box: 边框盒包裹内容和内边距。大小通过 border 相关属性设置。
  • Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。如下图:

盒子模型有标准盒模型,怪异盒模型,可以通过设置box-sizing 来设置这两种模型,

  • 当设置为box-sizing:content-box时,将采用标准模式解析计算,也是默认模式
  • 当设置为box-sizing:border-box时,将采用怪异模式解析计算

标准盒模型

标准模式:盒子总宽度/高度 = 内容区宽度 /高度+padding+border + margin

效果:

怪异盒模型

怪异模式:盒子总宽度/高度 = width/height + margin

效果:

css 解析

  css 从右边往左开始解析,过多的嵌套会影响性能,最好不要超过三层。css 尽可能的复用代码块,减少重复代码

css 优先级

  css Specificity中文一般译为css优先级、css权重。相比权重,优先级更好理解。简单理解就是一个DOM元素有多个css样式设置,优先级高的那个样式被应用,其他css设置不生效的问题,这是因为在其他地方定义了一个更高的优先级样式,从而导致其他地方设置的样式不生效。

根据w3c标准这个优先级是根据计算选择者的特性来决定,可以理解为根据选择器的类型来决定,他们的类型分为a、b、c,他们的数目计算规则如下,在比较权重时, 按照 a => b => c 的顺序进行比较。

计算规则

  • 计算选择器中ID选择器的数量(= a)
  • 计算选择器中的类选择器,属性选择器和伪类的数量(= b)
  • 计算选择器中类型选择器和伪元素的数量(= c)
  • 忽略通用选择器、not()伪类
  • 给元素添加的内联样式 (例如,style="font-weight:bold") 总会覆盖外部样式表的任何样式 ,因此可看作是具有最高的优先级。
  • !important 例外规则,当在一个样式声明中使用一个 !important 规则时,此声明将覆盖任何其他声明
1 * / * a = 0 b = 0 c = 0->特异性= 0 * /
2 LI / * a = 0 b = 0 c = 1->特异性= 1 * /
3 UL LI / * a = 0 b = 0 c = 2->特异性= 2 * /
4 UL OL + LI / * a = 0 b = 0 c = 3->特异性= 3 * /
5 H1 + * [REL = up] / * a = 0 b = 1 c = 1->特异性= 11 * /
6 UL OL LI.red / * a = 0 b = 1 c = 3->特异性= 13 * /
7 LI.red.level / * a = 0 b = 2 c = 1->特异性= 21 * /
8 #x34y / * a = 1 b = 0 c = 0->特异性= 100 * /
9 #s12:not(FOO)/ * a = 1 b = 0 c = 1->特异性= 101 * /
  1. 当有重复的选择器会累加计算 如 LI.red.level / * a = 0 b = 2 c = 1->特异性= 21
  2. !important > 行内 > a > b > c
  3. 如果a、b、c 相同权重,后面的覆盖全面的样式

不太严谨的理解

根据最新的标准这个是错误的

css继承

  有些样式可以直接继承父元素的样式,不能继承的默认是初始值。常见可继承属性如下

1、字体系列属性

  font-family:字体系列

  font-weight:字体的粗细

  font-size:字体的大小

  font-style:字体的风格

2、文本系列属性

  text-indent:文本缩进

  text-align:文本水平对齐

  line-height:行高

  word-spacing:单词之间的间距

  letter-spacing:中文或者字母之间的间距

  text-transform:控制文本大小写(就是uppercase、lowercase、capitalize这三个)

  color:文本颜色

3、元素可见性

  visibility:控制元素显示隐藏

4、列表布局属性

  list-style:列表风格,包括list-style-type、list-style-image等

5、光标属性

  cursor:光标显示为何种形态

css 自定义属性

  css 可以自定义属性(通常叫css 变量),比如: --main-color: black; 由var() 函数用于读取值

1 color: var(--main-color);
  • 声明一个自定义属性,属性名需要以两个减号(--)开始,属性值可以是任何有效的CSS值
  • 声明的变量存在作用域,属性仅在匹配当前选择器及其子孙可以访问,所以一般全景变量在跟伪类 :root {} 中声明,局部变量在某个特定的选择器声明
  • 自定义属性可以继承,在子、孙元素中可以直接使用
  • var()函数还可以使用第二个参数,表示变量的默认值,color: var(--xxx, #7F583F)
  • 可以使用js来操作这个变量
 1 // 获取任意 Dom 节点上的 CSS 变量
2 getComputedStyle(element).getPropertyValue("--my-var");
3 // 修改一个 Dom 节点上的 CSS 变量
4 element.style.setProperty("--my-var", jsVar + 4);
5
6 //读取全局
7 let root = getComputedStyle(document.documentElement);
8 let color = root.getPropertyValue('--color').trim();
9 console.log(color);
10
11 //改变
12 document.documentElement.style.setProperty('--color', 'yellow');
13 let color = root.getPropertyValue('--color').trim();
14 console.log(color);
15 //删除
16 document.documentElement.style.removeProperty('--color');
17 let color = root.getPropertyValue('--color').trim();
18 console.log(color);

如果变量值带有单位,就不能写成字符串

1 :root {
2 --bg1: red;
3 --mt1: 20; // 数值需要与calc*()函数拼接
4 // --ml1: "20px"; // 无效,带有单位不要写成字符串
5 --ml1: 20px; // 带有单位时不要写成字符串
6 }

如果变量值是数值,不能与数值单位直接连用

1 .wrap2 {
2 // 无效
3 // margin-top: var(--mt1)
4 margin-top: calc(var(--mt1) * 1px);
5 margin-left: var(--ml1);
6 }

codePen

与传统 LESS 、SASS 等预处理器变量比较

相较于传统的 LESS 、SASS 等预处理器变量,CSS 变量的优点在于:

  1. CSS 变量的动态性,能在页面运行时更改,而传统预处理器变量编译后无法更改
  2. CSS 变量能够继承,能够组合使用,具有作用域
  3. 配合 Javascript 使用,可以方便的从 JS 中读/写

CSS 自定义属性可以让 JavaScript 与 CSS 通信了。

css 重绘、回流/重排

重绘

  当我们对 DOM 的修改导致了样式的变化、却并未影响其几何属性(比如修改了颜色、背景色等),浏览器不需重新计算元素的几何属性、直接为该元素绘制新的样式,这个过程叫做重绘。

回流

  当我们对 DOM 的修改引发了 DOM 几何尺寸、结构的变化(比如修改元素的宽、高或隐藏元素等),浏览器需要重新计算元素的几何属性(其他元素的几何属性和位置也会因此受到影响)重新生成渲染树,然后再将计算的结果绘制出来,这个过程就是回流(也叫重排)

回流一定会产生重绘,重绘不一定会回流,比如只有颜色改变就只会发生重绘而不会引起回流,每个页面至少经历一次回流(在页面第一次加载)

哪些实际操作会导致回流与重绘

  1. 添加、删除元素 (回流+重绘)
  2. 隐藏元素,display:none(回流+重绘),visibility:hidden (只重绘,不回流)
  3. 改变元素位置,如改变top、left或移动元素到另外1个父元素中 (重绘+回流)
  4. 改变浏览器大小 (回流+重绘)
  5. 改变浏览器的字体大小 (回流+重绘)
  6. 改变元素的padding、border、margin (回流+重绘)
  7. 改变浏览器的字体颜色(只重绘,不回流)
  8. 改变元素的背景颜色(只重绘,不回流)
  9. 改变元素尺寸 如边距、填充、边框、宽度和高度 (回流+重绘)
  10. 页面开始渲染 (回流+重绘)

规避回流与重绘

  1. 避免在循环中一条一条的修改样式
  2. 最好使用类名去切换样式
  3. 对于复杂的dom操作,可以考虑将DOM结点设为none 在操作,操作完成之后在显示出来

css 常用单位

  1. px:相对单位,页面按精确像素展示
  2. em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值。
  3. rem:相对单位,相对根节点html  font-size字体大小来计算
  4. vw:viewpoint width,视窗宽度,1vw等于视窗宽度的1%
  5. vh:viewpoint height,视窗高度,1vh等于视窗高度的1%
  6. %:百分比,相对父元素的尺寸来计算
  7. vmin:vw和vh中较小的那个
  8. vmax:vw和vh中较大的那个

做移动页面开发时,如果使用 vw、wh 设置字体大小(比如 5vw),在竖屏和横屏状态下显示的字体大小是不一样的。

由于 vmin 和 vmax 是当前较小的 vw 和 vh 和当前较大的 vw 和 vh。这里就可以用到 vmin 和 vmax。使得文字大小在横竖屏下保持一致。

CSS中组成一个块级盒子需要:

  • Content box: 这个区域是用来显示内容,大小可以通过设置 widthheight.
  • Padding box: 包围在内容区域外部的空白区域; 大小通过 padding 相关属性设置。
  • Border box: 边框盒包裹内容和内边距。大小通过 border 相关属性设置。
  • Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。

如下图:

css整理之-----------基本知识的更多相关文章

  1. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  2. CSS的一些基础知识

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>标题&l ...

  3. java基础57 css样式、选择器和css定位(网页知识)

    本文知识点(目录): 1.CSS样式    2.选择器    3.CSS定位 1.CSS样式 1.html 在一个网页中负责的是一个页面的结构    2.css(层叠样式表)在一个页面中负责了一个页面 ...

  4. css整理之-----------选择器

    背景 在20年初时总感觉自己的css 不够用,想把css 相关的东西整理下,去年一整年都比较忙,忙着就到2021了,今天趁着有点时间,先从选择器开始吧. 听说图片可以提升颜值.... 选择器 CSS选 ...

  5. css整理之-----------技巧、黑魔法

    css 看起来比较简单,但是要想做的好也不是那么容易,我们在平时开发中,主要用css 来美化我们的html结构,所有我觉得css 还是挺重要的,这里记录整理一些关于css 的技巧以及容易忘记的知识点. ...

  6. css整理-06 表和列表

    表格式化 表布局 table, display:table caption, display: table-caption thead, display: table-header-group tbo ...

  7. css整理-01选择器和继承

    元素 元素形式: 替换,非替换 元素类型: 块级,行内 列表是特殊的块级元素,它会生成一个标记符 样式表 候选样式表: rel='alternative' @import导入样式表,必须在style的 ...

  8. 前端必会css整理

    1.设置css样式的三种方式?         外部样式表,引入一个外部css文件         内部样式表,将css代码放在<head>标签内部         内联样式,将css样式 ...

  9. 高效 css 整理

    避免通用规则 请确保规则不以通用类型作为结束! 不要用标签名或 classes 来限制 ID 规则 如果规则的关键选择器为 ID 选择器,则没有必要为规则增加标签名.因为 ID 是唯一的,增加标签只会 ...

随机推荐

  1. 修改jpg的图片大小

    using System.Drawing.Imaging; public void ResizePic(string oldFilePath, int thumbnailImageWidth, int ...

  2. Redis 的缓存淘汰机制(Eviction)

    本文从源码层面分析了 redis 的缓存淘汰机制,并在文章末尾描述使用 Java 实现的思路,以供参考. 相关配置 为了适配用作缓存的场景,redis 支持缓存淘汰(eviction)并提供相应的了配 ...

  3. sdut2879 枚举起点DP

    这个题和乌龟棋之类的DP差不多要学会缩减状态 就是,,我们只需枚举当前这个人是谁,选什么颜色,A用了多少,B用了多少 C用了多少我们就不用枚举了,知道选了多少人,A,B用了多少,你还不知C用了多少么, ...

  4. PHP7.1后webshell免杀

    严格的D盾 D盾说,我是个严格的人,看到eval我就报木马,"看着像"="就是"木马,宁可错杀一千,绝不放过一个.好了,多说无益,一起看看严格的D盾是如何错杀的 ...

  5. vue & this.$copyText

    vue & this.$copyText click copy https://www.npmjs.com/package/vue-clipboard2 <p>{{message2 ...

  6. 钓鱼教程 All In One

    钓鱼教程 All In One youtube https://www.youtube.com/results?search_query=钓鱼教程&sp=CAM%3D 钓鱼证 https:// ...

  7. 如何用 js 实现一个 sleep 函数

    如何用 js 实现一个 sleep 函数 原理 实现方式 总结 refs js sleep xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. Paint Tool SAI

    Paint Tool SAI PC 绘画工具 https://en.wikipedia.org/wiki/Paint_Tool_SAI refs https://www.systemax.jp/en/ ...

  9. YAML & .yml

    YAML & .yml YAML: YAML Ain't Markup Language https://yaml.org/ https://github.com/yaml/www.yaml. ...

  10. SPC算力空投来袭!对话NGK!华盛顿金融特别报道

    近日华盛顿金融时报联合波士顿商业报等多家知名金融媒体专访了NGK. NGK代表马特彼得森就表示NGK在新的一年里将会继续以生态建设者为中心,以打造高倍币孵化器为目标,不断推进NGK项目的落地,踏踏实实 ...