四年前,我发布了 “别想太多网格”,并引起了不少人的共鸣。即使在当时,我也认为我们可能正处于网格的巅峰时期。几乎每周都有人在推广一个新的网格框架。
那篇文章是我想说:“别害怕! 你可以自己制作一个网格!你不需要一个复杂的框架。” 它可能没有那么花哨,但这就是我的风格。你可以用一些百分比宽度浮动几个元素,然后就完成了。
如今,如果您准备使用 Flexbox 进行布局,DIY 网格就更容易了。
这通常是我使用的方式
<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;
}
}
需要间距?您可以向列添加边距。您可以向列添加内边距。我喜欢使用对齐方式来创建列的想法,例如
.flex-grid-thirds {
display: flex;
justify-content: space-between;
}
.flex-grid-thirds .col {
width: 32%;
}
如果您选择 Flexbox 路线,您现在还可以根据需要更改列的顺序,这对于将更重要的内容保持在源代码中的较高位置以及响应式设计重新排序非常有用。
查看 Chris Coyier 在 CodePen 上的笔 简单的 Flexbox 网格(@chriscoyier)。
我的观点,再次强调:构建网格并不需要使用网格框架。你可以做到!这也不是说 Flexbox 非常简单,您永远不会遇到任何问题。如果您开始使用更多利基 Flexbox 功能,可能会遇到很多边缘情况和奇怪的浏览器支持问题。不过,我们在这里看到的这些内容非常基础,如果您遇到问题,我会感到惊讶。
更多
Philip Walton 已经 撰写了更多关于 Flexbox 网格系统的辉煌成就。
公平地说,网格框架往往相当健壮,许多团队在拥有预定义的类和构建任何类型网格的配方方面取得了成功。如果您有兴趣依靠一个特定于 Flexbox 的网格框架,以下是我知道的一些:Frow、Flexbox Grid 和 Gridlex。
哈哈,太搞笑了:你用一些百分比宽度浮动几个元素,然后就完成了。
感谢这篇文章,再次提供了一些非常有用的新东西!
我听说使用 Flexbox 进行整个布局并不推荐,因为浏览器会付出更多努力来渲染它。这是真的吗?如果曾经是真的。
来自 Google 开发者博客:https://developers.google.com/web/updates/2013/10/Flexbox-layout-isn-t-slow?hl=en
简而言之,旧语法很慢,新语法不慢。
如果您正在构建大型项目,您是否仍然推荐这种方法?
或者更具体地说:您将在何时在使用 Bootstrap、Frow 等或您的 Flex 方法之间划清界限?
提前感谢!
Flexbox 最棒的一点是它可以扩展。您确实不必使用框架。
不过,我可能有点偏见。无论项目大小,我都不使用框架。
你知道的。网格只是 CSS 框架的一小部分。
我想说,对于大型项目来说,Flex 方法绝对是更好的方法。Bootstrap 非常适合快速原型设计或制作简单的宣传册网站。但如果您正在构建更大的项目,例如 Web 应用程序,我认为 Bootstrap 的臃肿程度超出了您的需要,而您只使用了它注入到您的网站中的 10%。通过仅编写所需的 CSS 并保持 CSS 代码简洁,使用 Chris 上述的方法是一个好方法。
很高兴看到您使用 Flexbox 完成了这项工作。我为 Flexbox 网格创建了一个小型 Sass 库。受 Neat 启发。http://codepen.io/jmacaluso711/pen/VvpZwG
可能有点过头了?
我想开始使用 Flexbox,但我们的主要客户使用的是 IE11。不幸的是,似乎只有部分支持。有什么建议吗?
除非您在特定区域使用 min-height,否则使用本文中的代码时应该没有明显的区别。
https://caniuse.cn/#search=flexbox
http://brolik.com/blog/when-to-use-flexbox/
补充 Andrew 的评论,查看 Flexbugs,它提供了许多解决不一致性和问题的方法:https://github.com/philipwalton/flexbugs
感谢 Chris 提供的这篇文章。我同意,也许行业不需要这么多的大型库了。
我对于此类抽象使用
justify-content: space-between
的唯一问题是,它需要一个实际的width
才能工作,而不是执行类似flex: 1
的操作,除非我遗漏了什么。此外,使用基于百分比的宽度来为间距留出空间会导致不可预测的间距宽度。因此,我更喜欢列之间的边距,然后在容器上使用负边距技巧来突出边缘。如果需要,我仍然可以使用width
,但这也可以使用flex: 1
等内容。巧合的是,前几天我刚刚为一个客户开发了自己的“基于 Flexbox 的网格”功能。它还没有经过充分测试,但展示了我正在讨论的概念:http://codepen.io/bradwestfall/pen/yJVvBP似乎遇到了 DOFG 拥有的相同间距对齐问题。
http://codepen.io/anon/pen/wWomNO
好吧,Flex 总是会遇到这个问题,因为
flex:1
是相对于其兄弟元素的相对值和比例值。但这不是我要说的重点。对于您的观点,您可以在我的解决方案中继续使用宽度,它会很好地工作
关于使用百分比导致的不可预测的间距,您可以使用“calc”更好地控制它。
类似这样
这样,间距将保持在 15px。
问题似乎更多是一个盒模型问题,即使使用 box-sizing border-box,内边距值也不会添加到 Flexbox 为列确定的任何值。
例如,我使用了 1,1,2 和 1,1,1,1,4。在这种情况下,即使具有正确的兄弟元素比例,内容也不会对齐。除非您没有内边距+边距。
这没问题,但这意味着需要在 Flex 项目的子元素上添加间距,可以通过内部列包装器(额外的 div)或所有直接子元素来实现,可能类似于 .col > * {}
我爱 Flexbox!唯一让我没有 100% 使用它的原因是浏览器兼容性,部分原因是存在三个 Flexbox 标准。我现在要再次尝试深度探索它了。想法?CanIUse 为所有当前浏览器都显示了绿色标记,除了 Edge。
由于 autoprefixer,您实际上不必再担心旧语法了。
关于将 Flex 网格更改为在小屏幕上显示为块,您是否也会使用 display:initial 关闭 Flexbox,或者使用 flex-wrap 或 flex-direction 更改?
display initial 会将 display 更改为 span 和其他内联元素上的 inline。可能会破坏布局。
我真的很喜欢 Flexbox 用于各种布局,但它作为表格使用时存在这个问题。
尤其是在我们希望其中一列的宽度由其最宽元素的宽度决定时。
以下是我对这个问题的四种解决方法。
http://codepen.io/didkobravo/pen/rLWpvY
一般来说,网格系统(传统或 Flexbox)不被认为是用于以表格格式呈现数据的替代方案。
我遇到的问题是间距对齐。
两行:1,1,2 和 1,1,1,1,4;只有在没有边距或内边距的情况下才能对齐。为了对齐间距,似乎需要调整 flex-basis 属性或仅将 Flex 项目用作包装器。
情况似乎如此,我真的希望我遗漏了一些显而易见的东西。
是的,你需要调整 flex-basis 来使项目对齐。查看这篇文章
https://davidwalsh.name/flexbox-layouts
Flexbox 太棒了!它节省时间,可扩展,适合懒惰的开发者,易于根据布局构建网格,并且结合 Autoprefixer,它在生产环境中非常可靠。我们在所有项目中使用了它两年。我爱它 :)
这里有一点使用 Sass 的趣味方法,用于某种语义化的方法。HTML 将具有 1/2、1/3 等类。不确定选择器或浏览器兼容性的成本,当然很有趣 :) 这里只使用百分比,但当然可以调整!这假设也已重置到位,以及良好的盒尺寸。
以为类名不能以数字开头…
HTML 中的类是字符串,可以是任何值,在 CSS 中,类名以数字开头是错误的(可能被视为数字文字),但是如果你将它们作为字符串值传递给类属性选择器,则可以使 HTML 使用你的数字前缀值。这是否是好的做法我不确定,但是当我看到容器上的 1/4 时,我有点知道发生了什么 :)
这是另一个基于 Flexbox 的网格。(免责声明:我是作者:D)。可能值得一试。
https://splintercode.github.io/core-flex-grid/
祈祷有一天我不必再支持 IE8 和使用 4 年前浏览器/操作系统的手机用户。“嗯,在 John 的 iPhone 2 上看起来很糟糕!” :-(
你仍然会在 IE9 和 IE10 上遇到很多问题。
看在上帝的份上,如果你定义了
flex: 1
值,不要忘记为 IE 详细写出flex: 1 0 auto
。否则你会想知道为什么它会发脾气,什么都不正常,即使在 Flexbox 时代之前,网格的实用性也相当肤浅;它本质上只是一个美化的
width/cols
计算,这很难证明一个独立库是合理的。对于阅读这些评论并寻找轻量级且强大的布局工具的人们
有旧的“浮动 + 块级格式化上下文”技术,它在任何地方都能工作
滥用 overflow hidden 用于 BFC 和清除非常糟糕。此外,浮动上的舍入问题累积不再是真正的问题,但如果你仍然遇到这个问题,你可以始终使用容器相对浮动(https://www.palantir.net/blog/responsive-design-s-dirty-little-secret)。一些网格系统(如 Susy)甚至提供使用该方法的隔离网格。
嗨,我正在寻找 CSS 生成器制作器来尝试我的插件以获得反馈。https://github.com/onigetoc/FormToCSS
使用此工具,您可以在几分钟内生成 CSS 生成器。
演示:https://rawgit.com/onigetoc/FormToCSS/master/example/demo.html
另一个 Flexbox 网格系统:http://philippkuehn.github.io/gridilydidily/
在你的示例中,列应具有
min-width: 0
以避免内容过宽时出现拉伸问题。是的!我遇到了这个问题并使用
width: 0
(或overflow: hidden
)修复了它 – 我认为我更喜欢语义上不太不合适的min-width: 0
。谢谢。对“不要将 Flexbox 用于整体页面布局”有什么想法吗?
https://jakearchibald.com/2014/dont-use-flexbox-for-page-layout/
我喜欢 Flexbox 的简洁性,但它真的适合页面布局吗?
准备好了。https://developers.google.com/web/updates/2013/10/Flexbox-layout-isn-t-slow
绝对喜欢 Flexbox 用于网格,但不幸的是,order 属性会弄乱 Tab 键顺序并导致可访问性问题。我相信 Flexbox 规范中提到了这一点。你现在应该尽量避免它们。