@
june4 举例如下:
以 width 对 margin-left 的影响为例,假设有两个 div ,parent 和 child ,child 在 parent 里面,.parent 里面的 .child 宽度为 300px ,现在我给 child 添加一个 margin-left: -10px ,会发现整个 .child 左移 10 像素。好的,于是我们知道 margin-left: -10px 会让元素整体左移。
真的是这样吗?
这个时候把.child 的 width 去掉重新做实验。
就会发现 margin-left: -10px 并没有让整个元素左移,只是让左边缘左移了,右边缘并没有动。现在来总结一下:如果指定了 width ,那么 margin-left: 10px 会使元素整体左移如果没有指定 width ,那么 margin-left: 10px 只会使做边缘左移(也就是宽度扩大)
这就是非常典型的不正交:
* 为什么 width 的存在与否会影响 margin-left 的作用?
* 有没有 width 之外的其他属性也会影响 margin-left 的作用?还有哪些我不知道的会互相干涉的属性?
这就是不正交的恐怖之处,你只有把所有属性与 margin-left 一起用一下,才能得知 margin-left 的真正规律。
这还只是两个属性,如果更多的属性一起过来呢?
这些“不正交”的例子,需要一个个去记忆,各属性被影响的情况都不一样。
所以一直就有人说 CSS 不是编程,是“背表”,源头就在这。
现代基于 CSS 的 UI 已经很大程度把这些东西给屏蔽了,大部分时候,写 UI 只是在排列组合一个个的方盒子,确实比当初手写 CSS 容易很多。
但是这个“不正交”问题并没有被彻底埋葬,它就在那里,说不准啥时候就蹦出来。
其它的,类似 html + CSS 这样的“标记语言 UI 设计系统”,在样式问题上,基本都没有采取 CSS 这样的设计