百分比布局注意
百分比布局的参照
所以百分比都是相对于其containing block(包含块)来计算的
确定包含块
确定一个元素的包含块的过程完全依赖于这个元素的 position 属性:
- 如果 position 属性为 static 或 relative ,包含块就是由它的最近的祖先块元素(inline-block、block、list-item),或者 BFC(table、flex、grid) 的内容区的边缘组成的。
- 如果 position 属性为 absolute ,包含块就是由它的最近的 position 的值不是 static (也就是值为fixed, absolute, relative 或 sticky)的祖先元素的内边距区的边缘组成。
- 如果 position 属性是 fixed,可以认为包含块就是视口 viewport。
width和height
这个最常用也是最简单的了,它们的百分比计算是基于包裹它的父元素的宽和高来计算
margin和padding
百分比的计算是基于其包含块的宽度(和高度没关系) 百分比的计算规则适用于margin和padding的四个方向 如果包含块的宽度取决于该元素,那么百分比的使用结果是未定义的(应该是避免循环)
border-radius
横轴上的百分比参考的是元素自身的宽度,纵轴上的百分比参考的是元素自身的高度,负值是无效的
background-position
如果使用百分比,那么百分比的计算应该是这样的(父元素-背景图片)*百分比 假设一个容器的长宽为300X200,图片是150X150,那么当设置background-position: 20% 100%
(0, 0) => ((400 - 150) * 20%, (200 - 150) * 100%)
font-size
这个属性的百分比参考值是它的父元素的font-size,没有太多的信息,是比较纯粹的一个百分比。
line-height
line-height这个属性的百分比参考的是自身的font-size大小
vertical-align
vertical-align顾名思义是纵向对齐,其参考值是自身的line-height
bottom、left、right、top
定位使用的四个方向值,如果使用百分比的话,参考的是元素包含块(不含padding)的尺寸,这个时候不同于margin或padding,left和right是参照包含块的宽度,bottom和top是参照包含块的高度
transform: translate
自身元素的宽度或者高度,这里的宽度和高度包含了padding和border,参考的应该是border-box的尺寸
总结一下
和定位有关的,基本都是按照包含快,也就是父级来来计算百分比,而其他一些属性按照元素自身的比例来设置百分比