为了账号安全,请及时绑定邮箱和手机立即绑定

带有Flexbox的CSS正方形网格

带有Flexbox的CSS正方形网格

临摹微笑 2019-12-25 15:52:32
我正在尝试创建一个自适应的正方形网格。正方形应调整大小以适合视口的宽度。更改视口高度时,正方形不应调整大小。我了解了如何调整每个正方形的宽度,但是我不知道如何在视口宽度改变时使元素变为正方形以及如何缩放其高度。在小提琴下面的示例中,七个正方形应始终水平放置,并且应按正方形缩放。我不在乎有多少行可见。在这里提琴http://jsfiddle.net/gonyhvz8/11/<body><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div><div class="flex-container">    <div class="flex-item">1</div>    <div class="flex-item">2</div>    <div class="flex-item">3</div>    <div class="flex-item">4</div>    <div class="flex-item">5</div>    <div class="flex-item">6</div>    <div class="flex-item">7</div></div>
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

您不应设置任何大小。您可以使用额外的元素或带有%的垂直填充的伪元素。这将允许您使用width作为参考:显示以下内容的代码段:


.flex-container {

    padding: 0;

    margin: 0;

    list-style: none;

    display: -webkit-box;

    display: -moz-box;

    display: -ms-flexbox;

    display: -webkit-flex;

    display: flex;

    -webkit-flex-flow: row;

    justify-content: space-around;

   

    line-height:30px;

}

.flex-item {

    background: tomato;

    margin: 5px;

    color: white;

    font-weight: bold;

    font-size: 1.5em;

    text-align: center;

    flex: 1 0 auto;

    height:auto;

}

.flex-item:before {

    content:'';

    float:left;

    padding-top:100%;

}

<body>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

    <div class="flex-container">

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

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

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

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

        <div class="flex-item">5</div>

        <div class="flex-item">6</div>

        <div class="flex-item">7</div>

    </div>

</body>


一个inline-block的元素可以做太多,只是适应框的显示/行为和它的内容。这里的魔力来自于填充:50%0; (100%的垂直填充等于父级的宽度)。有关垂直边距和填充,请参见w3c


查看完整回答
反对 回复 2019-12-25
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

对于那些也想用display: flex正方形的div里面,你需要使用display: table的:before元素,否则方将与Chrome浏览器,但不会与Firefox或边缘工作(如火狐47和边缘13)。


在下面的代码段中,该代码段适用于所有浏览器,我还演示了如何用百分比列(在本例中为20%)包装无限制的项目,并用填充和内部div分隔它们,因为带有百分比的边距在FF和当然是Edge。


.flex-container {

  display: flex;

  justify-content: start;

  flex-wrap: wrap; 

}


.flex-cell {

  flex: 0 0 20%;

  display: flex;

  justify-content: center;

  align-items: stretch;

  padding: 0.5rem;

  box-sizing: border-box;

}


.flex-cell:before {

  content: '';

  display: table;

  padding-top: 100%;

}


.flex-item {

  flex-grow: 1;

  border: 1px solid black;

  background: tomato;

  color: white;

  

  display: flex;

  justify-content: center;

  align-items: center;

}

<body>

    <div class="flex-container">

        <div class="flex-cell">

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

        </div>

        <div class="flex-cell">

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

        </div>

        <div class="flex-cell">

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

        </div>

        <div class="flex-cell">

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

        </div>

        <div class="flex-cell">

            <div class="flex-item">5</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">6</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">7</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">8</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">9</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">10</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">11</div>

        </div>

        <div class="flex-cell">

            <div class="flex-item">12</div>

        </div>

    </div>

</body>


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 1008 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信