众所周知,CSS 中的百分比值在翻译元素本身的大小相对而言是相对的,而(据我所知)应用于任何其他属性时它们是相对于父级大小的。例如,在我们的浏览器中出现 flexbox
或 grid
之前,这已被广泛用于垂直居中元素。
.wrapper {
width: 500px;
height: 200px;
background-color: lightgray;
}
#element {
width: 42px;
height: 42px;
background-color: red;
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div class="wrapper">
<div id="element"></div>
</div>
left
和top
属性,是指相对于.wrapper
的宽度(或高度,对于top
)的50%,因此分别为250px和100px。但是在translate
中,-50%应用于#element
本身,因此它是42px的50%。我看到了它的好处,但我不明白这种(表面上的)不一致的原因。所以,
1.为什么CSS翻译中的百分比值是相对于元素本身而不是相对于父元素大小的? 2.还有其他具有此行为的属性吗?
编辑:正如SergeS的答案中所述,我在MDN中看到所有属性都有自己的参考
<percentage>
值的定义。在
transform
中,引用块: 百分比-指边界框的大小。
在
top
中,百分比 - 指的是包含块的高度。
在
margin
中,百分比 - 指的是包含块的宽度。
我很好奇这些定义的原因。