CSS正交性分析

article/2025/7/23 11:22:38

Refer: 为什么 CSS 这么难学?

我先来解释一下什么是正交。你调过显示器的「亮度」、「色调」和「饱和度」吧。
「亮度」就是明暗程度,值越大,屏幕越亮。
「色调」就是颜色,你通过调色调,可以把红色调成绿色。
「饱和度」就是鲜艳程度,值越大越鲜艳。
「正交」就是,你调节这三者中的一个时,不影响其他两个效果。你调节「亮度」的时候「色调」和「饱和度」不会变化。你调节「色调」的时候「亮度」和「饱和度」不会变化。你调节「饱和度」的时候「亮度」和「色调」不会变化。
「正交」看起来应该是理所当然的,对吧。想象一下「不正交」的情况:你调节「亮度」的时候,「色调」和「饱和度」会跟着无规律的变化。如果是这样,你会调得想死,因为你很难调到你想要的效果。而 CSS,就是「不正交」的。
我以 width 对 margin-left 的影响为例,假设有如下代码:
在这里插入图片描述
.parent 里面的 .child 宽度为 300px,现在我给他添加一个 margin-left: -10px,会发现

在这里插入图片描述
好的,于是我们知道 margin-left: -10px 会让元素整体左移。

真的是这样吗?

这个时候把 width 去掉重新做实验,这是在添加 margin-left 之前:
在这里插入图片描述
这是在添加 margin-left 之后:
在这里插入图片描述
我们发现 margin-left: -10px 并没有让整个元素左移,只是让左边缘左移了,右边缘并没有动。
现在来总结一下:如果指定了 width,那么 margin-left: 10px 会使元素整体左移如果没有指定 width,那么 margin-left: 10px 只会使做边缘左移(也就是宽度扩大)

到了这里 就会发现之前写swfit的时候经常蛋疼的不得了但是却无法描述这种感觉,现在知道了 这种感觉叫:不正交。
更深一步去想:
为什么 width 的存在与否会影响 margin-left 的作用?
有没有 width 之外的其他属性也会影响 margin-left 的作用?恐怕你无法得知。
这就是不正交的恐怖之处,你只有把所有属性与 margin-left 一起用一下,才能得知 margin-left 的真正规律。

这还只是两个属性的影响,你能想象三个属性互相影响的情况吗?
虽然是这样的复杂 但是为什么有些人用起来就那么得心应手呢?
这是因为他们写的足够多了…

第二个例子:
大家都知道 position: fixed 是相对于视口(viewport)定位的。
先看正常情况:
在这里插入图片描述
网页右边是一个 iframe,红色的 .fixed 元素相对于 iframe 视口左上角定位,与我们预期一致。

接下来我在 .box 上面加一个 CSS3 中的属性,就会改变你的认知:
在这里插入图片描述
父容器加了 transform 之后,fixed 定位的元素居然相对于父容器定位。
天知道以后 CSS 会不会加更多元素来影响我已经认为是真理的事情?我说一个更实际的问题吧,你敢在接手一个项目时,在任意一个元素上加 transform 属性吗?你不敢!除非你把它的每个子元素的属性都检查一遍……确定没有 fixed 定位。
这就是「不正交」的恶心之处。
第三个例子,大家都知道给固定宽度的 div 加 margin: 0 auto 可以让它水平居中,很多人就问,那为什么 margin: auto 0(注意 auto 和 0 的位置反过来了)不能做到垂直居中呢?其实是可以的:
在这里插入图片描述
但是必须是在当前元素有 position: absolute; top: 0; bottom:0; 的情况下才能垂直居中。或者与 flex 结合起来用也行。

这就很「不正交」了……

当然 像这样不正交的例子还有很多 根本没办法去记忆…
怎么样学习不正交的东西呢?
有一个办法:试。
你试的组合情况越多,就越能了解各种奇怪的现象。
其实不用那么悲观,常用的组合也就几十种吧,都试出来并记下来就行了。


http://chatgpt.dhexx.cn/article/5B9fVi1B.shtml

相关文章

勒让德多项式的正交性和归一化

罗德里格斯公式正交性归一化应用 这学期上数学课时老师布置了一道习题:计算勒让德多项式的模。翻看本科数学物理方法教材,发现计算方法较复杂,且用到了生成函数 为了方便理清整个计算过程,这一博客直接从罗德里格斯公式出发并避免…

向量组的正交性

向量的内积定义 运算: 向量的正交性: 正交向量组的性质: 向量组的正交规范化 正交矩阵 定义: 正交矩阵的判定

拉盖尔多项式的正交性

标准拉盖尔多项式 拉盖尔多项式可以表示为: 拉盖尔多项式的正交性是指 当 时 上式的积分运算结果为0。这是一种加权的正交性。 证明: (1) 采用变换 容易得到,当 上式的结果为0是因为在进行微分运算后,各项均包含 , 各项的上下限均为0。 …

三角函数系的正交性

参考资料: https://zhuanlan.zhihu.com/p/341796771https://www.bilibili.com/video/BV1Et411R78v

1 三角函数的正交性

三角函数的正交性 三角函数的正交性三角函数系证明 三角函数的正交性 三角函数系 集合 { s i n 0 x , c o s 0 x , s i n x , c o s x , s i n 2 x , c o s 2 x , . . . } \lbrace sin0x, cos0x, sinx,cosx,sin2x,cos2x,... \rbrace {sin0x,cos0x,sinx,cosx,sin2x,cos2x,...…

正交的概念

“正交性”是从几何学中借来的术语。如果两条直线相交成直角,它们就是正交的,比如图中的坐标轴。用向量术语说,这两条直线互不依赖。沿着某一条直线移动,你投影到另一条直线上的位置不变。 在计算技术中,该术语用于表示…

正交性,从內积开始到施密特正交化

正交性 前言內积、长度和正交性[1]內积长度和距离正交向量非正交向量 正交集,正交基和正交投影正交集基定理1 正交基定理2 正交投影非零向量投影直线上的投影空间投影正交分解定理 格拉姆-施密特正交化参考 前言 多维空间,向量和矩阵,以及正…

三角函数正交性理解与Matlab分析

1.什么是正交性? “正交性”是从几何中借来的术语。如果两条直线相交成直角,他们就是正交的。在空间向量中,两个向量的标量积为零即两个向量正交。 如果两个函数满足,则称这两个函数正交。 2.什么是三角函数正交信号集&#xf…

mysql初期密码修改方式

1、适用解压版本的mysql 2、初始化mysql后,会随机生成一个密码,但比较复杂,(#一定记住) 初始化命令 mysqld -initialize 3、初始化后必须修改初始密码才能对mysql进行操作,这个时候操作就会报错误消息。 …

ubuntu20.04安装Mysql8.0以及mysql密码修改

前言 网上找到的这些关于这类的博客要么就是mysql版本过时了要么就完全没有用,浪费了我好多时间,于是我就把自己成功的经历分享给大家,希望能减少大家走弯路的时间。 Mysql的安装 很简单,一句话 sudo apt install mysql-serve…

Centos Mysql忘记密码,修改密码

当centos MySQL用户忘记密码,进不去MySQL,那就要进行修改密码了 看好了嗷,操作开始 首先用vim进一下配置文件:/etc/my.cof 添加一下skip-grant-tables #这行的意思就是设置空密码登录,毕竟密码都忘记了,不…

登录MySQL密码修改及密码遗忘的解决办法(centos)

1、修改密码 方法一 [roothost1 ~]# mysqladmin -uroot -p password Enter password: New password: Confirm new password: ​方法二 mysql> alter user rootlocalhost identified by MySQL123; Query OK, 0 rows affected (0.00 sec) 方法三 通过修改mysql数据库…

MySQL数据库忘记密码之修改密码

我目前使用的版本是MySQL Server 8.0 第一步:关闭MySQL服务 首先要停止mysql服务。可通过net stop mysql或者任务管理器中关闭。 第二步:跳过MySQL密码验证 进入命令提示符(管理员登陆)操作,进入mysql目录中bin文…

MySQL数据库忘记密码后,如何修改密码

MySQL修改密码(本人亲身试验可行!) 1、以管理员身份打开命令行 2、在命令行中进入MySQL的bin目录所在文件夹 即:在命令行中输入: cd [路径]路径查找如下: 命令行输入命令: 3、跳过MySQL用…

Linux忘记MySQL密码后修改密码

1、关闭mysql服务 service mysqld stop 2、找到my.cnf配置文件 whereis my.cnf 3、在[mysqld]标签下添加:skip-grant-tables vim /etc/my.cnf 4、启动mysql服务 service mysqld start 5、不用密码登录mysql,执行下面命令以后直接回车 mysql -u root 6、使用数据…

忘记mysql密码后如何修改密码(2022最新版详细教程保姆级)

忘记mysql密码后如何修改密码 注意事项步骤 注意事项 一共用到两个cmd窗口,每一个都要以管理员身份打开,且在修改密码后,要先关闭第一个跳过验证密码的mysql服务的cmd窗口,再启动mysql,否则会出错。在修改密码前&…

Mysql密码修改无效问题

记录一次修改mysql密码无效的经历。 因为项目需求需要用到阿里云服务器,于是我准备登录服务器去建表,结果忘记密码了,我用SQLyog保存的密码解码找到密码之后在云服务器用命令修改了密码。 修改密码命令 mysql> ALTER USER rootlocalhos…

mysql:Windows修改MySQL数据库密码(修改或忘记密码)

今天练习远程访问数据库时,为了方便访问,就想着把数据库密码改为统一的,以后我们也会经常遇到MySQL需要修改密码的情况,比如密码太简单、忘记密码等等。在这里我就借鉴其他人的方法总结几种修改MySQL密码的方法。 我就以实际操作…

Linux中mysql密码修改方法(亲测可用)

前提:安装mysql 解压mysql.tar.gz到指定目录进入mysql-5.7.18目录创建文件夹mkdir data创建用户来执行mysqld命令 groupadd mysql # 创建组mysql useradd -g mysql mysql # 创建用户,并指定组初始化数据库,在bin目录下 ./mysqld --initia…

MySQL - 修改密码的 3 种方式

在使用数据库时,我们也许会遇到 MySQL 需要修改密码的情况,比如密码太简单需要修改等。本节主要介绍了 3 种修改 MySQL 数据库密码的方法。 1. 使用 SET PASSWORD 命令 步骤 1)输入命令mysql -u root -p指定 root 用户登录 MySQL&#xff0c…