zoukankan      html  css  js  c++  java
  • 居中

    说到居中,好像每个前端人都能随口说出几个,像耳熟能详的margin:0 auto,传说中的line-heght之类的。但是,当天天面对各式各样的设计稿时,或许你知道的那几个法宝也不能应对了。

    本文就日常重构中遇到的一些情景给出对应的解决方案,并对每种解决方案的优缺点进行简要概括。


    垂直居中

    -webkit-box- 居中

         

        <style>
              .wraper {
                  background: #DBE6BA;
                  height: 300px;
                   300px;
                  display: -webkit-box;
                  -webkit-box-align: center; // 水平居中
                  -webkit-box-pack: center; // 垂直居中
                  -webkit-box-orient: vertical;
              }
          </style>
          <div class="wraper">
              <span>我是文本我居中</span>
              <span>我是文本我居中</span>
              <span>我是文本我居中</span>
              <span>我是文本我居中</span>

          </div>

    评价:适用于多行文本,缺点是只有-webkit内核浏览器支持,移动端可以多使用。

    height | line-height 等值居中

       

       <style>
            .wraper {
                background: #DBE6BA;
                height: 90px;
                line-height: 90px;
            }
        </style>
        <div class="wraper">
            <span>我是文本我居中</span>
            <span>我是文本我居中</span>
            <span>我是文本我居中</span>
            <span>我是文本我居中</span>
        </div>

    评价:使用于单行文本(图片也可以),缺点是要求父元素高度已知。

    padding 居中

        
        <style>
            .wraper {
                background: #DBE6BA;
                padding: 25px;
                 560px;
            }
        </style>
        <div class="wraper">
            我是文本我居中
            我是文本我居中
            我是文本我居中
            我是文本我居中
       </div>

       

    评价:只是看起来居中,其实是用padding撑满父元素而已,=。=。

    table-cell 居中

        
        <style type="text/css"
              .inner {
                  display: table-cell;
                  vertical-align: middle;
              }
              .wraper {
                  display: table;
                  height: 80px;
                  background: #DBE6FD;
              }
          </style> 
          <div class="wraper">
              <div class="inner">
                  我是文本我居中
                  我是文本我居中
              </div>
         </div>

        

    评价:等于移动端用的较多,很适用。不过要注意的是他可能会破坏布局,要用display破坏原来的block属性。

    absolute 居中

        
        <style type="text/css"
            .inner {
                position: absolute;
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                margin: auto;
                 300px;
                height: 100px;
            }
            .wraper {
                 400px;
                height: 400px;
                background: #DBE6FD;
                position: relative;
            }
        </style> 
        <div class="wraper">
            <div class="inner">
                我是文本我居中
                我是文本我居中
            </div>
       </div>

    评价:要求父元素高度宽度都固定。

      
      <style type="text/css"
              .inner {
                  position: absolute;
                  height: 100px;
                  top: 50%;
                  margin-top: -50px: 
              }
              .wraper {
                   400px;
                  height: 400px;
                  background: #DBE6FD;
                  position: relative;
              }
      </style> 
      <div class="wraper">
          <div class="inner">
                  我是文本我居中
                  我是文本我居中
          </div>
     </div>


    评价:要求需要居中的元素高度已知。

    对于span,img等行内元素,使用vertical-align: middle。

      
      <style>
            p {
                background: #DBE6FD;
                height: 100px;
            }
            img {
                vertical-align: middle;
            }
        </style>
        <p>
            <img align="absmiddle" src="qq.png" alt="qq">
            我是图片后的文字,我要居中
       </p>


    图片和文本要图片居中,可以使用<img src=”” align=”absmiddle” />

      
      <style>
            p {
                background: #DBE6FD;
                text-align: center;
            }
        </style>
        <p>
            <img align="absmiddle" src="qq.png" alt="qq">
            我是图片后的文字,我要居中
       </p>

       

    水平居中

    text-align 居中

      
        <style>
            p {
                background: #DBE6FD;
                text-align: center;
            }
        </style>
        <p>
            <span>我要水平居中!</span>
        </p>

      

    评价: 限于文本和图片等内联元素。

    margin: 0 auto; 居中

        
        <style>
            .outer {
                background: #DBE6FD;
            }
            .inner {
                background: #F3F3F3;
                 80%;
                margin: 0 auto;
            }
        </style>
        <div class="outer">
            <div class="inner">
                <p>我是内容我居中</p>
                <p>我是内容我居中</p>
                <p>我是内容我居中</p>
                <p>我是内容我居中</p>
            </div>
       </div>

       

    评价:只对于块级元素有效。

    absolute

         

        <style>
              .outer {
                  background: #DBE6FD;
                  position: relative;
              }
              .inner {
                  background: #F3F3F3;
                  position: relative;
                  left: 50%;
                   400px;
                  margin-left: -200px;
              }
          </style>
          <div class="outer">
              <div class="inner">
                  <p>我是内容我居中</p>
                  <p>我是内容我居中</p>
                  <p>我是内容我居中</p>
                  <p>我是内容我居中</p>
              </div>

          </div>

    评价:只对宽度已知的元素有效。

    总结:以上每种方法都有自己的优点和缺点,对于特定场景,选用适合此场景的方法即可。

    补充

    box-flex:布局的垂直等高、水平均分、按比例划分。

         

        <style>
            .wraper {
                display: box;
            }
            .sectionOne {
                box-flex: 3;
            }
            .sectionTwo {
                box-flex: 2;
            }
            .sectionThree {
                box-flex: 1;
            }
        </style>
        <article class="wrap">
            <section class="sectionOne">01</section>
            <section class="sectionTwo">02</section>
            <section class="sectionThree">03</section>
        </article>

    说明:

    1.    父元素必须为display:box(此时容器定义为内联元素,使用margin:0 auto无效,要在父元素上使用text-aglin:center.)

    2.    如果其中一个子元素设置了固定宽度,该子元素直接应用设置的宽度,其他的在按比例平分剩下的。

     

    box属性:

    box-orient box-direction(排列顺序,reverse|normal)

    box-align(父容器里面子容器的垂直对齐方式 start | end | center | baseline | stretch)

    box-pack(子容器的水平对齐方式 start | end | center | justify)

  • 相关阅读:
    DNS-PreFetch 技术及其他前端优化加载技术
    Windows10 睡死
    Dns Over Https(DoH) --- Windows10 预览版 19645
    原生JavaScript(JS)修改添加CSS样式表 (更好的性能)
    技术的本质
    工程设计
    文件分配表 FAT -WIKI
    博客皮肤修复: 行号和搜索引擎快照(基于 Cnblogs-Theme-SimpleMemory v1.3.3)
    java-知识点学习和补充
    红黑树01--[红黑树简介&添加修复]
  • 原文地址:https://www.cnblogs.com/freestyle21/p/4457448.html
Copyright © 2011-2022 走看看