为什么带百分比的宽度在 CSS 中不起作用?

Why doen't width with percentage work in CSS?

这是我的代码,运行良好。

.c-table {
  display: flex;
  flex-wrap: wrap;
}

.c-plate {
  width: 50px;
  height: 96px;
}

.red {
  background: red;
}

.blue {
  background: blue;
}

.yellow {
  background: yellow;
}
<div class="c-table">
   <div class="c-plate red"></div>
   <div class="c-plate blue"></div>
   <div class="c-plate yellow"></div>
</div>

我把 .c-platewidth 改成了这样:

.c-plate {
  width: 50%;
  height: 96px;
}

.c-table {
  display: flex;
  flex-wrap: wrap;
}

.c-plate {
  width: 50%;
  height: 96px;
}

.red {
  background: red;
}

.blue {
  background: blue;
}

.yellow {
  background: yellow;
}
<div class="c-table">
   <div class="c-plate red"></div>
   <div class="c-plate blue"></div>
   <div class="c-plate yellow"></div>
</div>

我预计每个 div 和 c-plate class 的宽度变为 c-table 宽度的 50%。

但是,它没有按预期工作。

如@Geeky Quentin 所述,这是预期的行为。

您将 .c-plate 设置为 50% width。具有 .c-plate 的元素将寻找其父元素以获取 50% 的元素。由于您的 .c-table 没有设置宽度 属性,它只是变成了 body50%

您可以设置 .c-table 的宽度以使 .c-plate 继承该宽度。但是,它仍将是 50%,并且由于有 3 个 .c-plate,因此总共将是 150% 并绕到下一行,因为 flex-wrapwrap.

.c-table {
  display: flex;
  flex-wrap: wrap;
  
  width: 500px;
}

.c-plate {
  width: 50%;
  height: 96px;
}

.red {
  background: red;
}

.blue {
  background: blue;
}

.yellow {
  background: yellow;
}
<div class="c-table">
   <div class="c-plate red"></div>
   <div class="c-plate blue"></div>
   <div class="c-plate yellow"></div>
</div>

如果这不是您想要的结果,您必须更具体地说明您想要什么。

你想拥有这样的东西吗?

.c-table {
  display: flex;
  flex-wrap: wrap;
  
  width: 500px;
}

.c-plate {
  width: 33%;
  height: 96px;
}

.red {
  background: linear-gradient(to right, red 0 50%, white 50% 100%);
}

.blue {
  background: linear-gradient(to right, blue 0 50%, white 50% 100%);
}

.yellow {
  background: linear-gradient(to right, yellow 0 50%, white 50% 100%);
}
<div class="c-table">
   <div class="c-plate red"></div>
   <div class="c-plate blue"></div>
   <div class="c-plate yellow"></div>
</div>

它按预期工作。 child (c-plate) 的宽度是相对于 parent (c-table).

的宽度

这意味着如果您想更改 c-plate 元素的相对宽度,您必须在 c-table 上设置宽度。

body {
    background: black;
}

.c-table {
  display: flex;
  flex-wrap: wrap;  
  width: 50%;
  background: gray;
}

.c-plate {
  width: 50%;
  height: 96px;
}

.red {
  background: linear-gradient(to right, red 0 50%, white 50% 100%);
}

.blue {
  background: linear-gradient(to right, blue 0 50%, white 50% 100%);
}

.yellow {
  background: linear-gradient(to right, yellow 0 50%, white 50% 100%);
}
<div class="c-table">
   <div class="c-plate red"></div>
   <div class="c-plate blue"></div>
   <div class="c-plate yellow"></div>
</div>