空闲总结了下水平垂直居中方案,欢迎补充:

水平居中

水平居中有两种情况:

  • 子元素是内联元素

    这种那个情况下只需要在父元素定义: text-align:center;
    例子:
    html:

     //省略了body,html
    <div class="out-div">
    hello world
    </div>
    <div class="out-div">
    <span>
    same for a inline tag
    </span>
    </div>

    css:

     .out-div{
    height: 100px;
    background: blueviolet;
    text-align: center;
    border:1px solid black;
    }

    这里注意到out-div 并没有是设置水平宽度,然而其width依然占满了屏幕,这点在定宽块状元素的水平居中会谈。

  • 子元素是块状元素

    • 子素的width确定,也就是定宽情况,只需要设置margin: auto;即可
      例子:
      html:

      <div class="block-out-div">
      <div class="block-div"> </div>
      </div>

      css:

      .block-out-div
      {
      height: 100px;
      background: gold;
      margin:auto; //重点
      }
      .block-div{
      width: 50px;
      height: 50px;
      background: #cccccc;
      }

      原理: “正常流中的块级元素框的水平总和就等于父元素的width”(from css权威指南),这就是所谓块状元素正常情况下独占一行,一就是上面的div没设置width默认占满父元素的宽度。”在水平格式化的“7大属性”中,只有3个可以设置为auto: width, margin-left, margin-right”(from css权威指南),这七个值分别是 margin-left,border-left-width,padding-left,width,padding-right,border-right-width,margin-right
      .默认情况下这七个值应该等于父元素宽度.

    • 子元素宽度不确定
      这种情况下比较麻烦,但是解决方案有几种:
      1.利用table-cell原理,什么意思呢,table标签是特殊的标签,他会根据内容来确定自己宽度,所以在需要居中的内容里面套上一套table即可,相当套了一个定宽的块状元素,然后给这个table设置margin:auto即可
      具体示例如下:

      <div class="block-out-div">
      <table class="table-wrap">
      <tr>
      <td>
      <div class="no-width-box">
      宽度不确定
      </div>
      </td>
      </tr>
      </table>
      </div>

      只需设置table,css:

          .table-wrap{
      margin: auto;
      }

      这种做法缺点是增加了标签,破坏了语义化
      2.第二种简单的方式是直接给需要设置居中子元素设置:display:inline-block;使得子元素拥有内联元素的特性,这时候为父元素设置:text-align:center;就可以居中了.
      例子:
      html:

      <div class="block-out-div">
      <div class="no-width-box">
      宽度不确定
      </div>
      </div>

      css:

         .block-out-div
      {
      height: 100px;
      background: gold;
      border: 1px solid black;
      text-align: center;
      }
      .no-width-box{
      display: inline-block;
      }

      3.运用脱离文档流的方式,先给父元素设置position:relative;和left:50%;相当于把父元素整个移动百分五十%,但是对于子元素而已,他的整个应该是在父元素的中分线右边,这个时候对子元素设置rposition:relative;和left:-50%;就可以居中了。这里需要注意一点是relative 设置定位是不会脱离文档流的,他本身位置并没有变,可以理解视觉上的变化,这种情况下很可能会影响到别的元素,通过设置父元素float:left;来解决.
      例子:
      html,我一样用上面的html代码,改下css:

      <div class="block-out-div">
      <div class="no-width-box">
      宽度不确定
      </div>
      </div>

      css:

          .block-out-div
      {
      height: 100px;
      background: gold;
      border: 1px solid black;
      float: left;
      position: relative;
      left: 50%;
      }
      .no-width-box{
      position: relative;
      left: -50%;
      } display: inline-block;

      这种方式需要注意的是父元素已经脱离了文档流,已经脱离了文档流。

垂直居中

  • 单行文本
    这种情况不管子元素是内联还是块状,只要父元素高度确定,设置height的值和line-height值相同就可以垂直居中.
    例子:
    html:

    <div class="out-div">
    hello world
    </div>

    css:

    .out-div{
    height: 100px;
    background: blueviolet;
    border:1px solid black;
    line-height: 100px;
    }
  • 多行文本
    对于有多个元素需要居中的情况,有几种解决方案:
    1.table-cell,套上table标签,包括tr,td,设置table高度和父元素高度一样即可
    html:

     <div class="block-out-div">
    <table>
    <tr>
    <td>
    <div>
    宽度不确定
    </div>
    <div>
    宽度不确定
    </div>
    </td>
    </tr>
    </table>
    </div>

    css:

     table{
    height: 100px;
    }
    .block-out-div
    {
    height: 100px;
    border: 1px solid black;
    }

    这种方式原理是利用vertical-align:middle;这个属性设置对table类的标签的子元素居中,也就是display:table-cell的元素有效;当然也可以显示设置别的元素为table-cell,而且默认的table-cell元素,vertical-align为middle,所以,只要设置了display就行了。
    还有别的方式:比如可以通过设置position属性等.

h5 弹性盒子布局中

这个时候用flex,实现水平垂直居中变得很容易.
例子:

<div class="contianer">
<div class="child">
flex
</div>
</div>

css:

.contianer{
height: 100px;
display: flex;
justify-content: center; //水平居中
align-items: center; //垂直居中
}

css 水平垂直居中总结的更多相关文章

  1. CSS水平垂直居中总结

    行内元素水平居中 把行内元素包裹在块级父元素中,且父元素中的css设置text-align:center; <!DOCTYPE html> <html> <head> ...

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

    1.文字或者内联元素的垂直水平居中对齐 css属性 -- 水平居中:text-aligin:center; 垂直居中: line-height:height; 例子:. html: <div c ...

  3. 把简单做好也不简单-css水平垂直居中

    44年前我们把人送上月球,但在CSS中我们仍然不能很好实现水平垂直居中. 作者:Icarus 原文链接:http://xdlrt.github.io/2016/12/15/2016-12-15 水平垂 ...

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

    原文链接:http://caibaojian.com/370.html 水平垂直居中,特别是使用在列表的时候经常会用到的,以前有需求的时候我也做过类似的代码,是使用display:table-cell ...

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

    直接进入主题! 一.脱离文档流元素的居中 方法一:margin:auto法 CSS代码: div{ width: 400px; height: 400px; position: relative; b ...

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

    直接进入主题! 一.脱离文档流元素的居中 方法一:margin:auto法 CSS代码: div{ width: 400px; height: 400px; position: relative; b ...

  7. 常见的几种 CSS 水平垂直居中解决办法

    用CSS实现元素的水平居中,比较简单,可以设置text-align center,或者设置 margin-left:auto; margin-right:auto 之类的即可. 主要麻烦的地方还是在垂 ...

  8. 介绍一种css水平垂直居中的方法(非常好用!)

    这次介绍一下一个水平垂直居中的css方法,这个方法可以说是百试百灵,废话不多说,直接附上代码: html,body{ width:100%; height:100%; } 你需要居中的元素{ posi ...

  9. css水平垂直居中

    margin法(水平居中) 需要满足三个条件: 元素定宽 元素为块级元素或行内元素设置display:block 元素的margin-left和margin-right都必须设置为auto 三个条件缺 ...

随机推荐

  1. [原创]解决net-speeder与pptp不兼容的问题

    解决net-speeder与pptp不兼容的问题 终于受不了很多玩意儿都被墙了,每次FQ费半天劲,浪费时间,于是在搬瓦工搞了个VPS,年付19美元,挺便宜的,赶紧的VPN搭起,优化走起. VPN搭建很 ...

  2. SQL 随记

    内连接 select e.empno as 员工编号, e.ename as 员工名字, d.dname as 部门名字from emp e inner join dept d on e.deptno ...

  3. 限制EditText最多输入多少汉字

    mInputEditText.setFilters(new InputFilter[]{new InputLengthFilter(MAX_INPUT_SIZE)}); public class In ...

  4. shell十三问

    1) 为何叫做 shell ?在介绍 shell 是甚幺东西之前,不妨让我们重新检视使用者与计算机系统的关系:图(FIXME)我们知道计算机的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱 ...

  5. Redis: OOM command not allowed when used memory > ‘maxmemory’

    现象 日志里出现异常: OOM command not allowed when used memory > 'maxmemory' 原因 内存已满,不允许再存数据了,可以通过redis-cli ...

  6. C# Word生成PDF

    //Word转换成pdf /// <summary> /// 把Word文件转换成为PDF格式文件 /// </summary> /// <param name=&quo ...

  7. 南非的5DT数据手套使用说明

    数据手套-5 Ultra/数据手套-14 Ultra 5DT 数据手套-Ultra数据手套的设计目的是为了满足现代动作捕捉和动画制作等专业人士的严格要求.它提供了舒适,易于使用,小型要素和多种应用的驱 ...

  8. 一个关于Random算法的问题

    指定范围数字,生成随机序列,数字不连续:例如:范围[1-5]  输入 1 3 5 2 4 下面分享两种算法: 算法1:RmNum<RmNext 下面这种算法计算是无压力的 /// <sum ...

  9. 自定义cell侧滑删除

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return Y ...

  10. c++的一个有趣的程序

    最近在作一个实验题:输出一个点移动一个点.如果大神们有更简单的方法,请指点. 这个是成果,很有趣 望大神们指点一二: #include<iostream>#include<stdli ...