【问题标题】:Scaling a flexbox child with transform leaves empty space使用 transform 缩放 flexbox 子元素会留下空白空间
【发布时间】:2018-07-11 23:24:11
【问题描述】:

我有一个带有 5 个直接子级的 flexbox。第一列和最后一列 (.colonnade__column) 应缩放为零(而不是 display: none)。 完成后,内容按预期缩放,但保留空间。所以下一个/上一个元素不会移动。

我尝试调整列子元素的大小并使列本身更加灵活,但我陷入了死胡同……

HTML

<div class="colonnade">
    <aside class="sidebar colonnade__column alpha">
        <div class="">
            NAVI
        </div>
    </aside>
    <label class="colonnade__trigger alpha" for="colonnade-alpha">
        <span class="label">
            Show Navigation
        </span>
    </label>
    <main class="main" id="main">
    </main>
    <aside class="sidebar colonnade__column omega">
        <div class="">
            CART
        </div>
    </aside>
    <label class="colonnade__trigger omega" for="colonnade-omega">
        <span class="label">
            Show Cart
        </span>
    </label>
</div>

CSS

.colonnade {
    display: flex;
}

.colonnade__column {
    padding: 1em;
    width: 20%;
    min-width: 16em;
    max-width: 20em;
    /*display: none;*/
    transform: scaleX(0);
    transition: transform .3s;
    background: #ccc;
}

.colonnade__column.alpha {
    transform-origin: 0 0;
}
.colonnade__column.omega {
    transform-origin: 100% 0;
}

.colonnade__state.alpha:checked ~ .colonnade__column.alpha,
.colonnade__state.omega:checked ~ .colonnade__column.omega {
    /*display: block;*/
    transform: scaleX(1);
}

看看codepen。该行为由带有垂直文本的浅灰色区域触发。

https://codepen.io/bitstarr/pen/WKbMjL

【问题讨论】:

  • 变换只是视觉效果,不影响布局
  • 确实....这是基本的。
  • 我正在寻找一个似乎已经失效的副本,这是codepen.io/gc-nomade/details/jzyBaz的sn-p
  • 你不能定位你想绝对隐藏的那个吗?还有为什么你不能使用显示为什么用比例隐藏它,你从来没有解释过?
  • 隐藏外部内容应该有很好的效果,不像显示属性那样二进制。同样使用绝对定位,侧边栏可以覆盖主要内容,在我的示例中,主要内容的大小取决于侧边栏。

标签: css flexbox css-transforms


【解决方案1】:

Temani 的评论是正确的:transform 只是视觉效果,不影响布局。布局是在应用 变换之前计算的。

相反,您可以通过使用 flexbox 属性来实现此效果:

.colonnade {
    display: flex;
}

.colonnade__column {
    flex: 0 1 0; /* Shorthand for: flex-grow, flex-shrink, flex-basis */
    padding: 1em 0; /* Remove left/right padding when columns are hidden */
    transition: all .3s;
    background: #ccc;
}

.colonnade__state.alpha:checked ~ .colonnade__column.alpha,
.colonnade__state.omega:checked ~ .colonnade__column.omega {
    flex: 1 0 20%;
    padding-left: 1em;
    padding-right: 1em;
}

在此处更新演示:https://codepen.io/wiiiiilllllll/pen/pZvLzj

【讨论】:

  • 以您的意见开始新的一天真的很有帮助。我将填充从列移动到子元素,所以现在只有一个 flex 属性的切换。见codepen.io/bitstarr/pen/mjJJEw
  • 此解决方案不能包含缩放的孩子。有场景规模是必要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2016-04-22
相关资源
最近更新 更多