元素居中问题汇总

前几天面试,遇到了一个面试题,关于如何水平,垂直,水平垂直居中的问题,自己答案,写的不是太好,今天就总结一下。


(一)水平居中

(1)块元素 > 行内元素居中

这种情况比较简单直接上代码

       <div id='outer'>
              <span id ="inner">inner</span>
       </div>
#outer{
       text-align:center;
       background-color:#666;
       width:200px;//有无宽度,均可
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
}

效果如下:

wKioL1Waiw_TrDCdAAAZhR2bPHA093.jpg

(2)块元素 > 块元素居中

1)宽度一定时,利用margin: 0 auto

<div id='outer'>
              <div id ="inner">inner</div>
       </div>
#outer{
       background-color:#666;
       width:200px;//有无宽度,均可
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       width:100px;
       margin:0 auto;
}


效果如下:

wKiom1WaiWrjNxG7AAAgm6CTbxw378.jpg


2)宽度未定时,利用display: inline-blocktext-align:center;

       <div id='outer'>
              <div id ="inner">inner</div>
       </div>
#outer{
       text-align:center;
       background-color:#666;
       width:200px;//有无宽度,均可
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       display:inline-block;
       /*display:inline; *//*变成行内元素,会失去padding,margin上下,以及宽高设置,不建议使用*/
}


效果如下:

wKioL1Wai0vwuk2vAAAZYQCqfcE201.jpg


3)多个div

       <div id='outer'>
              <div id ="inner">inner</div>
              <div id ="inner2">inner2</div>
              <div id ="inner3">inner3</div>
       </div>
#outer{
       text-align:center;
       background-color:#666;
       width:200px;//有无宽度,均可
}
 
#inner,#inner2,#inner3{
       color:#fff;
       font-size:20px;
       background-color:red;
       display:inline-block;
       /*display:inline; *//*变成行内元素,会失去padding,margin上下,以及宽高设置,不建议使用*/
}

效果如下:

wKioL1Wai2DwnHoxAAAurrrqZM8362.jpg

(二)水平垂直居中

1.块元素块元素

1)无视宽高,利用table-cell

       <div id='outer'>
              <div id ="inner">inner</div>
       </div>
#outer{
       text-align:center;
       background-color:#666;
       width:200px;
       height:200px;
       vertical-align:middle;
       display:table-cell;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       display:inline-block;
}

效果如下:

wKiom1Waiyaiz161AAAxDQZ-GTI443.jpg


2)绝对定位(未知高度)

<div id='outer'>
              <divid ="inner">inner</div>
       </div>
#outer{
       background-color:#666;
       width:200px;
       height:200px;
       position:relative;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       position:absolute;
       top:0;
       bottom:0;
       right:0;
       left:0;
       margin:auto;
       width:60px;//宽度,高度均要有,不然inner元素会被拉伸直到铺满父元素
       height:60px
}

效果如下:

wKioL1WajQXz3xwTAAAwbSafVBk050.jpg

3)绝对定位(已知高度)

       <div id='outer'>
              <div id ="inner">inner</div>
       </div>
#outer{
       background-color:#666;
       width:200px;
       height:200px;
       position:relative;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       position:absolute;
       top:50%;
       left:50%;
       width:60px;
       height:60px;
       margin-left:-30px;

效果如下:

wKioL1WajR_ANDweAAA4ZzKqaW0848.jpg


2.div块元素>span行内元素

<div id='outer'>
              <span id ="inner">inner</span>
       </div>
#outer{  
       background-color:#666;
       width:200px;
       height:200px;
       display:table-cell;//关键点,然后设置下面的vertical,text-align
       vertical-align:middle;
              text-align:center;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
}


或者

#outer{  
       background-color:#666;
       width:200px;
       height:200px;
       line-height:200px;//关键点
              text-align:center;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
}


效果如下:

wKiom1Wai2DDxckYAAAxDQZ-GTI995.jpg

3. 利用Css3显威力(inner宽度已知,未知均可)

       <divid='outer'>
              <divid ="inner">inner</div>
       </div>
#outer{
       background-color:#666;
       width:200px;
       height:200px;
       position:relative;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
       position:absolute;
       top:50%;
       left:50%;
   transform: translate(-50%, -50%);
}

效果如下:

wKioL1WajUvSNEQBAAA4ZzKqaW0916.jpg

4  flexBoxinner宽度已知,未知均可

<div id='outer'>
              <divid ="inner">inner</div>
       </div>
#outer{
       background-color:#666;
       width:200px;
       height:200px;
       display:flex;
       justify-content:center;
       align-items:center;
}
 
#inner{
       color:#fff;
       font-size:20px;
       background-color:red;
}

效果如下:

wKiom1Wai4yDOKzHAAAxDQZ-GTI193.jpg


目前就发现了这么多,后续不断完善中。

你可能感兴趣的:(元素居中问题汇总)