CSS水平垂直居中布局方案概述

简介: 在前端开发中,通过CSS实现布局容器的居中,也有诸多方法方式,当然也是CSS面试题中的经典面试题,在本文章中会系统的分析综述 通过 Flexbox 布局模块 与 CSS Grid布局模 实现容器的居中效果

在这里插入图片描述

在前端开发中,通过CSS实现布局容器的居中,也有诸多方法方式,当然也是CSS面试题中的经典面试题,在本文章中会系统的分析综述 通过 Flexbox 布局模块 与 CSS Grid布局模 实现容器的居中效果。

在传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性来实现基本布局,包括本文章的居中排列。

** 你可能需要
CSDN 网易云课堂教程
掘金 EDU学院教程
知乎 Flutter系列文章
头条同步 百度同步

本文章首发于微信公众号(biglead) 我的大前端生涯 ,同步刊登各技术论坛。


1 Flexbox中实现水平垂直居中

1.1 Flexible Box 的简述

在2009年,W3C提出出的 Flex 布局方案,Flex是Flexible Box的缩写,可意为”弹性布局”,任何一个容器都可以指定为Flex布局,可用来为盒状模型提供最大的灵活性。

采用Flex布局的元素,称为Flex容器(flex container),以下称为 Flexbox ,Flex容器中的所有子元素称为Flex项目(flex item)。

任何一个容器都可以指定为Flex布局,如下所示:

.box{
  display: flex;
}

或者是

.box{
  display: inline-flex;
}

可点击这里查看 CSS中flex和inline-flex的区别


Flexbox 默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end,如下图所示:
在这里插入图片描述

1.2 Flexible Box 中子 Item的居中对齐

在Flexbox布局模块中,使其子 Item (flex item) 居中对齐(水平方向与竖直方向全部居中),如下图 1-1 所示效果:
在这里插入图片描述

1.2.1 实现方式一 只设置 Flex容器的属性

如图 1-1 中所示的效果,只需要在Flex容器上设置justify-content、align-items的值为center时,可以让元素在Flex容器中达到水平垂直居中的效果,如下代码清单1-2所示:

/*代码清单1-2*/
<div class="flex__container">
  <div class="flex__item"></div>
</div>
    /*Flex 容器*/
    .flex__container {
      display: flex;
      justify-content: center;
      align-items: center;

      width: 300px;
      height: 300px;
      background-color: gray;
    }

    /*Flex 子 Item */
    .flex__item {
      width: 100px;
      height: 100px;
      background-color: aqua;
    }

justify-content 用来设置水平居中,如下图1-3所示:
在这里插入图片描述
align-items 用来限制竖直居中,如下图1-4所示:
在这里插入图片描述


如下图1-2中所示,将Flex容器中的子Item增加为 4 个,此种方法设置的居中效果依然有效果。
在这里插入图片描述
图 1-2 中对应的 代码如下:

/*代码清单1-3*/
<div class="flex__container">
  <div class="flex__item"></div>
  <div class="flex__item"></div>
  <div class="flex__item"></div>
  <div class="flex__item"></div>
</div>
    /*Flex 容器*/
    .flex__container {
      display: flex;
      justify-content: center;
      align-items: center;

      /*flex-direction: column;*/
      /*display: inline-flex;*/

      width: 300px;
      height: 300px;
      background-color: gray;
    }

    /*Flex 子 Item */
    .flex__item {
      width: 50px;
      height: 50px;
      margin-left: 10px;
      margin-top: 10px;
      background-color: aqua;
    }
1.2.2 实现方式 二 同时设置 Flex容器属性与其子Item的属性
    /*Flex 容器*/
    .flex__container {
      display: flex;
      justify-content: center;
    }

    /*Flex 子 Item */
    .flex__item {
      align-self: center;
    }

对应的 Html 层级代码如下:


<div class="flex__container">
  
  <div class="flex__item"></div>
  <div class="flex__item"></div>
  
</div>
1.2.3 Flex容器中子 Item 设置margin: auto

如果在Flex容器中只有一个 子 Item ,可以在 Item中显式的设置margin的值为auto,也可以实现水平垂直居中效果,如下图1-5所示:
在这里插入图片描述

2 Grid 布局中实现水平垂直居中

Css 中的 Grid 布局可称为 CSS Grid Layout Module ,是CSS为布局新增的一个模块,简单的理解为 Grid 布局,是一个网络布局,任何一个容器都可以指定为 Grid 布局,如下所示:

.box{
 /*或者 inline-grid */
  display: grid;
}

在 Grid 布局中,实现其子 Item的垂直水平居中效果可直接 配置 place-items 为 center ,如下图 1-6所示:

    /*Grid 容器*/
    .flex__container {
      /*或者 inline-grid */
      display: grid;
      place-items: center;
    }

在这里插入图片描述


完毕
公众号 我的大前端生涯

相关文章
|
13天前
|
前端开发 安全 容器
CSS如何优雅实现卡片多行排列布局?
【8月更文挑战第24天】CSS如何优雅实现卡片多行排列布局?
31 3
|
14天前
|
前端开发 开发者 容器
探索现代Web开发中的CSS Grid布局技术
【8月更文挑战第29天】在数字时代的浪潮中,网页设计不断进化以适应日新月异的用户需求。CSS Grid布局技术作为一项革新性的前端工具,为设计师和开发者提供了前所未有的布局能力。本文旨在通过深入浅出的方式介绍CSS Grid的核心概念、基本用法以及在实际项目中的应用,帮助读者快速掌握这一强大的网页布局工具。
39 3
|
18天前
|
前端开发 开发者 容器
【Web布局的革命】探索CSS Grid栅格系统,打造未来网页设计!
【8月更文挑战第25天】在网页设计领域,布局至关重要。传统的布局方法难以满足复杂需求,CSS Grid 栅格系统因此诞生。它是一种二维布局模式,能直接控制行和列,简化复杂网格的设计。通过定义 `display: grid;` 创建网格容器,并利用 `grid-template-columns` 和 `grid-template-rows` 设置行列尺寸,轻松实现响应式布局。此外,CSS Grid 支持高级功能,如网格区域划分和对齐设置,极大提升了布局的灵活性和创意空间。随着浏览器兼容性的增强,CSS Grid 必将成为未来网页设计的关键技术之一。
38 1
|
1月前
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
121 8
|
28天前
|
前端开发
CSS Grid 布局:span 关键字
CSS Grid 布局:span 关键字
29 0
|
1月前
|
前端开发 容器
css中弹性布局使用方法
css中弹性布局使用方法
29 0
|
1月前
|
编解码 前端开发 容器
CSS弹性布局:打造响应式与灵活的网页设计
CSS弹性布局:打造响应式与灵活的网页设计
65 0
|
2月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
2月前
|
前端开发 容器
CSS【详解】对齐 (含文本垂直对齐,文本水平对齐、单行文本垂直居中、多行文本垂直居中、6 种方案块级元素水平垂直居中 、7 种方案图片水平垂直居中、文本自适应对齐、图标和文本对齐,图片和文本对齐等)
CSS【详解】对齐 (含文本垂直对齐,文本水平对齐、单行文本垂直居中、多行文本垂直居中、6 种方案块级元素水平垂直居中 、7 种方案图片水平垂直居中、文本自适应对齐、图标和文本对齐,图片和文本对齐等)
40 0
|
2月前
|
编解码 前端开发 C++
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
90 0