美文网首页
定位与浮动

定位与浮动

作者: 2016_18点 | 来源:发表于2016-09-25 00:33 被阅读0次

    position的五个属性值:
    static、absolute、relative、fixed、inherit

    各自特点:
    static: 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)
    absolute:脱离文档流,相对于(除了static以外的)最近的已定位父元素进行定位,其他盒子与其他盒子内的文本都会无视它
    relative :没有脱离正常的文档流,被设置元素相对于其原始位置而进行定位,其原始占位信息仍存在
    fixed:脱离文档流,生成绝对定位的元素,相对于浏览器窗口进行定位。
    inherit:规定应该从父元素继承 position 属性的值


    z-index的3个属性值:
    auto、number、inherit

    各自特点:
    z-index:Z-index属性决定了一个HTML元素的层叠级别。元素层叠级别是相对于元素在Z轴上(与X轴Y轴相对照)的位置而言。一个更高的Z-index值意味着这个元素在叠层顺序中会更靠近顶部。这个层叠顺序沿着垂直的线轴被呈现。
    auto:默认。堆叠顺序与父元素相等。
    number:设置元素的堆叠顺序。
    inherit: 规定应该从父元素继承 z-index 属性的值。


    float的4个属性值:
    left、right、none、inherit

    各自特点:
    float:指定一个盒子(元素)是否可以浮动,元素向哪边浮动,会脱离文档流,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围。
    left/right:向左/右浮动
    none:默认值。元素不浮动,并会显示在其在文本中出现的位置
    inherit:只有写了float:inherit 才会继承父元素的float属性
    clear:clear 属性规定元素的(文档流中)哪一侧不允许其他浮动元素。


    清除浮动的方法
    未清除浮动会导致如下图的影响:

    Paste_Image.png
    方法一:使用带clear属性的空元素
    .clear {clear: both;}  
    
    <div class="news">   
         <img src="news-pic.jpg" />  
         <p>some text</p>  
         <div class="clear"></div>  
    </div>  
    

    优点:简单,代码少,浏览器兼容性好。
    缺点:需要添加大量无语义的html元素,代码不够优雅,后期不容易维护。
    方法二:使用CSS的overflow属性
    给浮动元素的容器添加overflow:hidden;或overflow:auto;可以清除浮动,另外在 IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置 zoom:1。
    在添加overflow属性后,浮动元素又回到了容器层,把容器高度撑起,达到了清理浮动的效果。

    .news {  
      background-color: gray;  
      border: solid 1px black;  
      overflow: hidden;  
      *zoom: 1;  
      }  
    <div class="news">  
         <img src="news-pic.jpg" />  
         <p>some text</p>  
    </div>  
    

    方法三:给浮动的元素的容器添加浮动
    给浮动元素的容器也添加上浮动属性即可清除内部浮动,但是这样会使其整体浮动,影响布局,不推荐使用。
    方法四:使用邻接元素处理
    什么都不做,给浮动元素后面的元素添加clear属性。

    .content{clear:both;}  
    
    <div class="news">    
         <img src="news-pic.jpg" />  
         <p>some text</p>  
         <div class="content"></div>  
    </div>  
    

    方法五:使用CSS的:after伪元素
    结合 :after 伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)和 IEhack ,可以完美兼容当前主流的各大浏览器,这里的 IEhack 指的是触发 hasLayout。
    给浮动元素的容器添加一个clearfix的class,然后给这个class添加一个:after伪元素实现元素末尾添加一个看不见的块元素(Block element)清理浮动。

    .clearfix:after{  content: "020";   display: block;   height: 0;   clear: both;   visibility: hidden;   }  
    .clearfix {  /* 触发 hasLayout */   zoom: 1;   }  
    
    <div class="news clearfix">  
         <img src="news-pic.jpg" />  
         <p>some text</p>  
    </div>  
    

    通过CSS伪元素在容器的内部元素最后添加了一个看不见的空格"020"或点".",并且赋予clear属性来清除浮动。需要注意的是为了IE6和IE7浏览器,要给clearfix这个class添加一条zoom:1;触发haslayout。
    推荐
    在网页主要布局时使用:after伪元素方法并作为主要清理浮动方式;在小模块如ul里使用overflow:hidden;


    补充

    • 正常文档流:就是我们没有用css样式去控制的html文档结构,dom结构是没有发生变化的
    • 脱离文档流:float、absolute、fixed
    • 不管是float还是position,使用它们都可以将行内元素转换为隐式的块级元素,不过随之带来的坏处就是会影响兄弟元素
    • z-index只能工作在被明确定义了absolute,fixed或relative 这三个定位属性的元素中。

    相关参考

    探讨行内元素转换为块级元素
    CSS技巧(一):清除浮动

    相关文章

      网友评论

          本文标题:定位与浮动

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