CSS 快速实现水平垂直居中

CSS 快速实现水平垂直居中

文章目录


一、前言

本文探究的是如何快速实现水平垂直居中,重点在于快速两个字,我对于快速的理解,一是不需要编写大量的 CSS 属性,二是不需要手动计算居中的具体位置数值 ,基于这两个前提下,使用像 line-height 和定位布局这种方式是不被允许的,那还剩下什么选择呢?答案就是使用弹性布局。


二、弹性布局普遍做法

对于有前端基础的朋友来讲,这个方法实在是太普遍了,无非就是基于 justify-contentalign-self 属性实现的,也没啥内容好提的。

html 复制代码
<div class="flex-wrap">
  <div class="flex-content"></div>
</div>

<style>
	.flex-wrap {
      /* 核心内容 */
      display: flex;
      justify-content: center;
      align-items: center;
      /* 无关紧要的 */
      width: 100vw;
      height: 100vh;
    }
    .flex-content {
      /* 无关紧要的 */
      width: 100px;
      height: 100px;
      background-color: orange;
    }
</style>

三、弹性布局的妙用

如果只是讲大多数人都会使用的弹性布局居中属性,那也太没意思了,在此讲解一个大多数都不知道的方法,相较于普通做法而言,只需要两个CSS属性即可实现。
该实现基于 FFC(Flex Formatting Contexts)、GFC(GridLayout Formatting Contexts) 上下文布局。

在WSC规范文档中弹性盒子部分,有这么一句描述:Prior to alignment via justify-content and align-self, any positive free space is distributed to auto margins in that dimension,翻译一下的意思是:任何正的剩余空间将会在 justify-contentalign-self 属性之前被分配到该维度的自动边距中 ,这意味这 margin: auto 属性不仅仅作用于水平方向,甚至可以作用于垂直方向上!

html 复制代码
  <div class="flex-wrap">
    <div class="flex-content"></div>
  </div>

<style>
  .flex-wrap {
    /* 核心内容 */
    display: flex;
    /* 无关紧要的 */
    width: 100vw;
    height: 100vh;
  }
  .flex-content {
    /* 核心内容 */
    margin: auto;
    /* 无关紧要的 */
    width: 100px;
    height: 100px;
    background-color: pink;
  }
</style>

看着很牛很方便,但是在使用得当的前提下进行,此方法还是有一定的缺陷,但影响很小:

  • 使用此方法的前提是,需要明确是否为父子元素布局,父元素与子元素都要各自设置一个属性,对于非固定的子元素,我的建议是还是在父元素上使用传统的justify-contentalign-self 属性。
  • 值得一提的是,margin: auto 是在justify-contentalign-self 属性之前实现的,既然剩余空间都被分配完了,无可避免会造成这两个属性的失效,那目标就很明确了,确定只是水平垂直方向居中的话,从这两个方法中选一个,两者不能同时存在。

参考资料💘

🍅因发布平台差异导致阅读体验不同,源文贴出:《CSS 快速实现水平垂直居中》


推荐博文🍗

相关推荐
AI浩3 小时前
【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
运维·服务器·前端
涔溪3 小时前
CSS 网格布局(Grid Layout)核心概念、基础语法、常用属性、实战示例和进阶技巧全面讲解
前端·css
2401_878454534 小时前
浏览器工作原理
前端·javascript
西陵4 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
by__csdn5 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
天天扭码5 小时前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
Luna-player6 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05196 小时前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys6 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选6 小时前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc