我已经做了一段时间的css,但不知道这是怎么回事.感觉真的很傻:)你能解释一下这种行为吗?

.parent {
  display:inline-block;
}

.child {
    border: 2px solid red;
    padding: 20px; /* this works as expected */
    padding: 20%;
    box-sizing: border-box; /* makes no difference */
}
<div class="parent">
  <div class="child">CSSisAwesome</div>
</div>

推荐答案

由于使用百分比值,您将面临循环计算.父元素是内联块元素,因此其宽度由其内容定义,并且相同的内容使用百分比值,因此内容需要引用该百分比,即父元素的宽度.你有一个循环.

在这种情况下,浏览器将首先忽略填充来定义父宽度,然后计算填充,但我们不能再次计算父宽度,因为将有一个无限循环.

请判断以下内容:

.parent {
  display: inline-block;
}

.child {
  border: 2px solid red;
  
}
<div class="parent">
  <div class="child">CSSisAwesome</div>
</div>
<br>
<br>
<div class="parent">
  <div class="child" style="padding: 20%;">CSSisAwesome</div>
</div>

请注意,在这两种情况下,父对象的宽度是相同的,并且该宽度由内容定义.填充是稍后添加的,并且会造成溢出.

您可以在the Specification中找到模式详细信息

有时,百分比大小的长方体的包含块的大小取决于长方体本身的固有大小,从而产生循环依赖.

相关问题:

Why does percentage padding break my flex item?

CSS Grid - unnecessary word break

How percentage truly works compared to other units in different situations

Css相关问答推荐

Angular中嵌套数组的网格

CSS Grid,意想不到的差距

如何将bslib::card()中的扩展按钮移到右上方,其中full_screen = TRUE?

具有不同边框宽度和 colored颜色 的边框半径,Safari渲染问题

如果一个类紧挨着另一个具有特定类的元素,请使用特殊的CSS,只使用不带JS的CSS

当滚动量较小时,在滚动问题上动画粘性导航

当前的 html 标签没有发生两列布局

如何在父叠加层之上呈现子子

Blazor 组件未链接 css

整个列的 CSS Grid Margin Top

Ant Design:将位置子菜单移动到屏幕顶部

页脚上方的图像分隔线使用 ::before 伪元素

使用自定义 CSS 在 WebView 中呈现 HTML

Select 标签的占位符

弹性框中的边距折叠

CSS 悬停与 JavaScript 鼠标悬停

为什么是垂直对齐:文本顶部;不能在 CSS 中工作

为什么 CSS 中的光标:指针效果不起作用

CSS(webkit):在绝对定位元素上用底部覆盖顶部

height: 100% 或 min-height: 100% 用于 html 和 body 元素?