前言百分比的应用随处可见,在这里作一个小小的总结。git 使用百分比的场合
若是上面列举的全部属性你都可以轻松地说出它们的百分比含义,那么估计这篇文章就不大适合你了。github 接下去咱们使用JsFiddle上面的demo来逐个说说这些样式的百分比bash 1. width 和 height这个最经常使用也是最简单的了,它们的百分比计算是基于包裹它的父元素的宽和高来计算,好比:布局 有一种特殊状况是,父元素没有明确的高度定义 [ 指的是不定义height或者使用min/max-height这种,都属于不明确的高度定义 ],而且子元素使用百分比而且不是绝对定位,那么这时候的百分比等同于auto。this width : auto在 CSS3 中, .example1 {
width: fill-available;
}
.example2 {
width: max-content;
}
.example3 {
width: min-content;
}
.example4 {
width: fit-content;
}
复制代码 width 的四种表现充分利用可用空间 [ fill-available ]
收缩与包裹 [ fit-content ]
超出容器限制 [ max-content ]
height : auto
2. margin和padding这两个属性的百分比就比较有意思了,也是咱们常常用错的两个。在CSS盒子模型规范明确提出了其百分比的含义:设计
padding的解释也是相似。 上面的意思能够总结出三点: 百分比的计算是基于其包含块的宽度 这时定有童鞋会疑惑,为何 CSS 规范的制定者会选择使用包含块的宽度来做为参考值,而不是高度? 其实在上面总结的三点中已经有所涉及的了,在咱们平时的样式布局中,元素的高度取决于子元素的高度,若是子元素的 margin 或者 padding 的百分比又依赖于包含块的高度,那么两者互相依赖,就永远没法获得一个稳定的值,陷入了一种死循环,所以也许是基于这个考虑,CSS 的规范中才会提到上面要点的第三点。以上纯属本身的猜想,仅供参考。 margin : auto
padding : auto ?
3. border-radius根据MDN-border-radius的百分比介绍:
4. background-positionbackground-position 这个属性容许你在它的包含块中随意移动背景图片(或者渐变),默认值是0 0 若是使用百分比,那么百分比的计算应该是这样的,假设一个容器的长宽为400X200,图片是150X150,那么当设置 background-position: 20% 100%
(0, 0) => ((400 - 150) * 20%, (200 - 150) * 100%) font-size参照物 => 父元素 line-height参照物 => 自身 font-size 大小 vertical-align参照物 => 自身 line-height 大小 bottom、left、right、top参考的是元素包含块的尺寸
transform: translate在水平或者垂直居中的应用场景中,我最常使用的即是这个平移变换了,轻轻松松的-50%就可让块元素居中,那么这个百分之50%基于的是什么样的参考值呢?答案即是其自身元素的宽度或者高度,这里的宽度和高度是否包含了padding和border呢?
请注意,当百分比值用于可继承属性时,只有结合参照值计算后的绝对值会被继承,而不是百分比值自己。 |