zoukankan      html  css  js  c++  java
  • CSS居中问题:块级元素和行级元素在水平方向以及垂直方向的居中问题

    元素的居中问题是每个初学者碰到的第一个大问题,在此我总结了下各种块级 行级 水平 垂直 的居中方法,并尽量给出代码实例。

    首先请先明白块级元素和行级元素的区别

    块级元素

    块级元素水平居中

     1:margin: 0 auto

    element {
       margin: 0 auto;
    }

     2:负边距+绝对定位

    .outside {
        width:500px;
        height:200px;
        background-color: red;
        margin:100px auto;
        position: relative;
    }
    .inner {
        width: 100px;
        height:50px;
        background-color: yellow;
        position: absolute;    //  绝对定位
        left:50%;              //     +
        margin-left: -50px;      //  负边距
    }

     3: 弹性盒子flexbox:

    .outside {
        width:500px;
        height:200px;
        background-color: red;
        margin:100px auto;
        position: relative;
        display: flex;           // 父元素display:flex;
        justify-content: center;  // 主轴上居中对齐
    }
    .inner {
        background-color: yellow;
        height:100px;
        width: 50px;
    }

    块级元素垂直居中(元素高度已知):

    1: 利用负边距+绝对定位

      .outside {
            width:720px;
            height: 720px;
            margin: 0 auto ;
            position: relative; /*祖先元素的非static定位*/
        }
        .inner {
            width: 350px;
            height: 350px;
            position: absolute;
            top: 50%; /*元素相对其最近的position属性不为static的元素(祖先元素)移动50%,toprightbottom 和 left 属性指定定位元素的位置。*/
            margin-top: -175px; /*元素向上移动自身的50%,此时,正好垂直居中*/
        }

    2. 弹性盒子flexbox:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Test</title>
        <style>
            .outside {
                width:300px;
                height: 200px;
                margin:100px auto;
                background-color: red;
                display: flex;            // 弹性盒子
                align-items: center;      // 弹性盒子
            }
            .inner {
                width:50px;
                height: 30px;
                background-color: yellow;
            }
        </style>
    </head>
    <body >
     <div class="outside">     
         <div class="inner">
             inner
         </div>
     </div>
    </body>
    </html>

     3. 绝对定位+父元素position非static+子元素transform

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Test</title>
        <style>
            .outside {
                width:300px;
                height: 200px;
                margin:100px auto;
                background-color: red;
                position: relative;              // 父元素非static
            }
            .inner {
                width:50px;
                height: 30px;
                background-color: yellow;
                position: absolute;
                top:50%;
                transform: translateY(-50%);    // 相对于自身高度,向上移动50%
            }
        </style>
    </head>
    <body >
     <div class="outside">     
         <div class="inner">
             inner
         </div>
     </div>
    </body>
    </html>

    块级元素垂直居中(元素高度未知):

    1. position:absolute + transform属性

    利用transform的translate()或translateY()方法

    1 <!--Html 代码-->
    2 <div class="outside">
    3     <div class="inner">
    4     </div>
    5 </div>
     1  /*Css 代码*/
     2     .outside {
     3         background-color: #5555ee;
     4         width:720px;
     5         height: 720px;
     6         margin: 0 auto ;
     7         position:relative;
     8         
     9     }
    10     .inner {
    11         width: 350px;
    12         height: 350px;
    13         background-color: #ee5555;
    14         position: absolute;
    15         top:50%;/*相对祖先元素向下移动50%*/
    16         transform: translateY(-50%);/*元素y轴移动自身的一半*/
    17         transform: translate(,-50%);/*元素y轴移动自身的一半,与上一行效果相同*/
    18     }

     2 position:absolute + margin-top:auto + margin-bottom:auto

    利用上边距,下边距在垂直方向的auto

    <head>
        <style type="text/css">
         .outside {
             width: 300px;
             height: 300px;
             background-color: red;
             margin: 60px auto;
             position: relative;
         }
         .inside {
             width: 150px;
             height: 150px;
             background-color: black;
             position: absolute;  首先是父元素与子元素的position属性值要“配套”好,这样子元素的top,bottom才可以发挥应有的作用
             top:30px;
             bottom:30px;        当垂直方向上的margin为auto时,不论是margin-left,margin-right,还是margin:auto, auto总是会试图充满整个父元素,
             margin: auto 4px;   30px,30px,auto的“配合”是此方法有效果的关键所在。子元素被要求拉伸到top:30px;bottom:30px;(两个值必须一样,这样才居中),但因为高度被固定而做不到这一点,所以margin:auto;就让它居中了。
         }                       
        </style>
    </head>
    <body>
        <div class="outside">
           <div class="inside"></div>
        </div>
    </body>

    3 flexbox弹性盒子

    <!--Html 代码-->
    <div class="outside">
        <div class="inner">
        </div>
    </div>

    3.1 设置direction:row或是direction:columns

    .outside {
        display: flex;
        flex-direction: column;
        /*主轴方向设为垂直方向*/
        justify-content: center;
        /*主轴方向上的元素的对齐方式*/
    }
    .outside {
        display: flex;
        flex-direction: row;
        /*默认主轴方向就是row*/
        align-items: center;
        /*交叉轴上的元素的对齐方式*/
    }

    3.2 目前来说最简单的方法:

    .outside {
        display: flex;
    }
    
    .inner {
        margin: auto;
    } 

    二 行级元素

    水平居中:

        {
            text-align: 
        }

    垂直居中:

    (The End)
  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/oneplace/p/5264052.html
Copyright © 2011-2022 走看看