当前位置: 首页 > ds >正文

元素滚动和内容垂直居中同时存在,完美的 html 元素垂直居中的方法flex + margin: auto

假设有一个元素 div 作为父容器且宽高固定,里面的内容 content 在父容器中垂直/水平都居中,且当内容很多时,父元素滚动overflow: auto,content的内容要能够完全展示。

我之前在这篇文档提到了两个方法:

  1. 使用 flex + safe 关键字【不兼容safari】
  2. 三层 dom 结构

三层dom结构的代码如下:

<template><div class="outer-wrapper"><div class="inner-wrapper"><div class="content">真正的内容区域</div></div></div>
</template>
<style lang="scss" scoped>
.outer-wrapper {width: 100%; // 外层设置宽高height: 100%;border: 2px solid;display: flex;flex-direction: column;align-items: center; // 外层可以设置垂直和水平居中justify-content: center;padding: 20px;.inner-wrapper {border: 2px solid red;width: 80%; // 内层只能设置宽度,不能设置高度,高度让内容自动撑开,才能达到居中的效果display: flex;flex-direction: column;align-items: center; // 内层只能设置水平居中,不能设置垂直居中padding: 20px;overflow: auto; // 给内层设置overflow.content {width: 100%;height: 2000px;flex-shrink: 0;background: #ccc;}}
}
</style>

虽然这种方法可以实现功能,但是需要在父元素和 content 之间新包一层 div【inner-wrapper】,且有很多限制,比如,内层inner-wrapper不能设置高度,且增加了一层冗余的div,很麻烦。

下面有一种完美的实现方式: flex + margin:auto

<template><div class="outer-wrapper"><div class="content">真正的内容区域</div></div>
</template>
<style lang="scss" scoped>
.outer-wrapper {width: 100%; // 外层设置宽高height: 100%;border: 2px solid;display: flex;justify-content: center; // 可以设置水平居中,但实际不会用这个属性布局align-items: center; // 可以设置垂直居中,但实际不会用这个属性布局padding: 20px;overflow: auto; // 设置滚动.content {margin: auto; // 实际的垂直居中布局使用的属性width: 100%;height: 200px;flex-shrink: 0;background: #ccc;}
}
</style>

上面的代码,父元素只需要按照普通的 flex 布局写就行,内容元素增加 margin: auto,就可以实现内容在父元素中的垂直居中。

这里面的知识点是,flex 布局中的每个项目设置了 margin:auto 之后会利用剩余空间自动分配外边距,且优先级高于 justify-content 和 align-items

除了 flex 布局,grid 布局也可以使用margin: auto实现垂直水平居中。

如果是普通的块级元素只能使用 margin: 0  auto实现水平居中,但是垂直居中就无法实现,所以还是尽量使用 flex布局吧。

http://www.xdnf.cn/news/1477.html

相关文章:

  • Java 中 String 转 Integer 的方法与底层原理详解
  • Elasticsearch(ES)中的脚本(Script)
  • 设备沟通不再“鸡同鸭讲”EtherCAT转Profinet网关助力工业互联新升级!
  • SpringMVC从入门到上手-全面讲解SpringMVC的使用.
  • BUUCTF jarvisoj_test_your_memory
  • 电控---DMP库
  • C语言(1)—C语言常见概念
  • xcode 16 遇到contains bitcode
  • visio导出的图片过大导致latex格式转成pdf之后很不清楚
  • 缩放点积注意力
  • 新书速览|Hadoop与Spark大数据全景解析(视频教学版)
  • STM32F4 W25Q64存储芯片详解:特性以及应用
  • Java 集合:泛型、Set 集合及其实现类详解
  • 房屋租赁管理系统
  • 具身智能操作知识梳理与拓展
  • 第六章 QT基础:4、QT的TCP网络编程
  • FEKO电磁仿真软件许可类型
  • 【特殊场景应对6】频繁跳槽:行业特性与稳定性危机的解释边界
  • Rust 语言使用场景分析
  • 多源数据集成技术分析与应用实践探索
  • 【Element Plus】解决移动设备使用 el-menu 和 el-sub-menu 时,子菜单需要点击两次才会隐藏的问题
  • 记录一下线性回归的学习
  • 极狐GitLab 如何撤销变更?
  • 数据结构线性表的顺序存储结构
  • c语言之杂识
  • 璞华ChatBI闪耀2025数博会:对话式数据分析引领数智化转型新范式
  • BM1684X+FPGA+GMSL视觉解决方案:驱动工业智能化升级的核心引擎
  • 卷积神经网络常用结构
  • 第一章:基于Docker环境快速搭建LangChain框架的智能对话系统:从langchain环境搭建到多轮对话代码实现(大语言模型加载)
  • 读书笔记:淘宝十年产品与技术演进史