小黑说事Web前端之路让前端飞

CSS各种居中实现方式

2017-04-30  本文已影响124人  薛普定朗谔克

原文地址:CSS各种居中实现方式

CSS居中是每次布局都需要面对的问题,但是同一个居中方法并不是任何元素都能使用的,内联元素和块级元素的居中方式各不相同,下面我就对它们分别进行讨论和总结。

内联元素


内联元素的特点

以下实例都是基于下面的html代码:

        <div class="out">
            <span class="in">
                居中元素
            </span>
        </div>

水平居中

  1. 父元素样式设置为text-align:center,里面包含的行内元素居中,如果父元素内部还存在包含文字且不定宽的块元素,那么这个块元素也会居中。

         .out{
              text-align: center;
             }
    
  2. 父元素样式设置为display:flex; justify-content:center,里面包含的行内元素居中。

         .out{
             display:flex;
             justify-content:center
         }   
    

垂直居中

  1. 单行文本:可将其父元素的高度和行高设置为相等的值 height = line-height

         .out{
            height: 100px;
            line-height: 100px;
         }
    
  2. 多行文本:用一个span标签将所有的文字封装起来,再用一个容器包裹span,设置属性display: table-cell;vertical-align: middle。这种方法同样适用于使图片居中。

        .out{
            display: table-cell;
            vertical-align: middle;
         }
    
  3. 父元素样式设置为display:flex; align-items: center,里面包含的行内元素居中。

         .out{
             display:flex;
             align-items: center;
         }   
    

块级元素


块级元素的特点

以下实例都基于下面的html代码:

        <div class="out">
            <div class="in">
                居中元素
            </div>
        </div>

水平居中

定宽块级元素水平居中

  1. 父元素样式设置为display:flex; justify-content:center,则里面包含的块元素居中

           .out{
             display:flex;    
             justify-content:center;
         }  
    
  2. 该元素样式设置为 margin:0 auto;

           .in{
             width: 100px;  
             margin: 0 auto;
         }  
    
  3. 该元素样式设置为 position: relative;left: 50%;margin-left: -0.5*width(负的该元素宽度的一半)

           .in{
             width: 100px;
             position: relative;
             left: 50%;
             margin-left: -50px;
         }
    
  4. 上述方法把relative改为absolute也同样适用,根据实际情况选择适合自己的方法。

          .in{
             width: 100px;
             position: absolute;
             left: 50%;
             margin-left: -50px;
         }
    

不定宽块级元素水平居中

  1. 对于包含文字的块元素可将其父元素设置为text-align:center

         .out{
            text-align:center;    
         }
    
  2. 若不包含文字,可把该块级元素变成行内元素,即设置display:inine,再给其父元素设置text-align:center

         .out{
            text-align:center;    
         }
         .in{
            display:inine;    
         }
    
  3. 父元素样式设置为display:flex; justify-content:center,则里面包含的块元素居中

         .out{
            display:flex;    
            justify-content:center;
         }
    
  4. 该元素样式设置为 position: absolute;left: 50%;transform: translate(-50%,0)

         .in{
            position: absolute; 
            left: 50%;  
            transform: translate(-50%,0);
         }
    

垂直居中

定高块级元素垂直居中

  1. 父元素样式设置为display:flex; align-items: center,则里面包含的块元素居中

        .out{
            display:flex; 
            align-items: center;
        }
    
  2. 该元素样式设置为 position: relative;top: 50%;margin-top: -0.5*height(负的该元素高度的一半)

         .in{
            height:100px;
            position: relative; 
            top: 50%;  
            margin-top:-50px;
         }
    
  3. 该元素的父元素的position值设置为relative,将该元素样式设置为position: absolute;top:50%;margin-top: -0.5*height

         .out{
              position: relative;    
           }
         .in{
              height:100px;
              position: absolute; 
              top:50%;   
              margin-top: -50px
           }
    
  4. 该元素的父元素的position值设置为relative,将该元素样式设置为position: absolute;top:0;bottom: 0;left: 0;right: 0;margin: auto;

         .out{
             position: relative;    
          }
         .in{
             height:100px;
             position: absolute; 
             top:0;   
             bottom: 0;
             left: 0;
             right: 0;
             margin: auto;
          }
    

不定高块级元素垂直居中

  1. 父元素样式设置为display:flex; align-items: center,则里面包含的块元素居中

         .out{
             display:flex; 
             align-items: center;
         }
    
  2. 该元素样式设置为 position: relative;top: 50%;transform: translate(0,-50%)

         .in{
             position: relative;
             top: 50%;
             transform: translate(0,-50%);
         }
    
  3. 该元素的父元素的position值设置为relative,将该元素样式设置为position: absolute;top:50%;translate(0,-50%)

         .out{
              position: relative;
            }
         .in{
             position: absolute;
             top: 50%;
             transform: translate(0,-50%);
           }
    

小结

上一篇下一篇

猜你喜欢

热点阅读