Flex Two Columns使用 Flexbox 轻松实现行和列布局
超级简单的响应式行和列,直接使用 CSS
超级简单的响应式行和列,直接使用 CSS
网格布局是网页开发设计中不可或缺的一部分,你很可能已经尝试过 Bootstrap 或 Foundation 之类的框架来实现你的布局。但是,和大多数人一样,我并不喜欢运行 Bootstrap 或 Foundation 所需的依赖项,也不喜欢它对页面加载时间的影响。
事实上,当我使用 Bootstrap 编写应用程序时,我几乎只将它用于网格布局,有时我会将它用于通知或基本相当合理的 CSS 默认值,但 90% 的时间,我想要的只是网格布局。
我也不喜欢只提供 12 列或更少的分列选项。感觉有时候你得费些周折才能把列拆分成列,或者做些其他奇怪的事情。
如何才能更快更轻松地实现网格布局?Flexbox 就是答案。我认为
弹性盒子
目前,弹性盒子几乎无处不在。所有主流浏览器都支持它。它允许更简单的布局,并且 React-Native 也支持它,这意味着当我为 React-Native 布局页面时,我首先会使用弹性盒子,但我发现自己在 Web 开发中也会首先使用弹性盒子。
事实上,我上一个布局的应用完全是用弹性盒子做的。我发现它真的很容易用。
如果你对弹性盒不太了解,我推荐这个页面,它对弹性盒进行了很好的概述。
布局
首先我将整个页面包裹在一个 div 中。
<div class='some-page-wrapper'>
</div>
然后我定义一个可以帮助布局的类.row
。.column
.row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: 100%;
}
.column {
display: flex;
flex-direction: column;
flex-basis: 100%;
flex: 1;
}
现在如果我们想要一个两列布局:
<div class='some-page-wrapper'>
<div class='row'>
<div class='column'>
<div class='blue-column'>
Some Text in Column One
</div>
</div>
<div class='column'>
<div class='green-column'>
Some Text in Column Two
</div>
</div>
</div>
</div>
CSS 看起来像这样:
.some-page-wrapper {
margin: 15px;
background-color: red;
}
.row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
width: 100%;
}
.column {
display: flex;
flex-direction: column;
flex-basis: 100%;
flex: 1;
}
.blue-column {
background-color: blue;
height: 100px;
}
.green-column {
background-color: green;
height: 100px;
}
如果我们想添加第三列怎么办?HTML 代码可以轻松更新为:
<div class='some-page-wrapper'>
<div class='row'>
<div class='column'>
<div class='blue-column'>
Some Text in Column One
</div>
</div>
<div class='column'>
<div class='green-column'>
Some Text in Column Two
</div>
</div>
<div class='column'>
<div class='orange-column'>
Some Text in Column Two
</div>
</div>
</div>
</div>
这样我们就添加了第三列。它无缝地嵌套在我们的行中。
现在如果我们想要更复杂的布局怎么办?
我们可以添加更多行,这很容易。
<div class='some-page-wrapper'>
<div class='row'>
<div class='column'>
<div class='orange-column'>
Some Text in Column One
</div>
</div>
<div class='column'>
<div class='blue-column'>
Some Text in Column Two
</div>
</div>
<div class='column'>
<div class='green-column'>
Some Text in Column Three
</div>
</div>
</div>
<div class='row 2'>
<div class='column'>
<div class='green-column'>
Some Text in Row 2, Column One
</div>
</div>
<div class='column'>
<div class='orange-column'>
Some Text in Row 2, Column Two
</div>
</div>
<div class='column'>
<div class='blue-column'>
Some Text in Row2, Column Three
</div>
</div>
</div>
</div>
或者我们可以调整列的大小。
要使用双列,我们可以添加一个.double-column
类。不过,这适用于任何大小的列,例如 60/40,10/10/10/10/10/10/10/10/10/10,实际上,任何组合都可以。例如,1 x 100,或者 10 x 1,然后 20 x 3,最后 30 x 1。选项无穷无尽!
在一个布局中,我在“列”周围添加了较大的边距,由于行会向下换行,所以我的一行包含所需的“列”数。列是固定宽度的卡片,因此它们会换行到下一行,而弹性盒子会巧妙地响应式地将卡片沿屏幕向下换行。
.double-column {
display: flex;
flex-direction: column;
flex-basis: 100%;
flex: 2;
}
但这响应性不是很好吗?我们可以使用媒体查询来增加一些响应性。
只需将flex: 1
和移动flex: 2
到媒体查询中(大小取决于应用程序,我只是提供一个选项)
@media screen and (min-width: 800px) {
.column {
flex: 1
}
.double-column {
flex: 2
}
}
在> 800px处:
在 < 800px 处:
最终的codepen,提示点击右下角的1x或者0.5x按钮,看看“响应式”布局的区别。
本质上,我们用 20 行 CSS 就彻底颠覆了 Bootstrap 的行/列布局。我们能够快速创建行/列布局,而且由于使用了 Flexbox,我们几乎不用担心布局崩溃或出现任何问题。Flexbox 易于适应各种用途,并支持高度可定制性。你觉得 Flexbox 怎么样?你尝试过吗?
另一个隐藏的好处是,如果我以这种方式布局 React 组件,那么布局 React-Native 组件就非常容易,看起来很相似。
我通常在我的项目中使用 SCSS,因此如果您发现一些不完美的 CSS,请告诉我!
文章来源:https://dev.to/drews256/ridiculously-easy-row-and-column-layouts-with-flexbox-1k01