我把一个子元素在父元素中水平垂直居中的实现方式分为三类,第一类是宽度已知,第二类是宽度未知,第三类是图片水平垂直居中。

第一类 宽度已知

第一种方式:采用绝对定位

原理

元素开启绝对定位后,水平方向和垂直方向分别要满足下列等式

  • 水平方向:left+margin-left+border-left+padding-left+width+padding-right+border-right+margin-right+right=包含块内容区的宽度
  • 垂直方向:top+margin-top+border-top+padding-top+height+padding-bottom+border-bottom+margin-bottom+bottom=包含块内容区的高度
    如果上述等式不成立,则发生过度约束
    以水平方向为例(假设不指定padding和border,即使指定也对布局没有影响)
    当发生过渡约束时,如果这9个属性的值当中没有auto,则会自动调整right的值,以使等式成立。如果有auto,则自动调整值为auto的属性以使等式成立。
  • 可以设置为auto的值有 left right width 和 margin
    由于前提条件是宽度已知, 所以只能是left,right以及margin可以是auto。所以将left,right的值都设置为0,margin设置为auto,则9个值当中能调整的只有margin,使等式成立。
  • 水平方向和垂直方向的原理一样

代码

<!--HTML代码-->
<div class="outer"><div class="box1"> </div>
</div>
/*CSS代码*/
.outer{position:relative;width:500px;height:500px;background-color:blue;
}
.box1{position:absolute;width:100px;height:100px;top:0;right:0;bottom:0;left:0;margin:auto;
}

第二种方式:将父元素设置为一个单元格

原理

水平方向上还是通过margin设置。垂直方向上通过display将父元素设置为table-cell,即表格的单元格。然后用vertical-align:middle;,使子元素垂直居中

代码

<!--html代码-->
<divclass="box1"><divclass="box2"></div>
</div>
/*CSS代码*/
.box1{width: 500px;height:500px;background-color: blueviolet;display: table-cell;vertical-align: middle;}
.box2{width:100px;height:100px;background-color: aquamarine;margin:0 auto;}

第三种方式:flex布局

原理

利用flex布局,设置justify-content:center,让元素在主轴方向上居中排列
设置align-items:center,让元素在辅轴上居中对齐

代码

<!--HTML文件-->
<div class="outer"><div class="box1"></div>
</div>
/*CSS文件*/
.outer{width:800px;height:800px;background-color:yellow;display:flex;justify-content:center;align-items:center;
}
.box1{width:200px;height:200px;background-color:green;
}

第二类:宽度未知

第四种方式:利用平移实现垂直居中效果

原理

对于宽高未知的元素,我们将他绝对定位,将其偏移量设置为left:50%,top:50%,此时元素在包含块中心的偏右下方。然后再通过平移将其向上和向左移动自身一半的大小

代码

<!-- HTML代码 -->
<div class="box1">1222345</div>
/*CSS代码*/
.box1{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);
}

第三类:图片水平垂直居中

第五种方式

原理

通过给伪元素:after设置高度,撑起父元素,然后让图片垂直居中,再用text-align让图片水平居中

代码

<!--HTML代码-->
<body><img src="../img/bg.jpg" alt="">
</body>
/*CSS代码*/
html,body{height:100%;}body{/*使图片水平居中*/text-align: center;}body::after{content:"";/*让伪元素撑起高度*/height:100%;display:inline-block;vertical-align: middle;}img{/*使图片垂直居中*/vertical-align: middle;}

CSS | 水平垂直居中都有哪几种方式相关推荐

  1. css水平垂直居中(不定高)的三种方法

    <style>.parent{ height:200px;width:200px;border:1px solid #000;}.son{width:100px;background: r ...

  2. css水平垂直居中四种常用方式

    css水平垂直居中 第一种:flex布局水平垂直居中 思路: 给父盒子display属性设置flex值,然后使用justify-content与align-item属性进行居中. 参考:阮一峰的fle ...

  3. html 水平垂直居中,css水平垂直居中有几种实现方式?

    项目中经常碰到需要实现水平垂直居中的样式.下面就总结几种常用的方法 css水平垂直居中有几种实现方式? 1.水平对齐+行高 [思路一]text-align + line-height实现单行文本水平垂 ...

  4. CSS水平垂直居中的几种方法

    我们都知道,固定宽高的 div 在网页中水平垂直居中很简单,相信大家也很容易的写出来,但是不固定宽高的 div 如何水平垂直居中呢?我们在网页布局,特别是手机等 web 端网页经常是不固定宽高的 di ...

  5. CSS水平垂直居中的五种方式

    CSS水平垂直居中的几种方式 absolute and -margin 需要设置盒子的宽度和高度 .father{border:1px solid red;width: 80vh;height: 90 ...

  6. 16种CSS水平垂直居中方法

    16种css水平垂直居中方法以及应用(文字.图片) 一.垂直居中 1.行内元素 基本思想:单行文本子元素line-height 值为父元素 height 值 .parent {height: 200p ...

  7. css居中怎么移动,移动端css水平垂直居中

    水平垂直居中 1.margin 负值调整偏移实现 兼容性: 当前流行的使用方法. .box{ width: 100%; height: 100%; } .content{ position: abso ...

  8. css 水平垂直居中实现方式

    css 水平垂直居中实现方式 css中有好多实现居中的方式,在项目中经常不知道使用哪种方式会比较好,所以记录下来. 水平垂直居中包括行内元素居中,以及块级元素居中 行内元素html结构 <div ...

  9. css水平垂直居中对齐方式

    css水平垂直居中总共有四种方法 ① 使用绝对定位 注意:使用绝对定位居中需要固定宽高 position:absolute; top:0; left:0; bottom:0; right:0; wid ...

最新文章

  1. OCP-052 053部分答案解析
  2. 不懂 Zookeeper?没关系,看这篇就够了!
  3. 会计与python结合-财务与会计前沿讲座——“大数据集训”开讲
  4. 汇编语言——100个数中的最大数
  5. ajax获取后台数据出错parsererror
  6. P3321-Apple Tree【树状数组】
  7. 北邮计算机系统结构课件,TEC-8 运算器组成实验(北邮).ppt
  8. Python实战——2048
  9. MySql数据库 - 2.启动与关闭
  10. vue 父组件给子组件传值
  11. linux下文件管理方式iscsi-ipsan
  12. P2S、P2P、P2SP之对比
  13. 锂电池注液工艺视觉定位方案指南
  14. 邮件客户端 gmail hotmail
  15. 相关性分析的结果解读及说明
  16. 使用浏览器访问tomcat服务器下的文件
  17. 使用跳板机在Pycharm上配置内网服务器
  18. 脚本安装爱普生790K打印机安装完成之后销毁程序(其他版本打印机更换inf文件即可)
  19. React性能优化SCU | PureComponent | memo
  20. 数据探索-数据特征分析

热门文章

  1. 北京市医疗保障的不用定点的可以医保的医院查询步骤
  2. JavaScript 控制(改变)canvas(画布)的大小
  3. 如何核算一个软件开发项目的成本?
  4. 简单实用 微信授权登陆(网页版)
  5. SpringSecurity以及Oauth2(笔记)
  6. 1.2开发小程序的准备工作
  7. 编程中的Context(上下文)
  8. 在qt中使用opengl绘制图形动画
  9. pandas - 特别篇(关于读取DataFrame数据显示不完全的解决办法)
  10. 计算机硬件的五大单元以及CPU的种类