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

元素滚动和内容垂直居中同时存在,完美的 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布局吧。

相关文章:

  • IP地址与子网掩码
  • IDEA add gitlab account 提示
  • Windows 同步技术-一次性初始化
  • 一文读懂https
  • 系统分析师第八、九章
  • 管理100个小程序-很难吗
  • 【源码分析】Linux内核ov13850.c
  • 异构迁移学习(无创脑机接口中的跨脑电帽迁移学习)
  • 开源 RAG 引擎:文档理解精准、检索高效、可视化干预灵活,一站式搞定
  • 钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
  • Redis-cli常用参数及功能的详细说明
  • (20)VTK C++开发示例 --- 读取 DEM(高程地图)文件
  • 通过Quartus II实现Nios II编程
  • 影刀RPA怎么制作文生图,把网站上图片获取到本地文件夹工作流
  • 【已解决】Chrome开发工具栏无法看到React Developer Tools
  • 伺服器用什么语言开发呢?做什么用什么?
  • 网页布局新视角:全局居中的魅力与应用
  • Mapreduce中maven打包
  • 基于ARM+FPGA+DSP的储能协调控制器解决方案,支持国产化
  • 游戏开发核心技术解析——从引擎架构到攻防体系的完整技能树
  • 印控克什米尔26名游客遭恐袭丧生后,印度对巴宣布多项反制措施
  • 范福生受审:任高密市长、市委书记时滥用职权,致公共财产利益重大损失
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 苗旋已任民航局空管局局长、党委副书记
  • 小米首次参加上海车展:没有雷军依旧人气爆棚,YU7上市时间未推迟
  • 看正背面月壤、听火星上的声音,记者探营“中国航天日”科普展