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

布局可行吗?具有多个列和行的Flexbox vs Float布局

金成济
2023-03-14
问题内容

我很好奇flexbox是否可以使用这种布局。我似乎无法得出第3和第4格归入第二。这对于浮点数来说非常容易,只是好奇是否缺少一些可能对flexbox有帮助的属性。

布局

+-------+-------+-------+
| div 1 |     div 2     |
+       +-------+-------+
|       | div 3 | div 4 |
+-------+-------+-------+

标记

<div class="features">
  <div class="feature feature-1">1</div>
  <div class="feature feature-2">2</div>
  <div class="feature feature-3">3</div>
  <div class="feature feature-4">4</div>
</div>

问题答案:

Flexbox不喜欢在多列或多行中扩展的flex项目,因为实际上flexbox没有网格概念。

但是,使用一些技巧,您可以实现此布局(以及更复杂的布局):

  • 使用行布局

    ┌─┬─┬─┬─┐
    

    │1│2│3│4│
    └─┴─┴─┴─┘

  • 使用允许换行flex-wrap: wrap

  • 使用伪元素在2之后强制换行

    ┌─┬─┐
    

    │1│2│
    ├─┼─┤
    │3│4│
    └─┴─┘

  • 使用flex: 1上的所有Flex项目。

    ┌─────────┬─────────┐
    

    │1 │2 │
    ├─────────┼─────────┤
    │3 │4 │
    └─────────┴─────────┘

  • 设为margin-left: 50%3

    ┌─────────┬─────────┐
    

    │1 │2 │
    └─────────┼────┬────┤
    │3 │4 │
    └────┴────┘

  • 设置height: 200px为2、3和4。设置height: 400px为1。

    ┌─────────┬─────────┐
    

    │1 │2 │
    │ ├─────────┘
    │ │
    └─────────┼────┬────┐
    │3 │4 │
    └────┴────┘

  • 设置margin-bottom: -200px为1:

    ┌─────────┬─────────┐
    

    │1 │2 │
    │ ├────┬────┤
    │ │3 │4 │
    └─────────┴────┴────┘

  • 由于您有边框,因此请box-sizing: border-box在所有框上使用以height包含边框。否则需要1 height: 416px; margin-bottom: -216px

  • 注意flexbox auto作为的新初始值引入min-width。这样可以使内容迫使某些盒子增长。这会破坏布局,因此请使用min-width: 0或将设置overflow为,将其禁用visible

这是代码:

.features {

  display: flex;

  flex-flow: row wrap;

}

.feature {

  background: #ccc;

  border: 8px solid #fff;

  height: 200px;

  box-sizing: border-box;

  min-width: 0;

  flex: 1;

}

.feature-1 {

  /* Make it taller without increasing the height of the flex line */

  height: 400px;

  margin-bottom: -200px;

}

.features:after {

  /* Force line break */

  content: '';

  width: 100%;

}

.feature-2 ~ .feature {

  /* Place 3 and 4 after the line break */

  order: 1;

}

.feature-3 {

  margin-left: 50%;

}


<div class="features">

  <div class="feature feature-1">1</div>

  <div class="feature feature-2">2</div>

  <div class="feature feature-3">3</div>

  <div class="feature feature-4">4</div>

</div>

但是,修改HTML以具有嵌套的flexbox会更容易。

#wrapper {

  height: 400px;

}

.flex {

  display: flex;

}

.column {

  flex-direction: column;

}

.flex > div {

  min-width: 0;

  flex: 1;

}

.item {

  background: #ccc;

  border: 8px solid #fff;

}


<div id="wrapper" class="flex row">

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

  <div class="flex column">

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

    <div class="flex row">

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

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

    </div>

  </div>

</div>


 类似资料:
  • 问题内容: 我的布局基本上全部统一,其中包含应用程序主供稿所需的所有内容。首先将所有可变项(图像,视频缩略图等等)设置为,并在需要时设置为。 问题是,有时,可能是由于的回收行为,这是supposedto是该项目是在错误的地方。 范例: 项目1包含文字 项目2包含图片 项目3包含图片 我一直向下滚动到编号x,然后向上滚动,这就是我得到的: 项目1包含来自项目x的图片,有时包含项目3 项目2包含图片

  • 主要内容:column-count,column-fill,column-gap,column-rule,column-span,column-width,columns当需要在页面中展示大量文本时,如果每段的文本都很长,阅读起来就会非常麻烦,有可能读错行或读串行。为了提高阅读的舒适性,CSS3 中引入了多列布局模块,用于以简单有效的方式创建多列布局。所谓多列布局指的就是您可以将文本内容分成多块,然后让这些块并列显示,类似于报纸、杂志那样的排版形式,如下图所示: 图:多列布局演示 CSS3 中提

  • 在CSS3之前,要让Web页面像报纸、杂志的排版一样,呈现多列布局,你必须将内容拆分到不同的标签中,然后分别设定样式,或者使用浮动和绝对定位,或者使用JS脚本等,并且实现起来也很困难。 CSS3新增了多列布局特性,彻底改变了这样的局面,这种新语法能够让页面内容轻松地分布到多列网格中,实现类似报纸、杂志一样的排版效果,而无需任何额外的标签。 多列布局相关的核心属性包括列宽和列数、列间隙和边框、分列符

  • 本文向大家介绍Flutter自动换行和两列布局,包括了Flutter自动换行和两列布局的使用技巧和注意事项,需要的朋友参考一下 Row 和 Column 是 Flex 组件,是无法滚动的,如果没有足够的空间,flutter就提示溢出错误。 这种情况下,Expanded 或 Flexible 组件可用作长文本的自动换行。 在 Flutter文档中 虽然没有明确说明,但是在主轴上如有内容超出空间, E

  • 我在尝试用自动布局实现一些非常基本的布局行为时遇到了困难。我的视图控制器在IB中看起来是这样的: 最上面的标签是标题标签,不知道会有多少行。我需要标题标签显示所有的文字行。我还需要另外两个标签和小的图像,以布局的权利下面的标题,但它恰巧是高的。我设置了标签和小图像之间的垂直间距约束,以及标题标签和它的超级视图之间的顶部间距约束和小图像和它的超级视图之间的底部间距约束。白色UIView没有高度限制,

  • 我正在基于模板进行查看,但在某些区域我想输入片段。 模板:base。html 查看:列表。html 片段:片段/init.html 对于头部碎片,它可以正常工作。但在页脚中,但在页脚中,将显示模板的代码。 输出: 我希望你能帮助我。提前感谢。 使现代化 基础html 列表html init.html 输出: 我设法在页脚中包含代码片段,但我的目标是替换它。 解决方案: