flex 布局 中, 通过对子项设置 margin-auto; 的方式去吃掉剩余空间, 这种小技巧在很多时候能极大简化我们的布局哦.

单元素水平垂直居中

如果父容器是 flex, 要实现元素水平垂直居中, 直接在容器项添加:

display: flex;

justify-content: center;
align-items: center;

但其实我们可以直接给子项添加 margin: auto; 就搞定啦!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex + margin</title>
<style>
.main {
width: 500px;
height: 300px;
background-color: #ccc;
display: flex;
} .main div {
width: 100px;
height: 100px;
background-color: pink; /* 水平垂直居中 */
margin: auto;
}
</style>
</head>
<body>
<div class="main">
<div></div>
</div>
</body>
</html>

原理就是通过子项的 margin 去占满它 top / right / bottom / left 的空间. 四个方向都能设置, 那对齐方式就自由控制四个方向啦.

某些项靠右对齐

初始是这样的:

a, b, c

现在想要将 c 挤压到最右边去:

a, b,             c

道理是一样的, 直接在子项中给 c 设置 margin-left: right 就搞定.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex + margin</title>
<style>
.main {
width: 500px;
height: 300px;
background-color: #ccc;
display: flex;
} .main div {
width: 100px;
height: 100px;
background-color: pink;
} .move {
margin-left: auto;
}
</style>
</head>
<body>
<div class="main">
<div>a</div>
<div>b</div>
<div class="move">c</div>
</div>
</body>
</html>

同理, 如果是要移动两个到右边也是一样的操作, 给 b 盒子设置上 margin-left: auto 即可.

a            b, c

同理, 如果是要实现这样的效果, 也是直接找出 c 盒子, 左右 margin: auto; 就搞定.

ab          c       d
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex + margin</title>
<style>
.main {
width: 500px;
height: 300px;
background-color: #ccc;
display: flex;
} .main div {
width: 100px;
height: 100px;
background-color: pink;
} .move {
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<div class="main">
<div>a</div>
<div>b</div>
<div class="move">c</div>
<div>d</div>
</div>
</body>
</html>

列表布局

子元素横向排列, 可以控制每行排列几个元素, 当排不下时, 自动换行.

就有点像二维布局了, 但这里我们不用 grid. 就非要用 flex 技巧.

如果在父容器上进行操作,

display: flex;

flex-wrap: wrap;
justify-content: space-between;

这样肯定是不行的, 不仅不能控制每一行的元素个数, 且最后一行的排列必定出问题哦.

但还是可以在子项设置 margin, 不过这里要给 margin 固定值哈, 类似设置这样就好:

.main div {
background-color: pink; width: 30px;
height: 40px;
margin: 15px 20px;
}

假设我们现在每行要排列 7个盒子, 且知道每个盒子的宽度是定值 30px, 则剩余空间为父容器的宽度 100% 减去盒子宽度 乘7即可.

剩余宽度 = 100% - 盒宽 * 7
每个盒子的左右 margin 为: 剩余宽度 / 7 / 2
/* 每个盒子的左右 margin 为:  剩余宽度 / 7 / 2 */
margin: 10px calc((100% - 30px * 7) / 7 / 2);

最后可将每行排列几个设置为变量即可, 主要应用于页面做响应式的场景.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex + margin</title>
<style>
.main {
width: 500px;
height: 300px;
background-color: #ccc;
display: flex;
/* 允许元素换行, 并设置交叉轴, 从起点开始放置元素 */
flex-wrap: wrap;
align-content: flex-start;
} .main div {
width: 40px;
height: 40px;
background-color: pink; /* --n: 7; */
/* --n: 10; */
--n: 6;
--gap: calc((100% - 40px * var(--n)) / var(--n) / 2);
margin: 10px var(--gap);
} </style>
</head>
<body>
<div class="main">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
<div>16</div>
</div>
</body>
</html>

通过变量来动态计算 margin, 不仅是每行可以控制几个元素排列, 盒子大小也可以做变量, 就很强大哦!

实际项目中熟练应用这几个小技巧, 就已经很够用了. 尤其是左右布局的时候, margin-left: auto; 简直是一个神来之笔呢.

Flex布局-margin 妙用技巧的更多相关文章

  1. 浅谈flex布局中小技巧

    最近有个面试,面试官问到,在一个横向布局上,假设有三个div,每个宽度为定宽apx,如果想使两侧宽度为x,中间div间间隔为2x.x可以自适应.如下图: 怎么做很简单,两行代码就搞定:   justi ...

  2. CSS 学习笔记 - Flex 布局

    传统布局方式的局限性 传统的网页布局方式,采用 display + position + float 的方式来实现.这种方式,无法实现一些复杂的布局,并且在实现某些布局时,会有一些局限性. 比如,最常 ...

  3. 写给 Android 开发的小程序布局指南,Flex 布局!

    一.序 Hi,大家好,我是承香墨影! 最近在做小程序,验证一些方向,开发效率确实很快,就是各种微信的审核有点费劲,但是总归是有办法解决的. 想要开发一款小程序,其实和我们正常写一款 App 类似,你需 ...

  4. CSS布局和居中常用技巧

    1.常用居中方法 居中在布局中很常见,我们假设DOM文档结构如下,子元素要在父元素中居中: <div class="parent"> <div class=&qu ...

  5. CSS的flex布局和Grid布局

    一.什么是 flex 布局 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这 ...

  6. css 13-CSS3属性:Flex布局图文详解

    13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...

  7. 让CSS flex布局最后一行列表左对齐的N种方法

    原文链接https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649091838&idx=1&sn=fa4e1ed1e0 ...

  8. 在移动端中的flex布局

    flex布局介绍: flex布局很灵活, 这种布局我们也可以称之为弹性布局,  弹性布局的主要优势就是元素的宽或者高会自动补全; flex布局实例: 比如有两个div,一个div的宽度为100px, ...

  9. flex布局

    一,啥是flex? 1.Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.任何一个容器都可以指定为Flex布局. .box{ displa ...

  10. flex 布局 初次接触这个好使又不是特别好用的布局方法

    刚开始学前端的童鞋们应该也是一样先学习的table然后再学习了盒子模型,感觉终于学会了简单的网页布局,使用各种display,float,position绞尽脑汁给页面布局成自己想要的页面样式,然而, ...

随机推荐

  1. [SDOI2016] 数字配对 题解

    发现题目中描述的配对条件可以理解为:\(pc_i-pc_j=1\) 且 \(a_i\bmod a_j=0\),其中 \(pc_i\) 表示 \(a_i\) 的质因数个数. 自然想到以 \(pc\) 奇 ...

  2. YASKAWA安川DX100控制柜维修看这几步

    维修YASKAWA安川DX100控制柜需要综合运用多种诊断技巧,并遵循严格的安全操作规程.通过预防性维护和及时的故障处理,可以显著提高DX100控制柜的可靠性和使用寿命,从而保障企业生产线的稳定运行. ...

  3. spring官宣接入deepseek,真的太香了~

    写在前面 经常逛Spring官网(https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html)的小伙伴会发现, Spr ...

  4. ABP登录返回错误次数、锁定时间

    ABP默认登录返回错误结果时,不会显示错误次数.锁定时间.为了实现验证错误时返回错误次数.锁定时间,我们需要改造返回接口.   1.定位验证错误的地方: 修改部分代码 1 /// <summar ...

  5. mybatis - [12] 日志工厂

    题记部分 001 || 日志工厂 如果一个数据库操作出现了异常,需要通过日志定位问题. 002 || Log4j Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的 ...

  6. SQL SERVER日常运维巡检系列之-性能

    前言 做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期.结果进行登记,同时可能需要出一份巡检报告. 本系列旨在解决一些常见的困扰: 不知道巡检哪些东西 不知道怎么样便捷体检 机器太多体 ...

  7. php不使用mysqlDump工具实现的mysql数据备份

    再无法使用mysqlDump等外部工具的时候,我们需要到处数据库备份的话,借助phpMyAdmin强大的功能就可以实现.如果我们想自己实现一个类似phpMysql的功能要如何去考虑了,因此,在这里我给 ...

  8. js回忆录(1) -- 变量,null 和 undefined

    变量:这个东西不同的高度的人看法不一样,甚至不同领域的人的看法也不一样,当初上机组的时候依稀记得老师说这个寄存器那个锁存器什么的,然后根据高低电位就变成了二进制认识的0和1了,当然了具体细节本博主大人 ...

  9. go 密码 hash 加密

    目录 bcrypt加密算法原理和应用 简单使用 一起实现一个demo 获取用户输入的密码 Hash & Salt 用户的密码 目前我们做了什么 验证密码 更新 Main 函数 全部代码 bcr ...

  10. 入门Dify平台:如何根据需求选择与创建最合适的应用

    今天我们将继续深入讲解Dify,重点介绍如何创建应用.具体来说,我们将探讨如何根据不同的需求来决定选择什么类型的应用最为合适,帮助大家更好地理解在Dify平台上构建应用的最佳实践. 创建空白应用 首先 ...