【译】别把 (Flexbox) 栅格想得太复杂

1083次阅读  |  发布于5年以前

原文:http://www.zcfy.cc/article/763

四年前,我发布了一篇文章"别把栅格想得太复杂",引起了一些人的共鸣。甚至在更早的时候,我们可能就已经把栅格发挥到极致了。那时候几乎每星期都有人推广新的栅格框架。

那篇文章中我的观点是:"_怕什么!_你可以自己实现一个栅格!你不需要一个复杂的框架。" 这个主张虽然没啥特别的,但却是我的真实想法。你只要用百分比宽度浮动几个元素,就可以收工。

在今天,如果你已经学会使用 flexbox 布局,自定义栅格甚至更简单了。

下面是我通常采用的做法:

<div class="flex-grid">
      <div class="col"></div>
      <div class="col"></div>
      <div class="col"></div>
    </div>
.flex-grid {
      display: flex;
    }
    .col {
      flex: 1;
    }

上面的代码支持任意列数,它们能自动等宽并且可以自适应宽度!

希望它们在窄屏下排成一列?很简单:

@media (max-width: 400px) {
      .flex-grid {
        display: block;
      }
    }

需要列与列间隔?你可以添加 margin 到列上。你也可以添加 padding 到列上。我喜欢使用 宽度补齐(justification)的思路来创建列,例如:

.flex-grid-thirds {
      display: flex;
      justify-content: space-between;
    }
    .flex-grid-thirds .col {
      width: 32%;
    }

如果选择用 flexbox,你也拥有在需要的时候改变列的顺序的能力,这对于想要在响应式设计调整中让较重要的内容保持在前部展现很有好处。

看具体例子: Easy Flexbox Grid 。

再一次强调我的观点:你并不需要依赖一个栅格框架来建立栅格。你可以自己来实现!这也不是说 flexbox 是很容易的,容易到你从来不会遇到问题。如果你更深入使用 flexbox 特性,会有很多边界情况和浏览器支持问题使得你可能陷入其中。不过我们这里考虑的问题非常简单,所以如果这也有问题,我会感到非常惊讶。

更多内容

Philip Walton 写了一篇关于 flexbox 栅格系统的高级文章。

公平地说,栅格框架往往是相当健壮的,许多团队在使用框架预定义的 class 和规则来创建所需的各种各样的栅格上取得成功。如果你有兴趣学习基于 flexbox 实现的栅格框架,这里有一些我所知道的框架:Frow, Flexbox Grid, 以及 Gridlex。

英文原文:https://css-tricks.com/dont-overthink-flexbox-grids/

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8