• 居中布局之水平垂直布局


    命题:如下不定宽高的父元素与子元素

    <div class="parent">
            <div class="child">DEMO</div>
    </div>

    问题一:使子元素水平居中

           方案1

    .child{
          display:inline-block;   //ie6、7可用{display:inline;zoom:1;}进行兼容
    }
    .parent{
          text-align:center;
    }

         优点:浏览器兼容性好

         缺点:子元素会继承文本居中特性,故如不希望子元素中文本居中,可对子元素设置{text-align:left;}

         方案2

    .child{
         display:table;          //此属性能使元素宽=内容宽,且具有block属性。
         margin:0 auto;
    }

        优点:只需要对child进行设置

        缺点:不兼容ie6.7。可对结构进行改造,改成table标签

         方案3

    .parent{
         position:relative;
    }
    .child{
         position:absolute;
         left:50%;
         -webkit-transform:translateX(-50%);  //-webkit代表谷歌内核识别码
         -moz-transform:translateX(-50%);     //-moz代表火狐内核识别码
         -ms-transform:translateX(-50%);      //-ms代表ie内核识别码
         -o-transform:translateX(-50%);       //-o代表欧朋【opera】内核识别码
         transform:translateX(-50%);          //符合W3C标准
    }

         缺点:低版本ie6、7及8不支持transform,不同浏览器也可能有兼容问题。

          方案4

    // 1
    .parent{
       display:flex;
       justify-content:center;
    }
    // 2
    .parent{
       display:flex;
    }
    .child{
       margin:0 auto;
    }

        缺点:低版本ie6、7及8不支持flex

    问题二:使子元素垂直居中

        方案1

    .parent{
          display:table-cell;
          vertical-align:middle;    //可作用于inline/inline-block/table-cell
    }

        缺点:不兼容ie6.7。可对结构进行改造,改成table标签

       方案2

    .parent{
         position:relative;
    }
    .child{
         position:absolute;
         top:50%;
         -webkit-transform:translateY(-50%);  //-webkit代表谷歌内核识别码
         -moz-transform:translateY(-50%);     //-moz代表火狐内核识别码
         -ms-transform:translateY(-50%);      //-ms代表ie内核识别码
         -o-transform:translateY(-50%);       //-o代表欧朋【opera】内核识别码
         transform:translateY(-50%);          //符合W3C标准
    }

        缺点:低版本ie6、7及8不支持transform,不同浏览器也可能有兼容问题。

       方案3

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

        缺点:低版本ie6、7及8不支持flex

    问题三:使子元素垂直水平都居中

       方案1

    .parent{
    text-align:center; display:table-cell; //可把结构换成table
    vertical-align:middle; //可作用于inline/inline-block/table-cell
    }
    .child{
    display:inline-block;
    //ie6、7可用{display:inline;zoom:1;}进行兼容
    }

       方案2

    .parent{
         position:relative;
    }
    .child{
         position:absolute;
         left:50%;
         top:50%;
         -webkit-transform:translate(-50%,-50%);  //-webkit代表谷歌内核识别码
         -moz-transform:translate(-50%,50%);     //-moz代表火狐内核识别码
         -ms-transform:translate(-50%,50%);      //-ms代表ie内核识别码
         -o-transform:translate(-50%,50%);       //-o代表欧朋【opera】内核识别码
         transform:translate(-50%,50%);          //符合W3C标准
    }

        方案3

    .parent{
           display:flex;
           justify-content:center;
           align-items:center;
    }

       缺点:兼容性较差

    总结:

       在解决类似问题时,要掌握各css特性,然后把问题进行分解,最后结合特性桌布解决。还要掌握各css的兼容性

        

  • 相关阅读:
    洛谷3163 CQOI2014危桥 (最大流)
    UVA557 汉堡 Burger
    洛谷1950 长方形 (单调栈)
    洛谷3317 SDOI2014重建(高斯消元+期望)
    洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
    test1
    test
    background
    bzoj1075
    bzoj1074
  • 原文地址:https://www.cnblogs.com/july-Vivian/p/4614503.html
Copyright © 2020-2023  润新知