提问者:小点点

当子级依赖父级,父级依赖子级时,浏览器如何计算宽度


我在React应用程序上遇到了各种小故障,奇怪的渲染工件等等,并且想知道从浏览器的角度定义维度的工作方式。

假设我有一个网格显示,其中有一个div,它具有grid-template-columns:1fr auto1fr和一个子div,它具有跨越grid-columns:2/3-换句话说,跨越在父网格的auto区域中。

正如我所理解的,网格模板列中的值auto定义了要调整大小以适应其内容的列。

现在让我们添加一个img,将max-width设置为100%-换句话说,我们不希望超过父容器的大小。

但是,父容器的宽度是由auto规则决定的--那么浏览器如何让孩子知道要占100%呢?

示例

null

.box {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  background-color: lightblue;
}

.box>div {
  border: 1px solid red;
  grid-column: 2 / 3;
  margin: 10px 10px 0px;
}
<div class="box">
  <div style="">
    <img src="https://via.placeholder.com/800" style="max-width:100%">
  </div>
</div>

null


共1个答案

匿名用户

为了解释这一点,我将从一个更简化的示例开始,该示例将产生相同的输出:

null

<div style="display:inline-block">
  <img src="https://via.placeholder.com/1000x100">
</div>

<div style="display:inline-block">
  <img src="https://via.placeholder.com/1000x100" style="max-width:100%">
</div>

<div style="display:inline-block">
  <!-- even a big explicit width specified won't change the behavior -->
  <img src="https://via.placeholder.com/1000x100" style="wdith:2000px;max-width:100%">
</div>

<div style="display:inline-block">
  <img src="https://via.placeholder.com/1000x100" style="width:100%">
</div>