元素居中的多种方法——css布局技巧

140 阅读2分钟

第一种:利用定位

<html lang="en">
<head>    
<meta charset="UTF-8">    
<title>Title</title>    
<style>        
     .content{            
          width:500px;            
          height:300px;            
          border:1px solid #0a3b98;            
          position: relative;        
     }        
     .box{            
          width:100px;            
          height:40px;            
          background: #f0a238;            
          position: absolute;            
          top:0;            
          left:0;            
          right:0;            
          bottom:0;            
          margin:auto;        
     }
</style>
</head>
<body> 
     <div class="content">    
          <div class="box"></div>
     </div> 
</body>
</html>

思路:父级相对定位,子级绝对定位  四个定位属性的值都设置0;如果子级没有设置宽高,则会和父级一样宽高。如果子级设置了的宽高,则会按照实际设置来显示;但是实际上子级的虚拟占位已经撑满了整个父级,这时候再给它一个margin:auto就可以上下左右都居中了

第二种,定位配合css3位移

<html lang="en">
<head>    
<meta charset="UTF-8">    
<title>Title</title>    
<style>        
     .content{            
          width:500px;            
          height:300px;            
          border:1px solid #0a3b98;            
          position: relative;        
     }        
     .box{            
          width:100px;            
          height:40px;            
          background: #f0a238;            
          position: absolute;            
          top:50%;            
          left:50%;            
          transform: translate(-50%,-50%);
        
     }
</style>
</head>
<body> 
     <div class="content">    
          <div class="box"></div>
     </div> 
</body>
</html>

思路:父级相对定位,子级绝对定位,给子级的top,left两个属性设置百分比;这个百分比是相对于父级的宽高来进行计算的;如果只给定这两个值,则子级的右上角会和父级的中心点对齐,然后利用css3中的位移属性把自身再往左上角各移动50%就可以让子级在父级中上下左右都居中了

第三种,利用内联块元素 display:inline-block

<html lang="en">
<head>    
<meta charset="UTF-8">    
<title>Title</title>    
<style>        
     .content{            
          width:500px;            
          height:300px;            
          border:1px solid #0a3b98;            
          text-align: center;        
     }
     
     .content:before{            
          content: '';            
          height:100%;            
          width:0;            
          display: inline-block;            
          vertical-align: middle;        
     }

     .box{
         width:100px;
         height:40px;
         background: #f0a238;
         display: inline-block;
         vertical-align: middle;
     }
</style>
</head>
<body>
     <div class="content">
         <div class="box"></div>
     </div>
</body>
</html>

思路:首先,把子级转换成内联块元素,可以利用text-align:center实现左右居中,而这个方法难点就在上下居中上。子级是一个内联块元素,给父级设置一个行高子级无法上下居中。所以需要更加复杂的操作: 给子级设置垂直对齐方式:vartical-align  这个属性只对内联元素以及内联块元素起作用;它有这么些值:top,bottom,middle;这个属性需要一个参照物,如果父级里面有两个子元素(利用伪元素before生成一个参照物),两个子元素都设置了vertical-align:middle,那么得到的效果只是这两个元素之间居中对齐而已。并不会把两个子元素都放在父级的中间。把其中一个元素设置高度百分百,那么这时候另一个元素就会处于父级上下居中的位置了。

第四种,弹性盒模型

<html lang="en">
<head>    
<meta charset="UTF-8">    
<title>Title</title>    
<style>        
     .content{            
          width:500px;            
          height:300px;            
          border:1px solid #0a3b98; 
          display: flex;            
          justify-content: center;            
          align-items: center;

     }

     .box{
         width:100px;
         height:40px;
         background: #f0a238;
     }
</style>
</head>
<body>
     <div class="content">
         <div class="box"></div>
     </div>
</body>
</html>

思路:css3语法

第五种,网格布局 Grid

<html lang="en">
<head>    
<meta charset="UTF-8">    
<title>Title</title>    
<style>        
     .content{            
          width:500px;            
          height:300px;            
          border:1px solid #0a3b98; 
          display: grid;            
          justify-content: center;            
          align-items: center;

     }

     .box{
         width:100px;
         height:40px;
         background: #f0a238;
     }
</style>
</head>
<body>
     <div class="content">
         <div class="box"></div>
     </div>
</body>
</html>

思路:css3语法