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

CSS:水平垂直居中

水平垂直居中效果如下:
在这里插入图片描述
HTML:

<div class="parent">
  <div class="child"></div>
</div>

公共的 CSS:

.parent {
  width: 300px;
  height: 300px;
  background-color:#d0e4fe;
}

.child {
  width: 100px;
  height: 100px;
  background-color:orange;
}

一. 行内元素

方法一:text-align + vertical-align

.parent {
  line-height: 300px;
  text-align: center;	/* 水平居中*/
}

.child {
  display: inline-block;	/* 子元素设置为行内块元素*/
  vertical-align: middle;	/* 垂直居中*/
}

二. position 定位

情况一:居中元素定宽定高

方法二:absolute + calc()
.parent {
  positon: relative;	/*使子元素相对父元素绝对定位*/
}

.child {
  position: absolute;
  top: calc(50% - 50px);	/*垂直居中*/
  left: calc(50% - 50px);	/*水平居中*/
}

注意:在 calc() 函数中,运算符前后必须要有空格,否则会导致计算错误。

方法三:absolute + 负 margin
.parent {
  positon: relative;	/*使子元素相对父元素绝对定位*/
}

.child {
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -50px;
  margin-left: -50px;
}

margin 负值:当 margin-left 或 margin-top 属性值为负值时,元素会根据负值的大小向左或向上偏移。当 margin-right 或 margin-bottom 属性值为负值时,元素的位置不会改变,但会影响其身后的元素。这种情况相当于元素宽度或高度缩小,后续的元素会向该元素偏移。

方法四:absolute + margin auto
.parent {
  positon: relative;	/*使子元素相对父元素绝对定位*/
}

.child {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}

margin 设置为 auto 表示自动填充剩余空间。

由于块级元素默认宽度为父元素的宽度,默认高度为内容的高度。因此,在水平方向上,margin: auto 使得左右平分剩余空间达到水平居中的效果。但在垂直方向上,由于没有剩余空间,所以 margin:auto 不能实现垂直居中。

要想通过 margin: auto 实现垂直居中,需要将子元素设置为 position: absolute,同时需要设置 left: 0; right: 0; top: 0; bottom: 0; 来使子元素在水平和垂直方向上都填满父元素,这样再设置 margin: auto 就可以实现水平和垂直方向上都平分剩余空间,达到居中效果。

情况二:不需要子元素固定宽高

方法五:absolute + transform
.parent {
  positon: relative;	
}

.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

实现原理:top 和 left 表示向下和向右偏移父元素宽度或高度的 50%,translate(-50%, -50%) 表示向上和向左偏移自身宽度或高度的 50%,从而实现上下左右居中。

三. flex 布局

方法六:flex

.parent {
  display: flex;
  justify-content: center;	/* 水平居中*/
  align-items: center;		/* 垂直居中*/
}

.parent {
  display: flex;
}

.child {
  margin: auto;
}

四. grid 布局

方法七:grid

.parent {
  display: grid;
  justify-items: center;
  align-items: center;	/*简写为 place-items: center; */
}

.parent {
  display: grid;
  justify-content: center;
  align-content: center;	/*简写为 place-content: center; */
}

.parent {
  display: grid;  
}

.child {
  justify-self: center;
  align-self: center;	/*简写为 place-self: center; */
}

.parent {
  display: grid;  
}

.child {
  margin: auto;
}

http://www.kler.cn/a/229858.html

相关文章:

  • Vue 权限管理最佳实践,从页面到按钮级别的控制
  • 网络地址转换
  • [SWPUCTF 2021 新生赛]include
  • C++自动化测试:GTest 与 GitLab CI/CD 的完美融合
  • Paddle Inference部署推理(十八)
  • Qt中QGraphics绘图类相关解释
  • 【Jenkins】pipeline基本使用
  • Java赋能:大学生成绩量化新篇章
  • [英语学习][27][Word Power Made Easy]的精读与翻译优化
  • 第5节、S曲线加减速转动【51单片机+L298N步进电机系列教程】
  • 如何把vue项目打包成桌面程序 electron-builder
  • Windows中如何使用 Anaconda 和 gempy地质建模
  • 中移在线:基于openGauss的数据库自主创新替代实践
  • 【React】前端React 代码中预览展示excel文件
  • RabbitMQ:分布式系统中的高效消息队列
  • 19:Web开发模式与MVC设计模式-Java Web
  • 第三百一十一回
  • 前端工程化之:webpack1-11(其他配置)
  • Bytebase 签约 Vianova,助力欧洲城市交通智能平台中 Snowflake 和 PG 的变更自动化及版本控制
  • 2.6 假期作业
  • 3D室内虚拟灭火体验为预防火灾提供全新方案
  • 你为什么不喜欢关电脑?我只是想第二天能够快速进入工作状态
  • Web课程学习笔记--CSS盒模型
  • 国考省考行测:平行结构体
  • C# Avalonia 11.0.6 绘图
  • C++ 11新特性之tuple