css - 为什么 CSS 翻译中的百分比值是相对于元素本身的?

标签 css

众所周知,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>

在此示例中,我们看到 50% 如何应用于 lefttop属性是指 .wrapper 的 50%的宽度(或高度,对于 top ),因此分别为 250px 和 100px。但是在translate -50% 应用于 #element本身,所以它是 42px 的 50%。

我看到了它的好处,但我不明白这种(明显的)不连贯的原因。所以,

  1. 为什么 CSS 翻译中的百分比值是相对于元素本身,而在任何其他属性中是相对于父元素的大小?
  2. 是否有任何其他属性具有此行为?

编辑:正如 SergeS 的回答中所述,我在 MDN 中看到所有属性根据定义都有自己对 <percentage> 的引用值(value)观。

transform ,

Percentages – refer to the size of bounding box.

top ,

Percentages – refer to the height of the containing block.

margin ,

Percentages – refer to the width of the containing block.

我很好奇这些定义的原因。

最佳答案

    • Translate = 获取当前元素并根据定义进行翻译。所以它考虑了当前的元素
    • left, top, ... - 和其他 position 属性 - 它们定义元素在父元素中的定位方式 - 因此,它们计算偏移父元素的位置(相对的父元素,最近的相对/absolute/绝对的固定元素)
    • padding、margin、... - 和其他 box 模型 属性 - 它们定义元素在父元素内的大小 - 所以它们再次与父容器相关
  1. 没有

关于css - 为什么 CSS 翻译中的百分比值是相对于元素本身的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46785836/

相关文章:

html - CSS 未设置未按预期工作。如何解决?

html - CSS/HTML Raising Bars 效果无法正常工作

css - 可变宽度的 flex 元素之间的等距分隔符

css - 像 Chrome 一样更改 Mozilla 和 I.E 中的滚动条格式

javascript - 动态表单附加字段

html - 均匀分布的列表项

javascript - 仅为数字字符指定字体?

css - 在引导模式中垂直居中动态加载的图像

css - 增加 href 元素内 img 和文本之间的空间(字间距?。填充?)

javascript - 使用 CSS/Javascript/Jquery 旋转文本