大家好,我是 前端架构师 - 大卫。
更多优质内容请关注微信公众号 @程序员大卫。
初心为助前端人🚀,进阶路上共星辰✨,
您的点赞👍与关注❤️,是我笔耕不辍的灯💡。
背景
将 Flexbox 与 margin
结合使用,可以比传统的 justify-content: center; align-items: center;
布局方式更加简洁高效。今天,我将介绍 5 种常见的 Flexbox 配合 margin
的布局方法。
为了方便展示,这里使用了 tailwindcss
,以下是几个常见的 CSS 类的含义:
m-auto
相当于margin: auto;
mx-auto
相当于margin-left: auto; margin-right: auto;
ml-auto
相当于margin-left: auto;
mr-auto
相当于margin-right: auto;
1. 红色方块水平垂直居中
通过为红色方块设置 m-auto
,使其在父容器内水平垂直居中。
<div class="flex size-[300px] border">
<div class="m-auto size-[100px] bg-red-600"></div>
</div>
2. 绿色方块靠右对齐
为绿色方块设置 ml-auto
,使其在容器内靠右对齐。
<div class="flex h-[50px] w-[400px] border">
<div class="size-[50px] bg-red-500"></div>
<div class="size-[50px] bg-yellow-500"></div>
<div class="ml-auto size-[50px] bg-green-500"></div>
</div>
3. 绿色和蓝色方块靠右对齐
同样,绿色方块设置 ml-auto
,使其在父容器内靠右对齐。蓝色方块跟随其后。
<div class="flex h-[50px] w-[400px] border">
<div class="size-[50px] bg-red-500"></div>
<div class="size-[50px] bg-yellow-500"></div>
<div class="ml-auto size-[50px] bg-green-500"></div>
<div class="size-[50px] bg-blue-500"></div>
</div>
4. 绿色方块居中
为绿色方块设置 mx-auto
,使其在容器内水平居中,左右两侧均留白。
<div class="flex h-[50px] w-[400px] border">
<div class="size-[50px] bg-red-500"></div>
<div class="size-[50px] bg-yellow-500"></div>
<div class="mx-auto size-[50px] bg-green-500"></div>
<div class="size-[50px] bg-blue-500"></div>
</div>
5. 列表均等分排列
在这个例子中,我们使用 calc
函数动态计算每个元素之间的间距。假设每行有 7 个元素,剩余空间为 100% - 7 * 50px
。由于每个元素左右都有边距,总共有 14
个边距(7 个元素 * 2
),因此我们将剩余空间除以 14
来得到每个边距的大小。
计算方法如下:
--n: 7; /* 每行元素数量 */
--h: calc((100% - var(--n) * 50px) / (var(--n) * 2)); /* 计算每个元素左右的间距 */
<style>
.box {
display: flex;
flex-wrap: wrap;
width: 600px;
height: 300px;
border: 1px solid #000;
}
.item {
width: 50px;
height: 50px;
background: red;
/* 每行显示 7 个元素 */
--n: 7;
--h: calc((100% - var(--n) * 50px) / (var(--n) * 2));
margin: 20px var(--h);
}
</style>
<div class="box">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
总结
通过将 Flexbox 和 margin
结合使用,我们可以快速实现各种布局需求。无论是居中对齐、靠右对齐,还是实现动态间距的均等排列,都是十分简洁且高效的。