美文网首页
css8种垂直方法,8种水平方法

css8种垂直方法,8种水平方法

作者: 胡萝卜樱 | 来源:发表于2018-09-02 13:54 被阅读0次

    水平居中

    1.行内元素

    父元素 text-align: center
    

    2.块级元素

    方法1:

    子元素 margin: 0 auto;
    
    子元素会设置宽度,因为块级元素默认独占一行
    

    方法2:父类应用width:fit-content,子类浮动

    父元素
    .parent{
        width: -moz-fit-content;
        width: -webkit-fit-content;
        width:fit-content;
        margin:0 auto;
    }
    
    子元素
    .son {
        background: #ccc;
        float: left;
    }
    
    html:
    <div class="parent">
      <div class="son"></div>
      <div class="son"></div>
      <div class="son"></div>
    </div>
    
    parent: [width:fit-content(css3)]
    配合margin可以轻松实现水平居中
    支持情况:
        目前只支持Chrome 和 Firefox浏览器.
    https://caniuse.com/#search=fit-content
    

    方法3:父类应用display:flex;

    .parent {
        display: flex;
        justify-content: center;
    }
    
    html:
    <div class="parent">
      <div class="son"></div>
      <div class="son"></div>
      <div class="son"></div>
    </div>
    
    flexbox两种方法之一
    display: flex;  flexbox2012版 
    
    支持:
        Chrome 21 +
        Safari 6.1 +
        Firefox 22 +
        Opera(和Opera Mobile)12.1 +
        IE 11+
    

    方法4:父类应用display: box;

    .parent {
      display: -webkit-box;
      -webkit-box-orient: horizontal;
      -webkit-box-pack: center;
      
      display: -moz-box;
      -moz-box-orient: horizontal;
      -moz-box-pack: center;
      
      display: -o-box;
      -o-box-orient: horizontal;
      -o-box-pack: center;
       
      display: -ms-box;
      -ms-box-orient: horizontal;
      -ms-box-pack: center;
          
      display: box;
      box-orient: horizontal;
      box-pack: center;
    
    }
    
    html:
    <div class="parent">
        <div class="son"></div>
        <div class="son"></div>
        <div class="son"></div>
    </div>
    
    flexbox两种方法之二
    display: box;  flexbox2009版 
    
    支持是:
        Chrome any
        Firefox 2+
        Safari 3.1+...
        IE 9 +
        Opera any
    
    

    方法5: 使用绝对定位,和css3新增的transform

    关键:transform
    
    .parent {
        position: relative;
    }
    
    .son {
        position: absolute;
        left: 50%;
        transform: translate(-50%, 0);
    }
    
    html:
    <div class="parent">
        <div class="son"></div>
    </div>
    
    
    

    方法6: 使用绝对定位, margin-left:负值,子类width固定

    关键字:宽度固定,margin-left: -0.5宽度,position
    
    .parent {
        position: relative;
    }
    
    .son {
        position: absolute;
        left: 50%;
        margin-left: -25px;
      
        width: 50px(固定);
        background: #ccc;
    }
    
    html:
    <div class="parent">
        <div class="son"></div>
    </div>
    
    子类width固定
    

    方法7: 使用绝对定位,以及left:0;right:0;margin:0 auto; 子类width固定

    
    .parent {
        position: relative;
    }
    
    .son {
        position: absolute;
        width: 60px;
        left: 0;
        right: 0;
        margin: 0 auto;
    }
    
    html:
    <div class="parent">
        <div class="son"></div>
    </div>
    子类width固定
    

    垂直居中

    1.行内元素

    .parent {
        line-height: 150px;
    }
    
    

    2.行内块级元素

    方法1: display: inline-block, vertical-align:middle和一个伪元素让内容块处于容器中央

    .parent::after {
        content: '';
        height: 100%;
    }
    
    .parent::after, .son {
        display: inline-block;
        vertical-align: middle;
    }
    
    html:
    <div class="parent">
        <div class="son"></div>
        <div class="son"></div>
    </div>
    
    vertical-align对齐方式
    

    方法2: 父元素display: table; 子元素display: table-cell; vertical-align: middle;

    .parent {
        width: 100%;
        height: 100%;
        display: table;
    }
    
    .son {
      display: table-cell;
      vertical-align: middle;    
    }
    
    html:
    <div class="parent">
        <div class="son">
            sfsfsdf
        </div>
    </div>
    
    son高度动态改变
    
    在table中,对td,th  可以使用vertical-align
    支持情况:
    

    方法3: 父元素使用flex布局 2012版

    .parent {
        display: flex;
        align-items: center;
    }
    
    
    html:
    <div class="parent">
        <div class="son">
        </div>
        <div class="son">
        </div>
    </div>
    
    son:可不定义宽高
    
    ie8,ie9不支持
    需要加前缀
    

    方法5: 父元素使用flex布局 2009版

    .parent {
        display: box;
        box-orient: vertical;
        box-pack: center;
        
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-box-pack: center;
        
        display: -moz-box;
        -moz-box-orient: vertical;
        -moz-box-pack: center;
        
        display: -o-box;
        -o-box-orient: vertical;
        -o-box-pack: center;
        
        display: -ms-box;
        -ms-box-orient: vertical;
        -ms-box-pack: center;
    }
    
    html:
    <div class="parent">
        <div class="son">
        </div>
        <div class="son">
        </div>
    </div>
    
    son:可不定义宽高
    ie不支持
    需要加前缀
    

    方法5: 可用 transform , 设置父元素相对定位(position:relative), 子元素如下css样式:

    .parent {
        positon: relative;
    }
    
    .son {
        position:absolute;
        top:50%;
        -webkit-transform: translate(-50%,-50%);  
        -ms-transform: translate(-50%,-50%);
        transform: translate(-50%,-50%);
    }
    
    

    方法6:设置父元素相对定位(position:relative), 子元素如下css样式:

    .parent {
        positon: relative;
    }
    
    .son {
        position: absolute;
        top: 50%;
        height:固定;
        margin-top: -0.5高度;
    }
    
    son:固定高度
    优点:
    
    缺点:
    父元素空间不够时, 子元素可能不可见(当浏览器窗口缩小时,滚动条不出现时).如果子元素设置了overflow:auto, 则高度不够时, 会出现滚动条.
    

    方法7:设置父元素相对定位(position:relative), 子元素如下css样式:

    .parent {
        positon: relative;
    }
    
    .son {
        position: absolute;
        height:固定;
        margin: auto 0;
        top: 0;
        bottom: 0;
    }
    
    son:固定高度
    
    优点:简单
    
    缺点:没有足够空间时, 子元素会被截断, 但不会有滚动条.
    

    例子

    相关文章

      网友评论

          本文标题:css8种垂直方法,8种水平方法

          本文链接:https://www.haomeiwen.com/subject/ahlmwftx.html