zoukankan      html  css  js  c++  java
  • CSS position

    1. position property

    • static
    • relative
    • fixed
    • absolute
    • sticky

    2. static

    static 是 position 属性的默认值。如果省略 position,默认就是 static。

    static 的元素处于网页正常流里面正常的位置。

    这个时候设置 top,right,bottom,left的话完全不起作用。

    3. relative

    relative是相对于默认位置(相对于 static,正常流中的正常位置)进行偏移,即定位基点是元素的默认位置。

    relative必须使用 <top> | <bottom> | <left> | <right> 这四个属性一起使用,用来指定便宜的方向和距离。

    div {
    	position: relative;
    	top: 20px;
    }
    

    4. absolute

    absolute是相对于上级元素(一般是父元素),即定位基点是父元素。倘若父元素为static定位的话,定位基点就会变成网页的根元素 html。

    absolute 也要搭配 top、right、bottom、left 一起使用。

    <div id="father">
      <div id="son">
      </div>
    </div>
    <style>
      #father {
        position: relative;
      }
      #son {
        position: absolute;
        top: 20px;
      }
    </style>
    

    父元素是 relatve 定位,子元素是 absolute 定位,所以子元素定位基准点是父元素,相对于父元素的顶部向下偏移 20 px。如果父元素是 static 定位,上面的例子就是距离网页的顶部向下偏移 20px。

    张鑫旭大佬说,position:absolute 与float:left 是近亲。两者有两大共性:包裹性、破坏性。具体可以来这里看:https://www.zhangxinxu.com/wordpress/2010/12/css-%E7%9B%B8%E5%AF%B9%E7%BB%9D%E5%AF%B9%E5%AE%9A%E4%BD%8D%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89/

    包裹性

    包裹性换种说法就是让本来行内正常流的盒子 inline-block 化,例如一个 div 块的默认宽度是 100%的,一旦被 position 属性缠上,则100%默认宽度就会变成自适应内部元素的宽度。

    破坏性

    浮动的破坏被别人诟病,清除浮动很烦人。

    但是,position:absolute 的破坏性是更猛的,浮动的破坏性可以 clearfix 来清除,但是 position:absolute的破坏是无法被修复的。

    所以总结就是,absolute 能不用就尽量不用,千万别滥用。有的属性滥用就是单纯的多点代码,而有点属性的滥用给后期的维护造成很大的麻烦。

    5. fixed

    fixed 是相对于 viewport 进行偏移。定位的基点是你的显示器中网页的左上角。元素的位置不会变,固定到浏览器窗口上。

    搭配 top、bottom、left、right 使用,如果不适用这四个属性,默认就是元素本身的位置。

    div {
    	position: fixed;
    	top: 0;
    }
    

    6. sticky

    sticky跟前面的属性值都不一样,是 css3 新增的属性。

    这个东西很奇妙,有些时候是relative,有些时候是fixed。大多用来做网页的搜索栏、表头的固定、堆叠效果这些。

    具体规则: 当页面滚动,父元素开始脱离视口(部分开始看不见的时候),只要与 sticky 元素的距离达到生效门槛,relative定位就会自动切换到 fixed 定位。等父元素完全脱离视口(不见的时候),fixed 定位自动切换为 relative 定位。

    #toolbar {
    	position: -webkit-sticky;
    	position: sticky;
    	top: 20px;
    }
    

    上面代码中,页面向下滚动时,#toolbar的父元素开始脱离视口,一旦视口的顶部与#toolbar的距离小于20px(门槛值),#toolbar就自动变为fixed定位,保持与视口顶部20px的距离。页面继续向下滚动,父元素彻底离开视口(即整个父元素完全不可见),#toolbar恢复成relative定位。

    stickyd详解的两篇文章

    1. https://www.zhangxinxu.com/wordpress/2018/12/css-position-sticky/
    2. https://www.zhangxinxu.com/wordpress/2020/03/position-sticky-rules/

    7. 问题

    position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

    直接看这篇文章。

    https://www.cnblogs.com/jackyWHJ/p/3756087.html

  • 相关阅读:
    Kubernetes 认证(证书)过期怎么办
    JavaScript 全屏显示窗口
    IE6下很无语的问题,不知为何
    项目开发-让设计模式成为一种心智(转)
    CSS中Float概念相关文章采撷
    随记浏览器兼容性
    常用正则表达式
    ASP.NET 调用Delphi DLL问题
    ASP.NET调用DELPHI DLL
    转:Oracle 排序中常用的NULL值处理方法
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13261255.html
Copyright © 2011-2022 走看看