• css flex布局iOS8兼容性问题,大多数情况下都能够通过兼容性写法解决,比如: div { display: -webkit-flex; display: flex; -webkit-flex: 1; flex: 1; flex-direction: row; -webkit-flex-direction: row...

    css flex布局iOS8兼容性问题,大多数情况下都能够通过兼容性写法解决,比如:

    div {
      display: -webkit-flex;
      display: flex;
      -webkit-flex: 1;
      flex: 1;
      flex-direction: row;
      -webkit-flex-direction: row;
    }

    如果以上兼容性写法还不能解决问题,那就要看看是不是webpack等自动化构建工具打包的时候导致部分css丢失。可以通过查看打包后的文件查看css内容是否丢失。如果发现是webpack打包导致css部分内容丢失,可以试试下面的解决方法,我这边通过下面的方法能够解决问题。

    检查build目录下的utils.js 的cssloader是否有minimize: true选项,如下:

    const cssLoader = {
      loader: 'css-loader',
      options: {
        sourceMap: options.sourceMap,
        minimize: true
      }
    }

    检查webpack.prod.conf.js是否用到OptimizeCSSPlugin插件,如果有,则去掉,如下:

    // new OptimizeCSSPlugin({
    //   cssProcessorOptions: $sourceMap
    //   ? { safe: true, map: { inline: false } }
    //   : { safe: true }
    // })

    在项目根目录下找到.postcssrc.js文件,将该文件内容替换为下面所示:

    module.exports = {
      "plugins": {
        // to edit target browsers: use "browserslist" field in package.json
        "postcss-import": {},
        "autoprefixer": {
          browsers: [
            "last 10 versions",
            "ie >= 6",
            "ie_mob >= 6",
            "ff >= 10",
            "chrome >= 14",
            "safari >= 3",
            "ios >= 4",
            "android >= 4.0"
          ]
        }
      }
    }
    

    上面介绍的方法,主要针对的是webpack打包的时候,由于css插件优化导致部分css内容丢失的解决方法。

    这里介绍个小技巧,在本地运行的页面,复制该页面的URL,如:http://127.0.0.1:8881/#/test,然后打开草料二维码,根据url生成二维码,用真机扫描二维码,如果真机上扫出来的页面与本地的一致,说明真机浏览器是支持这些css的。

    下面主要总结一下只在iOS8上发现(目前只在iOS8上发现,其他浏览器还没发现问题)的一些比较坑的布局问题。

    1.元素设置flex:1后,子元素height: 100%失效的问题。

     <div id="container">
        <div id="div1">
          <div style="height: 100%; background-color: green;color: white">11111</div>
        </div>
        <div id="div2">
          <div style="height: 100%;color:white;background-color: blue">22222</div>
        </div>
        <div id="div3">3</div>
        <div id="div4">4</div>
    </div>
    <style>
      #container {
        display: flex;
        height: 100%;
      }
      #div1 {
        flex: 1;
        background-color:yellow;
      }
      #div2 {
        flex: 1;
        background-color: red;
      }
      #div3 {
        flex: 1;
        background-color:yellow;
      }
      #div4 {
        flex: 1;
        background-color: red;
      }
    </style>

    如上,理论上,div1,div2,div3,div4会平分父容器container,并且div1会被背景色为绿色的子元素撑满,div2会被背景色为蓝色的子元素撑满。实际上,iOS8上的显示效果如图1所示。可见div1,div2的子元素的height: 100%失效了。解决方法可以通过给div1,div2设置position:relative,然后设置div1,div2的子元素position: absolute;height: 100%;width: 100%。问题即可解决。如图2。

     <div id="container">
        <div id="div1">
          <div style="height: 100%; background-color: green;color: white">11111</div>
        </div>
        <div id="div2">
          <div style="height: 100%;color:white;background-color: blue">22222</div>
        </div>
        <div id="div3">3</div>
        <div id="div4">4</div>
    </div>
    <style>
      #container {
        display: flex;
        height: 100%;
      }
      #div1 {
        posititon: relative;
        flex: 1;
        background-color:yellow;
      }
      #div1 div {
        position: absolute;
        height: 100%;
        width: 100%;
      }
      #div2 {
        position: relative;
        flex: 1;
        background-color: red;
      }
      #div3 div {
        position: absolute;
        height:height;
        width: height;
      }
      #div3 {
        flex: 1;
        background-color:yellow;
      }
      #div4 {
        flex: 1;
        background-color: red;
      }
    </style>

    图1 height:100%失效

       

     

    图2 解决height:100%失效的问题​​​​​​

    2.一个奇怪的css失效问题,至今没想明白原因。使用vue 的v-if指令切换元素的显示,同时元素的css是通过子元素选择器选择时,元素的布局失效。如下面代码所示:

    <template>
      <div id="test">
        <div class="container">
          <div id="div1" v-if="!show">
            <div>左列</div>
            <div>右列</div>
          </div>
          <div id="div2" v-else>一列</div>
        </div>
        <div style="padding: 20px; text-align:center;background-color: red" @click="show=!show">切换</div>
      </div>
    </template>
    <style lang="less" scoped>
      .container {
        padding: 20px;
        & > div {
          display: flex;
          justify-content: space-between;
          align-items: center;
        }
      }
    </style>
    <script>
      export default {
        data() {
          return {
            show: false
          }
        }
      }
    </script>
    

    按照代码所写,理论上,不管点击‘切换’按钮多少次,div1的布局永远都是两边对齐,即包括‘左列’的块在左边,包含‘右列’的块在右边。然而在iOS8上,页面第一次加载完成后,div1的布局确实是两边对齐,当点击‘切换’按钮后,div1的布局就失效了,如下图所示。目前只在iOS8发现这个问题。

    图1 页面第一次加载完成时,div1两边对齐,布局正常

    图2 点击‘切换’按钮,div1隐藏,div2 显示

    图3.点击‘切换’按钮,div1显示,div2隐藏,此时div1布局异常

    从图3可以看出,但div1再次显示时,div1的布局不再是两边对齐(图1所示)。iOS8出现这个bug的原因还没想明白,但可以稍微修改一下代码,就能解决这个问题,如下所示,使用class代替子元素选择器选择div1的布局:

    <template>
      <div id="test">
        <div class="container">
          <div id="div1" class="row" v-if="!show">
            <div>左列</div>
            <div>右列</div>
          </div>
          <div id="div2" v-else>一列</div>
        </div>
        <div style="padding: 20px; text-align:center;background-color: red" @click="show=!show">切换</div>
      </div>
    </template>
    <style lang="less" scoped>
      .container {
        padding: 20px;
        .row {
          display: flex;
          justify-content: space-between;
          align-items: center;
        }
      }
    </style>
    <script>
      export default {
        data() {
          return {
            show: false
          }
        }
      }
    </script>
    

     

    展开全文
  • 其他ios版本都还好,唯独在ios8上遇到了flex布局没起作用的问题。后来经过研究才发现,safari使用的是webkit内核,在ios8上需要单独加一下兼容才起作用。 display: flex; display: -webkit-flex; justify-...

    最近在做项目时,使用到了flex布局。其他ios版本都还好,唯独在ios8上遇到了flex布局没起作用的问题。后来经过研究才发现,safari使用的是webkit内核,在ios8上需要单独加一下兼容才起作用。

    display: flex;
    display: -webkit-flex; 
    justify-content: center;
    -webkit-justify-content: center;
    align-items:center;
    -webkit-align-items: center;

     

    转载于:https://www.cnblogs.com/rachelch/p/9075729.html

    展开全文
  • ios9 以下 flex 兼容问题 详情描述 ios9 以下,display:flex 元素的第一级子元素必须是block,否则 flex 布局是不会生效的

    ios9 以下 flex 兼容问题

    详情描述

    ios9 以下,display:flex 元素的第一级子元素必须是block,否则 flex 布局是不会生效的

    展开全文
  • 结果在测试的时候发现ios8以下版本居然不支持flex布局,包括justify-content这类属性,都不支持,最后只能用兼容性的写法,问题就解决了。display: flex;display: -webkit-flex;justify-content: space-between;-...

    有次和同事一起写了一个项目,一开始没想到这个flex布局的兼容问题,主要是之前也没遇到过。结果在测试的时候发现ios8以下版本居然不支持flex布局,包括justify-content这类属性,都不支持,最后只能用兼容性的写法,问题就解决了。

    display: flex;

    display: -webkit-flex;

    justify-content: space-between;

    -webkit-justify-content: space-between;

    /*-webkit-box-align: center;*/

    -webkit-align-items: center;

    /*-ms-flex-align: center;*/

    align-items: center;

    加上-webkit-这个就好了。
    展开全文
  • 开启弹性布局 display: -webkit-flex; /* 新版本语法: Chrome 21+ */ display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ */ ... /* 老版本语法: Safari, iOS, Android browser, older WebKit browser...
    开启弹性布局
    display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
    display: flex;          /* 新版本语法: Opera 12.1, Firefox 22+ */
    display: -webkit-box;   /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */ 
    
    
    -webkit-flex: 1;        /* Chrome */  
    flex: 1;                /* NEW, Spec - Opera 12.1, Firefox 20+ */
    -webkit-box-flex: 1  ;   /* OLD - iOS 6-, Safari 3.1-6 */  
    
    副轴变主轴
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    flex-direction:column;
    -webkit-flex-direction:column;
    
    
    -webkit-justify-content: space-around;
    justify-content: space-around;
    -webkit-box-pack:justify;
    
    展开全文
  • ios9不兼容flex

    2020-03-14 16:57:31
    <button class="btn> <img src="./m24.png" alt=""><span>啊啊啊</span> </button> <style> .btn{ display: -webkit-flex; display: flex; ...
  • css3 属性 flex 兼容 ios

    2019-06-28 22:38:25
    一、解决 盒子写法: display:-webkit-flex; /* 新版本语法: Chrome 21+ */  display:flex; /* 新版本语法: Opera 12.1, Firefox 22+ */  display:-webkit-box; /* 老版本语法: Safari, iOS, Android b...
  • 欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • 1.margin在IOS中失效  在页面中元素使用margin值,在某些IOS设备下会出现失效的情况,而安卓机则正常显示,此问题暂无直接的...flex中使用 绝对定位,ios出现严重错位,导致父级元素也会变成绝对定位,Android能...
  • FLEX(Flipboard Explorer)是Flipboard官方发布的一组专门用于iOS开发的应用内调试工具,其主要开发者为Flipboard公司旗下的iOS工程师Ryan Olson。 和许多调试工具不同的是,FLEX不仅能在模拟器和物理设备上良好...
  • iOS9.X系统在渲染微信小程序页面时无法对使用flex布局的列表页面、文章内容类型页面进行正常渲染。表现为页面内容不显示或者页面样式错乱。 场景一:文章内容页面样式错乱 页面代码 &lt;view class='...
  • iPhone icon and initial screen images ...All iPhone applications have icons which appear in the user interface of the iTunes application and on the iPhone. ...iPhone application icon
  • 使用AIR处理拍照后的回调、照片文件的保存功能时,针对于IOS和Android两个平台是有所不同的。 但、关于如何调用摄像头进行拍照这个功能,Android和IOS是一致的。   技术实现: 1) ...
  • 今天下午在优化公司一个原有的一个移动web商城时发现商城在IOS系统中出现顶部搜索条和底部菜单栏在页面滚动式偶尔出现错位的问题,查看源码发现是由于顶部搜索条和底部菜单栏使用的是Flex定位导致的。在此稍稍整理下...
  • better scroll与flex联用在ios 10下无法滑动的问题 上图使用的betterscroll做下拉刷新,中间部分中flex:1自适应高度,做betterscroll的壳子,然而在ios10上,居然滚动不了。该问题归决于容器高度获取有误,最终解决...
  • Chrome 73导致的flex布局崩坏现象 项目中会存在如下几种嵌套flex结构: <style> /* 通用样式 */ .card { width: 200px; height: 300px; margin: 20px; border: 1px solid #999; } .flex { ...
  • display: flex; display: -webkit-flex; //适配低版本写法 flex-direction: column; -webkit-flex-direction: column;//适配低版本写法 flex:1; -webkit-box-flex: 1; -webkit-flex: 1; 转自:...
  • IOS8flex兼容性问题

    2019-07-24 14:46:28
    IOS8.2 dispaly:flex;不生效; 注意一下兼容写法的顺序问题, display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */ display: -moz-box; /* Firefox 17- */ display: -webkit...
  • 网上有很多类似例子,我自己也使用vue写一个简单的demo,主要利用flex布局,解决ios端偶现的,fixed或者absolute布局导致的输入框被键盘遮挡问题,至于键盘收起页面卡住等其他问题 请参考链接:h5页面在不同ios设备...
1 2 3 4 5 ... 20
收藏数 12,797
精华内容 5,118