美文网首页
走进CSS布局

走进CSS布局

作者: 猫晓封浪 | 来源:发表于2018-08-03 11:24 被阅读0次

    div+css布局中常用的布局方式有两种:浮动定位

    浮动

    float CSS属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动中移除,尽管仍然保持部分的流动性(与绝对定位相反)。

    常用值:

    • left:使元素浮动在其所在容器的左侧。
    • right:使元素浮动在其所在容器的右侧。
    • none:使元素不惊醒浮动。

    浮动可以让多个div在一行显示,“float”只有左右浮动和none。让元素默认转换为“内联块级元素”。

    清除浮动的方式:

    1. 额外标签法:在浮动的左后一个元素后,新加一个标签,然后清除浮动。选择器{clear: both;}
    2. 给浮动的元素的父元素添加css样式。overflow: hidden;
    3. 伪元素清除浮动。
    选择器::after{
            content: "";
            display: block;
            height: 0;
            clear: both;
            visibility: hidden;
    }
    

    定位

    CSS position属性用于指定一个元素在文档中的定位方式。toprightbottomleft属性则决定了该元素的最终位置。

    常用值:

    • static:指定元素使用正常的布局行为。
    • relative:元素位置暂时不变,添加边偏移时才移动(相对“自己”的旧位置)。
    • absolute:完全脱离文档流,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。

    静态定位:用处是使元素取消定位。
    相对定位:1. 边偏移时,元素位置移动,但是原位置还在。2. 边偏移时,元素总是以“自己”的左上角为主。
    绝对定位:1. 不占位置,完全脱离文档流。2. 以当前屏幕的左上角为准。3. 当父级元素有定位时,以就近的父级元素的左上角为主。

    左右布局

    • 通过浮动实现
      float+margin:将红色盒子浮动,脱离文档流,此时黄色盒子有一部分在红色盒子下方覆盖,通过margin-left实现黄色盒子将被红色盒子覆盖部分脱离出来(如下图)。
      注:文字没有覆盖是由于文字的特殊性。

    html代码:

      <div class="left">left</div>
      <div class="right">right</div>
    

    css代码:

    .left{
      width: 30%;
      height: 50px;
      background-color: red;
      float: left;
    }
    .right{
      margin-left: 32%;
      height: 50px;
      background-color: yellow;
    }
    
    效果图:
    • 通过定位实现
      通过给父级元素相对定位,再给子元素相对定位的方法实现左右布局。
      html代码:
      <div class="big">
          <div class="left">left</div>
          <div class="right">right</div>
      </div>
    

    css代码:

    .big{
      position: relative;
    }
    .left{
      width: 30%;
      height: 50px;
      background-color: red;
      position: absolute;
    }
    .right{
      width: 69%;
      height: 50px;
      background-color: yellow;
      position: absolute;
      left: 31%;
    }
    

    左中右布局

    • 通过浮动实现
      同左右布局原理;

    html代码:

        <div class="left">left</div>
        <div class="right">right</div>
        <div class="middle">middle</div>
    

    css代码:

    .left{
      width: 20%;
      height: 50px;
      background-color: red;
      float: left;
    }
    .right{
      width: 20%;
      height: 50px;
      background-color: yellow;
      float: right;
    }
    .middle{
      height: 50px;
      background-color: pink;
      margin-left: 21%;
      margin-right: 21%;
    }
    
    效果图:
    • 通过定位实现

    html代码:

      <div class="big">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="middle">middle</div>
      </div>
    

    css代码:

    .big{
      position: relative;
    }
    .left{
      width: 20%;
      height: 50px;
      background-color: red;
      position: absolute;
      left: 0;
    }
    .right{
      width: 20%;
      height: 50px;
      background-color: yellow;
      position: absolute;
      right: 0;
    }
    .middle{
      width: 58%;
      height: 50px;
      background-color: pink;
      position: absolute;
      left: 21%;
    }
    

    水平居中

    • 使内联元素水平居中的方法是text-align: center;
     <!-- html代码: -->
      <p>
        <span>hello</span>
      </p>
    
    /*css代码:*/
    p{
      text-align: center;
      border: 1px solid red;
    }
    span{
      border: 1px solid #000;
    }
    

    可以看到黑色边框的<span>在红色边框的<p>内居中。
    • 使块级元素水平居中的方法是margin: 0 auto;或者通过定位的方式。
      margin方法:
     <!-- html代码: -->
      <div class="box">
        <div class="box-inner"></div>
      </div>
    
    /* css代码:*/
    .box{
      width: 200px;
      height: 200px;
      border: 1px solid #000;
    }
    .box-inner{
      width: 100px;
      height: 100px;
      border: 1px solid #000;
      margin: 0 auto;
    }
    

    定位的方法:
    分两步:
    1. 首先left: 50%;,父级元素的一半。
    2. 再偏移自己宽度的负的一半。
     <!-- html代码: -->
      <div class="box">
        <div class="box-inner"></div>
      </div>
    
    /* css代码:*/
    .box{
      width: 200px;
      height: 200px;
      border: 1px solid #000;
      position: relative;
    }
    .box-inner{
      width: 100px;
      height: 100px;
      border: 1px solid #000;
      position: absolute;
      left: 50%;
      margin-left: -50px;
    }
    

    效果如上margin方法。

    垂直居中

    • 通过定位的方法垂直居中(方法同水平居中),使用topmargin-top
    /* css代码:*/
    .box{
      width: 200px;
      height: 200px;
      border: 1px solid #000;
      position: relative;
    }
    .box-inner{
      width: 100px;
      height: 100px;
      border: 1px solid #000;
      position: absolute;
      left: 50%;
      margin-left: -50px;
      top: 50%;
      margin-top: -50px;
    }
    
    • 通过CSS3的transform来实现
    /* css代码:*/
    .box{
      width: 200px;
      height: 200px;
      border: 1px solid #000;
      position: relative;
    }
    .box-inner{
      width: 100px;
      height: 100px;
      border: 1px solid #000;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50px,-50px);
    }
    

    效果同上。

    相关文章

      网友评论

          本文标题:走进CSS布局

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