CSS水平垂直居中(最常见的三种方案flex、grid、absolute)

本文简单介绍一下现代 CSS 中最常见的三种水平垂直居中方案。

html:

html 复制代码
<div class="container">
  <div class="content"></div>
</div>

css:

css 复制代码
.container {
  width: 500px;
  height: 500px;
  border: 1px solid #000;

  .content {
    width: 200px;
    height: 200px;
    background-color: #ccc;
  }
}

Flex 布局

方案1:父元素设置 flex 布局,并设置主轴以及交叉轴的对齐方式:

css 复制代码
.container {
  width: 500px;
  height: 500px;
  border: 1px solid #000;
  display: flex;
  justify-content: center;
  align-items: center;

  .content {
    width: 200px;
    height: 200px;
    background-color: #ccc;
  }
}

方案2:父元素设置 flex 布局,子元素设置 margin: auto

css 复制代码
.container {
  width: 500px;
  height: 500px;
  border: 1px solid #000;
  display: flex;

  .content {
    width: 200px;
    height: 200px;
    background-color: #ccc;
    margin: auto;
  }
}

Grid 布局

父元素设置 grid 布局,以及 place-items: centerplace-itemsalign-itemsjustify-items 的简写形式。

Grid 的兼容性不如 Flex,对于一些比较老的浏览可能不太支持。

css 复制代码
.container {
  width: 500px;
  height: 500px;
  border: 1px solid #000;
  display: grid;
  place-items: center;

  .content {
    width: 200px;
    height: 200px;
    background-color: #ccc;
  }
}

绝对定位 absolute

使用绝对定位会使元素脱离文档流,一般常用于弹窗、对话框等。

父元素设置相对定位,子元素设置绝对定位,设置 top、left 以及 transform。

css 复制代码
.container {
  position: relative;
  width: 500px;
  height: 500px;
  border: 1px solid #000;

  .content {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 200px;
    height: 200px;
    background-color: #ccc;
  }
}

topleft属性都设置为50%。这会将.content元素的左上角定位到其父元素(.container)的中心。transform: translate(-50%, -50%);被应用到.content元素上。这会将.content元素自身向左和向上移动其自身宽度和高度的50%,从而使得.content元素的中心与其父元素的中心对齐,实现了居中。

相关推荐
cyadyx20 分钟前
Vite 比 Webpack 构建效率更高
前端·webpack·node.js·vite
mCell2 小时前
AI 时代 SVG 画图的潜力
前端·agent·svg
我命由我123457 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_8 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_9 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc10 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne11 小时前
【ijkplayer】 硬解码流程
前端
kyriewen12 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩12 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒12 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端