我想在一个div里用flex方式做出这种布局,请教应该怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想在一个div里用flex方式做出这种布局,请教应该怎么做相关的知识,希望对你有一定的参考价值。

①到⑦都是父div的子div,①是纵向最长的子div,②到⑦是其他6个子div,现在我希望①~④的width相等,样子就像图片的这样,最好使用flex布局,因为表格布局不好添加子div(考虑到父div的width变大后,一行要变得能放更多个子div),使用float虽说是个不错的选择但我要怎么保证每列的width相等且正好填充满父div呢,我想使用flex的是考虑的有一个flex:1的属性,会自动填充满父div,而且子div设置min-width后父div的width变大后也容易在行里增加子div,但无法保证①和②③④的width相等,求给一个比较好的方案!

<div class="center">
    <div class="left">
        1
    </div>
    <div class="right">
        <div class="div d2">2</div>
        <div class="div d3">3</div>
        <div class="div d4">4</div>
        <div class="div d5">5</div>
        <div class="div d6">6</div>
        <div class="div d7">7</div>
    </div>
</div>
<style>
.centerwidth:800px; height:300px; margin:auto; background:#DC4244;
.center .left,.cente .right,.center .right .divfloat:left;
.center .leftheight:300px; background:#7353F3;
.center .right .divheight:150px;
.center .left,.center .right .divwidth:25%;
.center .right .d2,.center .right .d4,.center .right .d6background:#E616EC;
</style>

效果如图

追问

非常感谢但是,有一个很重要的属性就是,当“.center”的width扩大后,后面子元素可以加入空白扩大后的空白(在width很小时靠近more的div是隐藏的),以填满.center,而不是用百分比填满它。就像这几张图片似得,不同的是第一个div是跨行的

参考技术A 不是很好弄,仔细研究一下flex

在 flex 中以 100% 的高度拟合图像

【中文标题】在 flex 中以 100% 的高度拟合图像【英文标题】:Fit image with height 100% in flex 【发布时间】:2017-03-02 14:05:32 【问题描述】:

我在 div 中有一个响应式背景图像。我想在它上面有一个两列的 flex 布局,其中左侧布局的图像高度为父 div 的 100%,宽度自动缩放,如响应图像。右边是一个以 flex 为中心的两行文本。

这是迄今为止我能得到的最接近的。但是 flex 不会拉伸以适应背景 div 图像,并且当浏览器调整大小时,左侧图像不会相应地缩放。

注意:不要在代码中指定以px为单位的宽高

.parent 
  display: flex;
  align-items: center;


.left 
  height: 100%;


.right 
  flex: 1;
  background: blue;
  <div style="position: relative;">
    <img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTkyfCkzwQ7Lx4v3YRNao0lQgM-VkEj6iLWTHE8KqHF5tk4cl15WQ" style="width: 100%">
    <div style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;">
      <div class="parent">
        <div class="left">
          <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRsxhzGxiYQU_vp2YlN1LTMxQsYMhFDqTZLwfqMylCwqIahCu00Mf_0aDQ">
        </div>
        <div class="right">
          <p>
            123
          </p>
          <p>
            456
          </p>
        </div>
      </div>
    </div>
</div>

期望:

【问题讨论】:

这样的? jsfiddle.net/tgrs0uo4/1 @Michael_B 很近,但不幸的是没有。我在左栏中创建了一个带有方形图像的 [jsfiddle] (jsfiddle.net/tgrs0uo4/4) 以进行说明。如您所见,方形图像不保持弹性框内图像的纵横比(1:1) 试试这个:jsfiddle.net/tgrs0uo4/5 @Michael_B 更近了,但仍然缺少一些东西。图片不占用背景图片 div 的高度。理想情况下,图像高度应与背景图像 div 高度相同,同时保持图像自身的比例 只需从.left 容器中删除align-items: center:jsfiddle.net/tgrs0uo4/6 【参考方案1】:

删除 align-items: center; 来自parent div。

如果要居中对齐文本元素,请使用paddingposition: relative/position: absolute

然后申请 height: 100%; 图片。

【讨论】:

我已经更新了fiddle中的代码。浏览器调整大小时,我看不到左侧图像按比例缩放。并且 flex(或左图)高度不占背景图高度的 100%。

以上是关于我想在一个div里用flex方式做出这种布局,请教应该怎么做的主要内容,如果未能解决你的问题,请参考以下文章

九宫格布局使用了flex,两个和多个元素排版样式问题。

在移动端中的flex布局

div+css3弹性盒子(flex box)布局

用div加css怎么做出这种菱形框架??或者其他方法??

两个div并排,左边div固定宽度,右边宽度自适应”,至少列出4种。

移动端 三段式布局 (flex方式)