终于弄清楚百分比在CSS中是如何工作的了!
时间:2023-03-20 15:58:53
科技观察
你对百分比在CSS中的工作原理感兴趣吗?你有没有想过为什么它有时会乱七八糟,毫无头绪?反正我有,所以今天分享这篇文章是为了自己加深理解,也希望对大家有所帮助。百分比是多少?作为百分比,显然应该有一个目标作为参考源,通常是父元素。这是正确的,但并不涵盖所有情况。最正确的答案是包含块,包含我们元素的块,它不必是直接父元素。看看下面的例子:代码:
.grandparent{position:relative;宽度:200px;高度:200px;背景:#eaeaea;}.parent{宽度:100px;高度:100px;背景:#aaa;}.child{位置:绝对;宽度:50%;高度:50%;顶部:25%;left:25%;background:red;}在上面的示例中,我创建了3个嵌套div,它们是具有以下特征的3个正方形最外层的组件div是浅灰色,大小为4x4父元素div是深灰色颜色,大小为2x2,红色子div分配了50%的大小。如果百分比单位来源于parent,child应该是它的1/2大小,但是上面不是,child的大小实际上等于parent,也就是祖父母大小的1/2。原因是祖父母div是子div的真正包含块,因为孩子有position:absolute,对应于position:relative在祖父母中设置。因此,要判断哪个是元素的实际包含块,完全是根据元素本身的position属性。但是对于某些属性来说,百分比单位的引用来源既不是父块也不是包含块,而是它本身——自身元素。百分比属性width/height如上例所示,当一个元素的宽度被赋予一个百分比值时,宽度基于包含块的宽度,而高度基于包含块的高度。padding对于填充,垂直(padding-top/padding-bottom)或水平(padding-left/padding-right)是根据包含块的高度计算的。这是一个示例:
.parent{background:#eaeaea;width:300px;height:200px;}.child{display:inline-block;background:red;padding-top:50%;padding-left:50%;}.parent{position:relative;}本例在线地址:https://codepen.io/khangnd/pen/powbjEL:父div的大小为6x4。子div的大小为0,但是padding-top和padding-left分别是50%。最后的结果是子元素的大小相当于父元素宽度的1/2,也就是一个3x3的正方形。边距和填充、边距百分比(垂直和水平)也是相对于包含块的宽度计算的。这是一个示例: