position sticky的兼容

  position的sticky这个属性一般用于导航条,因为他在屏幕范围(viewport)时该元素的位置并不受到定位影响(设置是top、left等属性无效),当该元素的位置将要移出偏移范围时,定位又会变成fixed,根据设置的left、top等属性成固定位置的效果。基本就是自适应的导航条。

  但是其兼容性在ios上很流畅,但是再安卓上,安卓4.4.4以下全军覆没,莫名其妙在安卓7上也跪了。可能你会想,既然兼容那么差,为什么还要用。在微信浏览器上,滚动并不是即时的,它需要等滚动完,scroll事件才触发,这样通过js计算距离屏幕顶端距离,然后fixed和relative定位切换,并不流畅,会卡顿。而sticky却非常流畅,不能因为一部分用户的兼容不了,放弃使用这个属性。

  那么只能通过判断当前设备是否支持sticky这个属性,如果不支持则替换成fixed和relative定位组合;

  以下是demo代码

  

  let elem = window.document.documentElement;
  let w = elem.clientWidth;
  let h2 = (w/16*9);//使用sticky定位的顶端是一个16比9的div
  function isSupportSticky() {//判断是否支持sticky
    var prefixTestList = [‘‘, ‘-webkit-‘];
    var stickyText = ‘‘;
    for (var i = 0; i < prefixTestList.length; i++ ) {
      stickyText += ‘position:‘ + prefixTestList[i] + ‘sticky;‘;
    }
    // 创建一个dom来检查
    var div = document.createElement(‘div‘);
    div.style.cssText = stickyText;
    document.body.appendChild(div);
    var isSupport = /sticky/i.test(window.getComputedStyle(div).position);
    document.body.removeChild(div);
    div = null;
    return isSupport;
  }
  let fixBottomBar = function(){
    var  topbarTop = h2;
    window.onscroll = function(e){
      let winTop = document.body.scrollTop;
      if(winTop > topbarTop){
          _this.navClass[‘nav-fixed‘] = true;  //vue动态添加class写法
//            topbar.setAttribute(‘class‘,‘nav nav-fixed‘);  //原生js写法
      }else{
        _this.navClass[‘nav-fixed‘] = false;
//            topbar.setAttribute(‘class‘,‘nav‘);
      }
    }

  }
  !isSupportSticky() && fixBottomBar();
时间: 2024-08-08 05:38:38

position sticky的兼容的相关文章

鼠标滚动,导航置顶.纯css3的position: sticky;

position: sticky; 这东西来自css3,并且瞬间就完成了置顶的效果. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .a{ //定位头部置顶效果 top: 0; position: sticky; } .b{ //当纯的给个滚

CSS3的position:sticky介绍

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法 position:sticky是一个新的css3属性,它的表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它的行为就像position:rela

粘性布局 position:sticky

今天在网上浏览时偶然发现原来CSS中的position属性除了有以下几个取值之外: static(默认) relative absolute fixed inhert 还有一个之前没见到的取值: sticky 没错= =就是它! sticky顾名思义粘性的,它的作用如下: 盒位置根据正常流计算,然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位.在所有情况下(即便被定位元素为 table 时),该元素定位均不对后续元素造成影响.当

position:sticky布局

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法   position:sticky 是一个新的css3属性,它的表现类似 position:relative 和 position:fixed 的合体,在目标区域在屏幕中可见时,它的行为就像 posit

position:sticky实现iOS6+下的粘性布局

position:sticky实现iOS6+下的粘性布局 使用 position: sticky 达到粘性元素区域悬浮效果

使用 position: sticky 达到粘性元素区域悬浮效果

在一些很长的表格中,常常会使用表头悬浮的设计以方便阅读,即在表格离开窗口之前,表头会一直 fixed 悬浮在表格的最顶上.还有许多诸如评论框等元素,也采用了这种被称为 Sticky Pin 或者 粘性元素 的设计. 这种效果一直以来需要通过 JavaScript 实现.不过就在去年,这项结合了 Relative (在屏幕中时) 和 Fixed (移出屏幕时) 的样式效果被提案添加到了 CSS3 中.下面是一个示例: .sticky { position: -webkit-sticky; posi

position:sticky用法

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法 position:sticky是一个新的css3属性,它的表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它的行为就像position:rela

position sticky 用法

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } ul{ width: 100%; height: 100%; } ul>li{ height: 400px; width: 100%; l

css3 position:sticky

最近在写一个小程序,项目中遇到一个需求:页面滚动到tab切换菜单时,菜单fixed到页面顶部: 实现方法: 使用小程序的onPageScroll事件,滚动到指定位置添加fixed样式: bug1:获取指定位置错误,因为上面都是图片,在图片未加载出来时获取高度,高度值不对,解决办法就是在imgae上加bindload事件,在图片加载加载完成之后再获取高度: bug2:onPageScroll事件会有延迟,导致最终效果会出现卡顿,百度之后知道有一个position:sticky,是一个很有意思的属性