在居中的flex项目下的flexbox网格

时间:2016-06-26 03:35:53

标签: html css css3 flexbox

我想要.container左侧的介绍部分和右侧的侧栏。

.intro部分下方的左侧,我希望有四个等距网格的div。

我遇到了“网格设置”的问题。我认为问题的一部分是父母有一些影响孩子的flexbox属性。

要求:介绍部分应位于.left-side的中心,而“网格”不应居中,方框应占用尽可能多的空间,以便在行上 2 两者之间有利润。 .intro应该是左侧宽度的80%。

我不想对结构做任何重大更改,这只是我项目设置方式的一小部分。

.container{
  width: 80%;
  margin: 0 auto; 
  display: flex;
}
.left-side{
  flex:8;
  display: flex;
  justify-content:center;
  flex-wrap: wrap;
}
.side-bar{
  flex: 2;
  height: 100vh;
  background: powderblue;


}
.intro{
  flex:3;
  width:80%;
  height: 300px;
  background: skyblue;
}

.box{
  background: red;
  width: 45%;
  height: 100px;
  flex:4;
  border:1px solid orange;
}
<div class="container">
  <div class="left-side">
    <div class="intro">
      intro
    </div>
    <div class="recent">
      <div class="box">1</div>
      <div class="box">2</div>
      <div class="box">3</div>
      <div class="box">4</div>
    </div>
  </div>
  <div class="side-bar">
    sidebar
  </div>

enter image description here

1 个答案:

答案 0 :(得分:0)

Flex项目也可以是flex容器。这使您可以将多个容器(flex-direction: rowcolumn)嵌套在更大的容器中。

对于您的布局,您可以构建一个由两个弹性项组成的列。第一项(.intro)的宽度为80%,可以水平居中。第二个项目(.recent)可以是一个Flex容器,其中四个项目排列在2x2网格中。

&#13;
&#13;
.container {
    width: 80%;
    margin: 0 auto;
    display: flex;
    justify-content: center;
    height: 100vh;
}
.left-side {
    flex: 4;
    display: flex;
    flex-direction: column;
}
.side-bar {
    flex: 1;
    background: powderblue;
}
.intro {
    flex: 3;
    height: 300px;
    width: 80%;
    margin: 0 auto;
    background: skyblue;
}
.recent {
    display: flex;
    flex-wrap: wrap;
    background-image: url("http://i.imgur.com/60PVLis.png");
    background-size: contain;
}
.box {
    margin: 5px;
    flex-basis: calc(50% - 10px);
    height: 100px;
    box-sizing: border-box;
    background: red;
}

body { margin: 0; }
&#13;
<div class="container">
    <div class="left-side">
        <div class="intro">intro</div>
        <div class="recent">
            <div class="box">1</div>
            <div class="box">2</div>
            <div class="box">3</div>
            <div class="box">4</div>
        </div>
    </div>
    <div class="side-bar">
        sidebar
    </div>
</div>
&#13;
&#13;
&#13;