未知宽度的盒子垂直水平居中

<div id="wrap">
<div class="msg">1111111111111111111111</div>
</div>

如何让类名为msg元素垂直水平居中呢?

第一种:定位     利用css3中transform:translate()属性;Ie系列兼容10,11

#wrap{

  400px;

  height:400px;

  border:1px solid #ccc;

  margin:50px auto;

  position:relative;

}

#wrap .msg{

  position:absolute;

  left:50%;

  top:50%;

  transform:translate(-50%,-50%);

  -webkit-transform:translate(-50%,-50%);

  -moz-transform:translate(-50%,-50%);

  -ms-transform:translate(-50%,-50%);

}

第二种:通过一起使用box-pack,box-align,对#wrap内的子元素垂直水平居中;Ie系列兼容11

#wrap{

  400px;

  height:400px;

  display:-webkit-box;

  -webkit-box-pack:center;

  -webkit-box-align:center;

  display:-moz-box;

  -moz-box-pack:center;

  -moz-box-align:center;

  display:-ms-flexbox;

}

第三种:display:flex;    Ie系列兼容11

#wrap{

  400px;

  height:400px;

  border:5px solid #ccc;

  margin:50px auto;

  display:-webkit-flex;

  display:-ms-flexbox;

  display:flex;

  -webkit-align-items:center;

  -webkit-justify-content:center;

  align-items:center;

  justify-content:center;

}

 根据第一种方法写一个例子

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{
  padding:0;
  margin:0;
  list-style:none;
}
body,html{
  100%;
  height:100%;
}
.fr{
  float:right;
}
.fl{
  float:left;
}
.clearfix:after{
  clear:both;
  display:block;
  content:'';
}
.wrap{
  100%;
  height:100%;
}
.menu{
  100px;
  height:100%;
  background:#ccc;
}
.menu h3{
  line-height:50px;
  text-align: center;
  color:#fff;
}
.menu ul{
  100%;
  height:calc(100% - 50px)!important;
  display:flex;
  display:-webkit-box;
  display:-moz-box;
  display:-ms-flexbox;
  box-orient:vertical;
  -webkit-box-orient:vertical;
  -moz-box-orient:vertical;
  flex-direction:column;
  -webkit-flex-direction:column;
  -moz-flex-direction:column;
  -ms-flex-direction:column;
}
.menu ul li{
  100%;
  color:#fff;
  -webkit-box-flex:1;
  -moz-box-flex:1;
  -ms-flex:1;
  flex:1;
  position:relative;
}
.menu li a{
  display:block;
  position:absolute;
  left:50%;
  top:50%;
  transform: translate(-50%,-50%);
  -webkit-transform: translate(-50%,-50%);
  -moz-transform: translate(-50%,-50%);
  -ms-transform:translate(-50%,-50%);

}
.menu li a img{
  display:block;
  70%;
  height:70%;
  margin:2px auto;
}
.menu li a p{
  height:30%;
  line-height: 1.2;
  text-align:center;
}
@media screen and (max-height:400px){
  .menu li a img{
    display: none;
  }
  .menu li a p{
    font-weight:bold;
    font-size:16px;
  }
}
.content{
  calc(100% - 100px);
}
</style>
</head>
<body>
  <div class="clearfix wrap">
    <div class="fl menu">
      <h3>菜单啊</h3>
      <ul>
        <li>
          <a >
            <img src="iconfont.png">
            <p>111</p>
          </a>
        </li>
        <li>
          <a>
            <img src="iconfont.png">
            <p>222</p>
          </a>

        </li>
        <li>
          <a>
            <img src="iconfont.png">
            <p>333</p>
          </a>
        </li>
        <li>
          <a>
              <img src="iconfont.png">
              <p>444</p>
          </a>
        </li>
     </ul>
    </div>
    <div class="fl content"></div>
  </div>
</body>
</html>

如图:

当屏幕高度低于400px时,图标消失

第二种方法做个例子:根据上个方法相应元素样式改为以下:

.menu ul li{
  100%;
  height:100%;
  color:#fff;
  -webkit-box-flex:1;
  -moz-box-flex:1;
  -ms-flex:1;
  flex:1;
  position:relative;
  display:-webkit-box;
  -webkit-box-pack:center;
  -webkit-box-align:center;
  display:-ms-flexbox;
  display:-moz-box;
  -moz-box-pack:center;
  -moz-box-align:center;
}
.menu li a{
  display:block;
}

第三种方法例子:根据第一个方法相应元素样式改为以下:

.menu ul li{
  100%;
  height:100%;
  color:#fff;
  -webkit-box-flex:1;
  -moz-box-flex:1;
  -ms-flex:1;
  flex:1;
  position:relative;
  display:flex;
  display:-webkit-flex;
  display:-ms-flexbox;
  justify-content:center;
  align-items: center;
  -webkit-justify-content:center;
  -webkit-align-items:center;
}

.menu li a{
  display:block;
}

原文地址:https://www.cnblogs.com/AlexandraZhang/p/7003633.html