Grid网格布局一种更灵活、更强大的二维布局模型!

当涉及到网页布局时,display: flex; 和 display: grid; 是两个常用的 CSS 属性,它们都允许创建不同类型的布局,但有着不同的用法和适用场景。

使用flex布局的痛点

当我们使用justify-content: space-between;让子元素两端对齐,自动分配中间间距,假设一行有5个,如果每一行都是相同的5个是没有问题的,但如果最后一行只有4个的情况就会出现如下图的问题:

/* flex布局 */
display: flex;
flex-wrap: wrap;
/* 元素两端对齐 */
justify-content: space-between;

这个时候如何让最后一行和前两行效果一致,实现起来是比较麻烦的。但是如果换成grid布局,这个效果是很好实现的。

相同的布局将flex改成grid

<div class="container">
 	<div class="item-box">box</div>
	......
 </div>
<style>
    .container{
      	display: grid;
        grid-template-columns: repeat(5, 1fr);
        gap: 20px;
    }
</style>

代码解释:

  • display: grid; 设置grid布局
  • grid-template-columns: repeat(5, 1fr); 每一行5列,每列都是1fr
  • gap: 20px; 四周的间距是20px

布局效果如下图:

上面的grip布局,最后一行不是5个,但是可以左对齐,不会像flex布局一样的bug。

进阶使用grid布局做响应式

注意:使用响应式布局,父容器不能使用固定单位,而是使用百分比单位布局

<div class="container">
 	<div class="item-box">box</div>
	......
 </div>
<style>
    .container{
      	width: 100%;
      	display: grid;
        grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
        gap: 20px;
    }
</style>

grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));核心代码解释,每一行列数自动填充auto-fill,每一列最小宽度minmax(300px, 1fr)255px,最大宽度1fr。

效果如下图:

使用grid-row和grid-column实现B站布局效果

<div class="container">
 	<div class="item-box item-box-1">box</div>
	......
 </div>
<style>
    .container .item-box-1 {
        height: auto;
        grid-row: 1/3;
        grid-column: 1/3;
      }
</style>

grid-rowgrid-column 是 CSS Grid Layout 中的属性,用于定义网格元素的位置和大小。这两个属性可以用于同时定义行和列,例如 grid-row: 1/3; grid-column: 2/5; 表示元素从第一行线到第三行线,从第二列线到第五列线。

最重要的是,display: flex; display: grid; 都提供了灵活性和响应性,可以帮助你创建各种各样的布局,以满足你的设计需求。根据你的具体项目和设计目标来选择正确的工具,以获得最佳的布局结果。

原文链接:,转发请注明来源!