CSS零碎

盒模型在W3C和IE中的区别

IE盒模型问题只会出现在IE5.5及更早的版本。

W3c盒模型,width = content-width。设定好width后,增加padding等都会增加整体盒子的宽度。

IE盒模型,width = content-width + padding + border。设定好width后,增加padding会减少content-width的宽度,整体盒子的宽度不变。

EM

父元素也用em表示,子元素font-size如何计算:子元素以父元素font-size为基准,子元素1em等于父元素font-size大小。若子元素设为1.2em,实际px为1.2*1.2。

绝对定位,水平竖直居中,需要设定margin: auto的原因

水平竖直居中有一种写法,设定宽高,left、right、top、bottom都为0,margin为auto。

绝对定位的元素的布局取决于三个因素:元素的位置、元素的尺寸、元素的margin。

在元素位置固定的时候则分配尺寸(因此四边都为零会平铺满),尺寸固定则分配margin,此时margin设为auto自适应,元素就居中了。

clear:both之后

clear:both之后,浮动元素下方的元素的margin-top会被覆盖(直到margin-top大到足以顶到一个不浮动的元素),但是浮动元素的margin-bottom却不会被覆盖。

关于外边距合并

竖直方向两个元素的margin重合就会“失去效力”。具体表现为,如果是兄弟元素重合,则取大的那个margin。如果是父子元素重合,子元素的margin将不能够“顶开”父元素,而是与父元素(或祖先元素)的margin重合,且仍旧是只有更大的那个生效。

解决方法:

  1. 给父元素设置padding/border,有了支撑,子元素的margin将不会脱出。
  2. 使父元素脱离文档流,如positon: absolute/fixed、float。之所以只让父元素脱离文档流而不是子元素,是因为父元素脱离文档流,子元素仍在其中支撑出空间。而子元素脱离文档流,则与父元素完全“失联”(除了定位),父元素则失去了支撑,完全塌陷。
  3. 父元素overflow: hidden/auto。

width: 100%

好奇怪,为什么我长期以来都有一个谬误,觉得 width: 100% 是相对于父元素宽度的,所以如果父元素有 padding,则内容 100% 会超出。这是错误的。

其实是相对于父元素 content 盒子的宽度,不包括 padding。所以 width: 100% 会刚好充满父元素,并不会超出。

CSS 的加载会阻塞吗?

https://www.cnblogs.com/chenjg/p/7126822.html

CSS 的加载不会阻塞 DOM 树的解析,但是会阻塞 DOM 树的渲染。
CSS 的加载会阻塞 JS 的执行。即遇到 script 标签且此时 CSS 正在加载,该 script 标签不会执行。在 JS 被阻塞执行的时候,后续 html 也不会解析。
JS 的执行也会阻塞后续 html 的解析。加载默认也会阻塞,但是加上 defer sync 则加载不会阻塞。等到执行时仍旧会阻塞。