移动端position:fixed 解决方案

相信不少人做移动端项目的时候都会遇到position:fixed 的坑。

下面提供一个解决方法,不用引入任何其他的js库,纯css解决。

解决问题的关键就是:fixed元素内部必须嵌套一个position:absolute元素,用来装载内容,目的就是为了让内容脱离fixed文档流,屏蔽一些fixed的坑

html部分

<!DOCTYPE html>
<html lang="zh_cmn">
<head>
<meta name="description" content="CSS position:flex in mobile" />
<meta charset=utf-8 />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<title>CSS position:flex in mobile</title>
</head>
<body>
  <header>
    <div class="fixed">
      <div class="wrap float">
        <div class="left-icon">
          <span class="glyphicon glyphicon-chevron-left"></span>
        </div>
        <h1>HEADER</h1>
        <div class="right-icon">
          <span class="glyphicon glyphicon-calendar"></span><span class="glyphicon glyphicon-list"></span>
        </div>
      </div>
    </div>
  </header>
  <div class="main">
    -------------- start --------------<br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    content <br>
    --------------- end ---------------
  </div>
  <footer>
    <div class="fixed">
      <div class="wrap flex">
        <a href="#"><span class="glyphicon glyphicon-picture"></span></a>
        <a href="#"><span class="glyphicon glyphicon-film"></span></a>
        <a href="#"><span class="glyphicon glyphicon-qrcode"></span></a>
      </div>
    </div>
  </footer>
</body>
</html>

Css部分(Less)

@height: 50px;
@icon-font-path: ‘http://cdn.bootcss.com/bootstrap/3.2.0/fonts/‘;
@icon-font-name: ‘glyphicons-halflings-regular‘;

@font-face {
  font-family: ‘Glyphicons Halflings‘;
  src: url(‘@{icon-font-path}@{icon-font-name}.eot‘);
  src: url(‘@{icon-font-path}@{icon-font-name}.eot?#iefix‘) format(‘embedded-opentype‘),
       url(‘@{icon-font-path}@{icon-font-name}.woff‘) format(‘woff‘),
       url(‘@{icon-font-path}@{icon-font-name}.ttf‘) format(‘truetype‘),
       url(‘@{icon-font-path}@{icon-font-name}.svg#glyphicons_halflingsregular‘) format(‘svg‘);
}

.glyphicon {
  font-family: ‘Glyphicons Halflings‘;
  font-size: 24px;
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-calendar:before {
  content: "\e109";
}

.clearfix() {
  &:before,
  &:after {
    content: " "; /* 1 */
    display: table; /* 2 */
  }
  &:after {
    clear: both;
  }
}

* {
  margin: 0;
  padding: 0;
  font-size: 16px;
}

a {
  color: #fff;
}

header, footer {
  width: 100%;
  height: @height;

  .fixed {
    position: fixed;
    left: 0;
    width: 100%;
    height: @height;

    .wrap {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;

      &.float {

        h1 {
          position: absolute;
          top: 0;
          left: 0;
          width: 100%;
          font-size: 20px;
          line-height: @height;
          color: #fff;
          text-align: center;
        }

        .glyphicon {
          display: inline-block;
          margin: 12px 10px;
          color: #fff;
        }

        .left-icon {
          float: left;
        }

        .right-icon {
          float: right;
        }

        .clearfix();
      }

      &.flex {
        display: -moz-box;
        display: -webkit-box;
        display: -webkit-flex;
        display: -moz-flex;
        display: -ms-flexbox;
        display: -ms-flex;
        display: flex;

        >a {
          -webkit-box-sizing: border-box;
          -moz-box-sizing: border-box;
          box-sizing: border-box;
          display: block;
          -webkit-box-flex: 1;
          -moz-box-flex: 1;
          -webkit-flex: 1 1 0;
          -moz-flex: 1 1 0;
          -ms-flex: 1 1 0;
          flex: 1 1 0;
          text-align: center;

          .glyphicon {
            vertical-align: -20px;
          }
        }
      }
    }
  }
}
//顶部固定
header .fixed {
  top: 0;
  background-color: #45b97c;
}
//尾部固定
footer .fixed {
  bottom: 0;
  background-color: #464547;
}

.main {
  margin: 15px 10px;
}

解决方案DEMO:http://jsbin.com/omaCOSir/latest

题外话

一个placeholder自适应bug,页面中使用<input>标签并且有属性placeholder,在页面横屏再转回竖屏时,会导致页面无法自适应,无论是android还是ios都会中招。

解决方法是,在<input>外层容器中加overflow:hidden,这个bug我没有截图,大家可以自测。

时间: 2024-11-14 09:07:31

移动端position:fixed 解决方案的相关文章

移动端position:fixed小结

fixed在移动端是个坑,兼容性就是个极品. ios的bug比较多,详见https://github.com/maxzhang/maxzhang.github.com/issues/2 作者建议我们安卓还是使用fixed比较好,ios用iscroll来填坑比较好 关于fixed一些小细节还可以参考一下: https://github.com/maxzhang/maxzhang.github.com/issues/11 里面提及到的例子:http://output.jsbin.com/omaCOS

解决ios、微信移动端的position: fixed; 支持性不好的问题 &amp;&amp; 禁用下拉暴露黑底的功能

解决ios.微信移动端的position: fixed; 支持性不好的问题 在chrome中的多个部分使用了position: fixed之后,都可以正常的布局,但是放在微信上却出现了不能正常显示的问题(第一个问题). 并且使用了postion: fixed; 的一个种类名称栏在微信下下滑不了,而body是可以的,确实让人很郁闷(第二个问题). 对于第二个问题,我们可以采取的方式是使得微信不能下滑暴露出 powered by ... 的字样. 但是对于第一个问题,确实没有很好的解决方法. 所以就

移动端兼容性问题解决方案

1. IOS移动端click事件300ms的延迟响应 移动设备上的web网页是有300ms延迟的,玩玩会造成按钮点击延迟甚至是点击失效.这是由于区分单击事件和双击屏幕缩放的历史原因造成的, 2007年苹果发布首款iphone上IOS系统搭载的safari为了将适用于PC端上大屏幕的网页能比较好的展示在手机端上,使用了双击缩放(double tap to zoom)的方案,比如你在手机上用浏览器打开一个PC上的网页,你可能在看到页面内容虽然可以撑满整个屏幕,但是字体.图片都很小看不清,此时可以快速

小技巧css解决移动端ios不兼容position:fixed属性,无需插件

转载自:http://www.ithao123.cn/content-649841.html 移动端开发仿app头部底部固定设置position:fixed,android2.2以上已经实现.但是在ios8以下系统,当小键盘激活时,都会出现位置浮动问题.如图: 如何解决: 查阅资料之后想到一下几种解决方法 1,使用position:absolute模拟 <script type="text/javascript">     window.onscroll=function(

IE6下position:fixed不支持问题及其解决方案

IE6有诸多奇葩,不支持position:fixed就是其中之一.所以在做一些比如固定在顶部或者底部或者固定元素的效果时需要考虑兼容IE6的这个问题.解决方案是用Ie6的hack. *html {/* 只有IE6支持 */ background-image: url(about:blank); background-attachment: fixed; /* 固定背景 */ } #box { /* 非IE6浏览器使用固定元素 */ position: fixed; top: 0; left: 0

附两个自己认为比较重要的链接地址(移动端的position:fixed,flexbox实现垂直居中布局)

http://bradfrost.com/blog/mobile/fixed-position/移动端实现position:fixed有哪些问题 http://zh.learnlayout.com/flexbox.html 版权声明:本文为博主原创文章,未经博主允许不得转载.

css解决移动端ios不兼容position:fixed属性,无需插件

移动端开发仿app头部底部固定设置position:fixed,android2.2以上已经实现.但是在ios8以下系统,当小键盘激活时,都会出现位置浮动问题.如图: 如何解决: 查阅资料之后想到一下几种解决方法 1,使用position:absolute模拟 <script type="text/javascript">     window.onscroll=function(){     $(".fixed").css("top"

手机QQ内置浏览器position:fixed 属性支持不好的解决方案

在三星android 手机QQ内部打开连接时,有的手机QQ版本低时,会对position:fixed 支持不好. 表现在position:fixed 后 再用margin:0 atuo; 居中时,页面不居中: 可以这样解决:在外层再套一个div层.将position:fixed 属性放在外层然后定宽: 里面的层width:100%,margin:0 auto; 就可以完美支持低版本手机QQ position:fixed 后margin:0 auto; 不居中的问题.

浮动层固定兼容IE6 position:fixed的最佳解决方案

第一种:css方法 有时候当我们需要把一个元素固定在页面的某个部位,一般都是用css中的“position:fixed;”方法来解决,但是IE6不支持fixed,所以今天分享一个兼容IE6的页面底部固定层CSS代码.如下: .bottom{bottom:0;position:fixed;height:23px;line-height:23px;width:100%;z-index:999; _bottom:auto;_width:100%;_position:absolute; //_top:e