Flex 布局实战:登陆界面布局最常用的 13 个方法总结

先看总体效果图:
overview

1. 开启 flex

.container {
    display: flex;
}

作用:

  • 让父元素变成 flex 容器
  • 只影响直接子元素

2. 主轴方向

横向排列

.container {
    display: flex;
    flex-direction: row;
}

默认就是 row

效果:

default

主轴:水平

交叉轴:垂直

纵向排列

.container {
    display: flex;
    flex-direction: column;
}

效果:

column

主轴:垂直

交叉轴:水平

3. 主轴对齐:justify-content

控制主轴方向上的排列

左对齐 / 顶部对齐:

justify-content: flex-start;

default

居中:

justify-content: center;

center

右对齐 / 底部对齐:

justify-content: flex-end;

flex-end

两端分开:

justify-content: space-between;

space-between

均匀留白:

justify-content: space-around;

space-around

平均分布:

justify-content: space-evenly;

space-evenly

4. 交叉轴对齐:align-items

控制交叉轴方向上的排列

起点对齐(同主轴):

align-items: flex-start;

居中对齐(同主轴):

align-items: center;

终点对齐(同主轴):

align-items: flex-end;

拉伸(元素若是没有设置高度,会占满父容器的高度;设置了高度,伸展至本身高度):

align-items: stretch;

stretch
center
默认值是这个。

5. 单个元素自己对齐:align-self

如果只想改单个元素,不想影响所有子元素:

.item {
    align-self: center;
}

常见值:

align-self: flex-start;
align-self: center;
align-self: flex-end;

效果:
align-self
仅适用于交叉轴,主轴依靠margin: auto

6. flex 里想让主轴某个元素去最右边,给它 margin-left: auto

flex 中:

单个元素主轴到末尾:margin-left: auto

所有元素整体到主轴末尾:justify-content: flex-end

没有像 align-self 那样专门控制 flex 子项主轴对齐的属性
margin-auto

7. 子元素高度写 100% 时,先想想 padding 会不会把它撑爆

默认盒模型是:

box-sizing: content-box;

这时:

height: 100%;
padding-top: 20px;
padding-bottom: 20px;

实际总高度不是 100%,而是:

100% + padding-top + padding-bottom

效果:
在这里插入图片描述

最稳的解决办法:

box-sizing: border-box;

这样 width 和 height 会包含 padding 和 border。

效果:
在这里插入图片描述

结论:

只要你开始认真布局,几乎都可以先加一句:

* {
    box-sizing: border-box;
}

这是很稳的习惯。

8. 多用块级元素,少和行内元素较劲

行内元素

默认特点:

  • 不独占一行
  • 不好直接控制宽高
  • 更适合小段文字

比如:

<span></span>
<label></label>
块级元素

默认特点:

  • 独占一行
  • 容易控制宽度、高度、margin、padding
  • 更适合布局

比如:

<div></div>
<p></p>
<h2></h2>

9. 背景图布局套路

铺满且不变形
background-size: cover;
background-repeat: no-repeat;
background-position: center center;

意思是:

  • 铺满容器
  • 不变形
  • 可能裁切
完整显示但可能留白
background-size: contain;
background-repeat: no-repeat;
background-position: center center;
想“裁出图片某一块”怎么做

公式:

background-size: cover;
background-position: x y;

10. 背景图和内容分层最稳套路

<div class="bg-img"></div>
<div class="page">
    <div class="login-container glass"></div>
</div>
<style>
.bg-img {
    position: fixed;
    inset: 0;
    background-image: url('img/flower.jpg');
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center bottom;
    z-index: -1;
}
</style>

好处:

  • 背景和内容分开
  • 背景位置更好调
  • 内容布局不受影响

11. 毛玻璃公式

.glass {
    background: rgba(255, 255, 255, 0.15);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid rgba(255, 255, 255, 0.2);
    border-radius: 16px;
}

重点:

毛玻璃要看到后面的背景,才会明显。

12. 分割线套路

中间有字的分割线

<div class="divider">
    <span>or</span>
</div>
<style>
.divider {
    width: 100%;
    display: flex;
    align-items: center;
    font-size: 12px;
    margin: 16px 0;
}

.divider::before,
.divider::after {
    content: "";
    flex: 1;
    height: 1px;
    background-color: rgba(255, 255, 255, 0.2);
}

.divider span {
    padding: 0 10px;
}
</style>

原理:

整行 = 左线 + 文字 + 右线
左右两条线用伪元素自动填满剩余空间。

13. transform: translate(...px,...px) 微调

行内插入<a></a>标签时,会出现和文本上下不对齐的情况,此时可以使用translate微调

 <div style="display: flex;gap: 3px;font-size: 12px;margin-top: 5px;">
      <input type="checkbox" id="remember" name="remember">
      <label style="transform: translateY(+1px);" for="remember"> Remember me</label>
      <a style="margin-left: auto; transform: translateY(+1px); color: rgb(94, 217, 245);" href="#">Forgot Password?</a>
  </div>
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐