能否使用 CSS calc() 函数使元素的高度与其宽度相匹配?我的尝试不起作用

Can you use CSS calc() function to make the height of an element match its width? My attempt is not working

calc() 函数没有像我在代码中预期的那样工作。

高度不是按容器宽度的 20% 计算的,而是折叠的。

html:

.box {
  width: 20%;
  height: calc(20%);
  margin: auto;
  background-color: olive;
}
<div class="box">
  
</div>

我已经尝试添加一个计算,例如 "height: calc(20% - 0px);",但高度仍然只是坍缩为零。

谁能看看我做错了什么?谢谢!

尝试使用视口宽度

视口是您设备上 html 页面的可见部分。

您可以看到的页面大小为 100vw * 100vh,其中 vw 和 vh 是视口大小单位。

.box {
      width: 20vw;
      height: calc(20vw * 0.02);
      margin: auto;
      background-color: blue;
     }

正如我在上面评论的那样,高度百分比是相对于父元素的高度,使用 calc() 不会改变行为,因为 calc(20%) 与简单的 20% 相同。

此函数将简单地进行一些计算以提供您的 属性 使用的结果,因此无论是否使用 calc(),逻辑都将始终相同。

您需要为父容器设置高度,以便您的元素具有高度:

.container {
  height: 100px;
}

.box {
  width: 20%;
  height: calc(20%);
  /* same result with the below
  height: calc(20% / 1);
  height: calc(20% - 0px);
  */
  margin: auto;
  background-color: olive;
}

.box-1 {
  width: 20%;
  height: 20%;
  /* same result without calc*/
  margin: auto;
  background-color: red;
}

.box-2 {
  width: 20%;
  height: calc((50% + 20px) / 2);
  /* 50% from parent height = 50px
     50px + 20px = 70px
     70px / 2 = 35px*/
  margin: auto;
  background-color: yellow;
}
<div class="container">
  you will see this element because height is set to container
  <div class="box">
  </div>
  <div class="box-1">
  </div>
  <div class="box-2">
  </div>
</div>
you will not see these elements because no height set to parent container (the body)
<div class="box">
</div>
<div class="box-1">
</div>
<div class="box-2">
</div>

现在,如果您想在元素的 height/width 之间建立关系,您可以考虑使用变量,但它不适用于 % 值:

:root {
  --size-box:200px;
}

.box {
  width: var(--size-box);
  height: calc(0.2 * var(--size-box));
  margin: auto;
  background-color: olive;
}
.big {
   --size-box:400px;
}
.per {
   --size-box:40%;
}
<div class="box">
</div>
<div class="box big">
</div>
we don't see the below one because of the same issue, using % in height and no height specified in parent element
<div class="box per">
</div>

如果你想保持元素的纵横比,你可以检查这个问题:Maintain the aspect ratio of a div with CSS

就把

height:0; padding-top:100%; 

填充是根据元素的宽度计算的。