Flexbox justify-content 无法在变换比例下正常工作

dra*_*035 4 css flexbox css-transforms

我有一个常规的无序列表项目,display: flexjustify-content: space-between应用于它(因此,.first_item触及 的左边缘.list.last_item触及 的右边缘.list):

<ul class='list'>
    <li class='first_item'>Item</li>
    <li class='middle_item'>Item</li>
    <li class='last_item'>Item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用 缩小项目transform: scale(0.5),现在这两个位置有一个空间,就好像justify-content: space-between“不知道”项目已经减少一样。

这是不对的:即使在缩小项目时,第一个和最后一个项目仍应接触容器的左右边缘。

发生了什么以及如何解决这个问题?

Mic*_*l_B 5

使用 缩小元素后transform,它会自动在其框内居中。

这是因为transform-origin属性的初始值为50%, 50%(即水平和垂直居中)。

结果,项目从容器的边缘偏移。

.list {
  display: flex;
  justify-content: space-between;
  border: 1px dashed black;
  padding: 0;
  list-style: none;
}

li {
  transform: scale(0.5);
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<ul class='list'>
  <li class='first_item'>Item</li>
  <li class='middle_item'>Item</li>
  <li class='last_item'>Item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

您可以调节变换元素的位置leftrighttransform-origin

.list {
  display: flex;
  justify-content: space-between;
  border: 1px dashed black;
  padding: 0;
  list-style: none;
}

.first_item {
  transform: scale(0.5);
  transform-origin: left;
}

.last_item {
  transform: scale(0.5);
  transform-origin: right;
}

li {
  transform: scale(0.5);
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<ul class='list'>
  <li class='first_item'>Item</li>
  <li class='middle_item'>Item</li>
  <li class='last_item'>Item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

规范中的更多详细信息:https : //drafts.c​​sswg.org/css-transforms/#transform-origin-property

  • 您的答案似乎适用于只有 3 个项目的情况,但是,如果 Flexbox 中有更多项目,则中心项目之间的间距将小于中心和边框元素之间的间距,因为 Flexbos 确实没有不使用比例变换属性进行计算。 (2认同)