zoukankan      html  css  js  c++  java
  • css3 position:sticky 粘性元素区域悬浮效果

    官方介绍:

    position:static | relative | absolute | fixed | center | page | sticky

    static:
    对象遵循常规流。此时4个定位偏移属性不会被应用。
    relative:
    对象遵循常规流,并且参照自身在常规流中的位置通过toprightbottomleft这4个定位偏移属性进行偏移时不会影响常规流中的任何元素。
    absolute:
    对象脱离常规流,此时偏移属性参照的是离自身最近的定位祖先元素,如果没有定位的祖先元素,则一直回溯到body元素。盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。
    fixed:
    absolute一致,但偏移定位是以窗口为参考。当出现滚动条时,对象不会随着滚动。
    center:
    absolute一致,但偏移定位是以定位祖先元素的中心点为参考。盒子在其包含容器垂直水平居中。(CSS3)
    page:
    absolute一致。元素在分页媒体或者区域块内,元素的包含块始终是初始包含块,否则取决于每个absolute模式。(CSS3)
    sticky:
    对象在常态时遵循常规流。它就像是relativefixed的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如fixed。该属性的表现是现实中你见到的吸附效果。(CSS3)
    * CSS3新增属性可能存在描述错误及变更,仅供参考,持续更新

    重点了解sticky属性值

    • 当该元素在屏幕中时并不脱离文档流,仍然保留元素原本在文档流中的位置。

    • 当元素在容器中被滚动超过指定的偏移值时,该元素将固定在容器指定的位置。例如:设置了top:50px;那么在sticky元素到达距离相对定位的元素顶部50px的位置时固定,不再向上移动

    • 元素固定的相对偏移是相对于离它最近的具有滚动框的祖先元素,如果祖先元素都不可以滚动,那么是相当于viewport(视口)来计算元素的偏移量

    当目标元素在屏幕中可见时,他的行为就像position:relative;而当页面滚动超出目标区域时,他的表现就像position:fixed;它会固定在目标位置。

     需要注意的是,如果同时定义了left和right值,那么left生效,right会无效,同样,同时定义了top和bottom,top赢

     

    目前该属性需要私有前缀

    .sticky {  
        position: -webkit-sticky;  
        position: -moz-sticky;  
        position: -ms-sticky;  
        position: sticky;  
        top: 15px; // 使用和 Fixed 同样的方式设定位置  
    }

    考虑到兼容性,可以使用js

    <div class="header"></div>
    <style>
    .sticky{
        position:fixed;
        top:0;
    }
    .header{
        width:100%;
        background:#ccc;
        padding:25px 0;
    }
    </style>
    <script>
        var header = document.querySelector('.header');
        var origOffsetY = header.offsetTop;
        function onScroll(e){
            window.scrollY >= origOffsetY ? header.classList.add('sticky') : header.classList.remove('sticky');  
        }
        document.addEventListener('scroll', onScroll); 
    </script>
  • 相关阅读:
    第51月第8天 nsdata分割
    第50月第25天 TestFlight不可用
    第50月第16日 licode libnice owt
    第50月第13天 webrtc抗丢包与带宽自适应
    第50月第12天 LiveVideoStack
    第50月第3天 webrtc fec
    第49月第29天 WebRTC GN构建工具的使用
    第49月第20天 在Mac OS X上.dylib和.so之间的区别
    iOS开发总结(A0)- make table view more responsive
    iOS开发总结(A0)- block基础知识
  • 原文地址:https://www.cnblogs.com/ywang/p/6708854.html
Copyright © 2011-2022 走看看