css 如何在不使用百分比(给定容器宽度)的情况下正确模拟百分比列?

ktca8awb  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(224)

我正在尝试制作一个特殊类型的CSS布局,就像这样(可以工作)。请注意,我没有使用Stack Overflow内置代码编辑器,只是因为它缺乏SCSS支持:
https://codepen.io/stratboy/pen/NWYZwex
正如评论中所问的,我还将添加一个编译后的CSS版本,但我真的认为您应该在CodePen上观看它,因为它也有一个大屏幕,目前需要真正看到发生了什么:

.main-container {
  max-width: none;
  margin-left: calc(-50vw + 50%);
  margin-right: calc(-50vw + 50%);
  background-color: #c3c3c3;
}

.inner-container {
  width: 100%;
  background-color: #777;
}

.columns {
  display: flex;
  justify-content: flex-end;
  width: 100%;
  background-color: rgba(0, 0, 200, 0.5);
  gap: 4em;
}

.left {
  text-align: left;
  height: 100px;
  background-color: cyan;
  width: calc(458px - 2em);
}

.right {
  text-align: right;
  height: 100px;
  width: calc(50vw + 114.5px - 2em);
  background-color: red;
}
<div class="main-container">

  <!-- <div class="inner-container"> -->

    <div class="columns">
      <div class="column left">
        left
      </div>
      <div class="column right">
        right
      </div>
    </div><!-- cols -->

  <!-- </div> --><!-- inner -->

</div>

以上是右边的出血边缘列。基本上,给定一个居中的1145像素的"底层"或"重影"容器,我想要一个40%的列和一个出血边缘列,间距为4em。在上面,我可以做到这一点。
列应与使用通用弹性基准方法的其它类似组件"对齐",即40%和60%。但我发现,与普通弹性基准布局相比,上述解决方案的效果并不理想。在此,我尝试了另一种类似的方法,但结果相同:列未与标准Flex布局完全对齐:
https://codepen.io/stratboy/pen/PoeNPMz
正如评论中所问的,我还将添加一个编译后的CSS版本,但我真的认为你应该在CodePen上观看它,因为它也有一个大屏幕,目前需要真正看到发生了什么:
一个二个一个一个
请看一下青色列。例如,以下内容将导致略低于弹性基础的内容:百分之四十

$container-max-width: 1145px;
$gap: 4em;
width: calc(#{$container-max-width / 100 * 40} - #{$gap / 2} );

为什么它不能工作呢?本质上,我认为这可能取决于浏览器如何计算基于flex-basis元素的渲染。我不知道...

kkih6yb8

kkih6yb81#

基本上,RenevanderLende的评论解决了这个问题:从“left 2”和“right 2”flex-basis中减去2 em(间距的一半)。这里“间距加到元素的总宽度”很重要。这是关键。

相关问题