CSS gap 属性简明教程

753 阅读3分钟

CSS gap 属性是一个简写属性,用于设置弹性布局、网格布局和分栏局中行和列之间的间距(也称为 gutter),目前已经得到了现代浏览器的广泛支持

引入 gap 的目的是简化了在这些布局中创建间距的过程,避免使用多个 marginpadding 属性的繁琐步骤。

gap 语法

gap 属性语法如下:

gap = <'row-gap'> <'column-gap'>?

可以看到,gap 其实是 row-gap 和 column-gap 2 个属性的的简写形式,row-gap 和 column-gap 分别用于控制行间距和列间距。

也就是说:

gap: 12px 24px;
/* 等同于 */
row-gap: 12px;
column-gap: 24px;

设置 gap 时,第二个值 column-gap 是支持省略的。如果没设置,与 row-gap 值一致。

gap: 12px;
/* 等同于 */
row-gap: 12px;
column-gap: 12px;

当然,完整的 gap 的取值单位包括 px、em、rem 在内的长度单位,甚至可以是一个百分比值。

示例:

  • gap: 10px; 设置行间距和列间距均为 10 像素。
  • gap: 20px 15px; 设置行间距为 20 像素,列间距为 15 像素。
  • gap: 5%; 设置行间距和列间距均为容器尺寸的 5%。

应用场景

gap 属性主要用于上面所讲的三种布局。我们分别举例说明:

弹性布局

<div class="box-wrapper">
	<div class="box">1</div>
	<div class="box">2</div>
	<div class="box">3</div>
	<div class="box">4</div>
</div>

<style>
.box-wrapper {
  display: flex;
  gap: 12px 24px;
  flex-wrap: wrap;
}

.box {
  flex: 1 1 48%;
}
</style>

效果

如图所示,行间距 12px,列间距 24px。

网格布局

<div class="container">
	<div class="item">1</div>
	<div class="item">2</div>
	<div class="item">3</div>
	<div class="item">4</div>
</div>

<style>
.container {
	display: grid;
	gap: 12px 24px;
	grid-template-columns: 1fr 1fr 1fr;
}

.item {
	padding: 12px 16px;
	text-align: center;
}
</style>

效果

如图所示,行间距 12px,列间距 16px。

分栏布局

<div>
	<p>
		祥子的手哆嗦得更厉害了,揣起保单,拉起车,几乎要哭出来。拉到个僻静地方,细细端详自己的车,在漆板上试着照照自己的脸!
	</p>
	<p>
		越看越可爱,就是那不尽合自己的理想的地方也都可以原谅了,因为已经是自己的车了。
	</p>
	<p>
		把车看得似乎暂时可以休息会儿了,他坐在了水簸箕的新脚垫儿上,看着车把上的发亮的黄铜喇叭。
	</p>
	<p>
		他忽然想起来,今年是二十二岁。因为父母死得早,他忘了生日是在哪一天。自从到城里来,他没过一次生日。
	</p>
	<p>
		好吧,今天买上了新车,就算是生日吧,人的也是车的,好记,而且车既是自己的心血,简直没什么不可以把人与车算在一块的地方。
	</p>
</div>

<style>
div {
	columns: 2;
	gap: 2em;
}

p {
	margin-top: 0;
}
<style>

效果

这里我们将列间距设置为 2em 的长度。

与 margin 的区别

使用 gap 属性比使用 margin 属性来创建间距更加简洁、高效。使用 margin 属性时,需要小心处理相邻元素和边界元素的 margin 问题,而 gap 属性则帮我们自动处理了。

总结

gap 属性在现代浏览器中得到了广泛支持,支持在包括弹性布局、网格布局和分栏布局在内的现代布局模型中使用,大大简化化了在创建间距的过程,使用 marginpadding 属性带来的繁琐和不便。

希望本文的讲述能对你的工作有所帮助,感谢阅读,再见。