当前位置: 首页 > 面试题库 >

Flexbox:当flex-direction:列,flex-wrap:wrap时,宽度计算错误

苍意智
2023-03-14
问题内容

使用flexbox时遇到问题。

我正在使用容器flex-direction: column; flex-wrap: wrap,因此我的内部物品实际上可以放在多列中。

问题在于浏览器仍将容器的宽度计算 为内部项目宽度的总和

我的容器块应具有较小的宽度(基于内容大小),但实际上很大。

无论如何,使用列而不是行时以这种方式计算容器的宽度也是非常不自然的。

看一下我代码中的绿色方块。它具有巨大的优势,但事实并非如此。此外,当您从容器中取出物品时,它会变小。

我期望容器的宽度较小,因此不会占用超过可用空间的一半。

在最新的Safari和最新的OS X上选中此选项。

.container {

  display: flex;

  flex-wrap: wrap;

  flex-direction: column;

  background: #aa0000;

  height: 100px;

}

.group {

  display: flex;

  flex-wrap: wrap;

  flex-direction: column;

  align-content: flex-start;

}

.g1 {

  background: #00aa00;

}

.g2 {

  background: #0000aa;

}


<div class="container">

  <div class="group g1">

    <div class="item">Item</div>

    <div class="item">Item</div>

    <div class="item">Item</div>

    <div class="item">Item</div>

    <div class="item">Item</div>

    <div class="item">Item</div>

    <div class="item">Item</div>

  </div>

  <div class="group g2">

    <div class="item">Item</div>

  </div>

</div>

问题答案:

这似乎是“ 柔性盒布局”模块中涉及flex-direction:column和的另一个错误flex-wrap: wrap

浏览器似乎无处不在。

在这种特殊情况下,如错误报告中所述:

在我看来,宽度的计算方式就像内部元素是水平(flex-direction: row)而不是垂直地布置。

在其他情况下,情况恰恰相反:

  • _当flexbox项目以列模式包装时,容器的宽度不会增加

在这两种情况下,当前都没有可解决此问题的flex方法。

对于这个特定问题,一个开发人员提供了一种CSS解决方法,但是我不确定它是否可以在所有浏览器中使用。除非您真的绝望,否则我不建议您这样做:

在某些情况下,您可以通过使用垂直书写模式来解决此问题。

也就是说flex-direction: column;,使用代替使用 flex-direction: row; writing-mode:vertical-lr;。记住writing-mode: initial;在flexbox的子代中重置为。



 类似资料:
  • flex-direction属性用于指定需要放置flex容器(flex-items)元素的方向。 usage - flex-direction: row | row-reverse | column | column-reverse 此属性接受四个值 - row - 从左到右水平排列容器的元素。 row-reverse - 从右到左水平排列容器的元素。 column - 从左到右垂直排列容器的元

  • flex-direction 排列方向 弹性和模型中内部的子元素的排列方向可以通过这个属性修改,那么我们就一起看下它的使用吧。 1. 官方定义 flex-direction 属性规定项目的排列方向。 2. 慕课解释 flex-direction 用来调整主轴的方向,我们知道主轴默认是水平方向且从左到右,而我们可以通过这个属性设置主轴的方向,即项目是水平方向从左到右还是垂直方向从上到下或者从下到上排

  • 问题内容: 如果使用IE11,似乎无法正确计算弹性项目宽度。 4个盒子每个都有flex-basis:50%,所以我们应该得到两行,每个盒子两个,但是在IE11中,每个盒子只有一行。将边框设置为0时,它可以正常工作。 知道这是一个错误还是有办法使IE11表现出来(并且仍然使用边框)? PS值得庆幸的是,在我的项目中,仅需要支持流行浏览器的最新版本,但是IE11就是其中之一。 问题答案: 使用该属性计

  • 问题内容: 昨天我在学校里有一个使用CSS 3 flexbox语句的网站。我以前从未用过。因此,我用Google搜索了一下,发现了很多不同样式的flexbox语句。 有些人写,有些用,还有一些。 那有什么区别呢?我应该使用哪个? 问题答案: 这些是不同的风格。 是2009年 的版本。 是2011年的版本。是实际版本。 保罗·爱尔兰的名言 警告:Flexbox进行了一些重大修订,因此本文已过时。总而

  • Fixed 盒子数量不是固定的 Fixed 盒子宽度是固定的 Fill 盒子只有一个 Fill 盒子宽度是动态的 如何让 Fill 填满剩余 Container 的宽度? 如下图

  • 我有一个用于标题导航的Flexbox,徽标向左对齐,ul项目向右对齐,就像传统样式一样。徽标和导航链接都是全宽Flexbox中的flex项目,我给了它们两个flex:50%。导航链接部分也是一个Flexbox(内部Flexbox),用于防止菜单堆叠,而不是以更好的响应方式运行。 当我将“对齐内容”应用于该内部Flexbox时,链接没有任何更改,就好像存在替代样式或该属性在内部文本框上不起作用一样。