CSS之gap属性

avatar
前端开发工程师 @豌豆公主

背景

image.png

上图展示了一个按钮组,但是问题也很明显:每个按钮之间没有任何间距;很容易想到给每个按钮加margin,但是又不能直接加到button组件上,所以就有了button-group组件:

image.png


.wd-button-group .wd-btn {

margin-right: 8px;

margin-bottom: 12px;

}

是不是完美解决呢?再看下面这种场景:

image.png

如果按钮就在一行,下面就会多出来12px的margin,在有些场景中就会导致不能对齐的问题,比如在form中:

image.png

gap

gap 属性是用来设置网格行与列之间的间隙,它是row-gap和column-gap的缩写形式

  • gap的历史

刚开始是没有gap属性的,最开始出现的类似的CSS属性是在Grid布局中的grid-gap,是CSS grid-row-gap和grid-column-gap属性的缩写;

但是在multi-column布局中存在column-gap属性,为了能能够方便开发者,grid-gap从规范中去除了,出现了新的标准:gap、row-gap和column-gap

与gap相关的属性一共有6个:

grid-row-gap

grid-column-gap

grid-gap

row-gap

column-gap

gap

Grid布局中的gap


<div class="container">

<div class="item item1">1</div>

<div class="item item2">2</div>

<div class="item item3">3</div>

</div>

/* css */

.container {

display: grid;

grid-template-columns: repeat(3, 100px);

grid-template-rows: 50px 50px 100px;

}

image.png

设置gap


.container {

display: grid;

grid-template-columns: repeat(3, 100px);

grid-template-rows: 50px 50px 100px;

gap: 20px;

}

image.png

flex布局中的gap


.container {

display: flex;

gap: 20px;

}

image.png

📢 在flex布局中,以flex-direction:row为例,设置了row-gap:20px,但是如果只有一行的时候,row-gap就不会生效:

image.png

到这里就解决了刚开始提出的button-group的问题。

multi-column布局中的gap


.container {

column-count: 3;

row-gap: 40px;

column-gap: 10px;

column-rule: 5px solid orange;

}

image.png

它和其他两种布局方式的区别:

  • row-gap 不会生效

  • column-gap 默认值不是0,

  • gaps 可以被设置样式,设置

column-rule,它占用的是gap的空间.

📢 display: block中设置gap不会生效:

image.png