背景

目前遇到这么一个问题:我有一个可以向下展开的下来菜单,菜单初始高度大于300px左右,没有超过手机屏幕高度,当展开的时候如果超过手机屏幕高度时让父元素出现滚动条滚动,就是说内容的高度是动态的。

描述

此前我通过js动态获取屏幕高度,并设置为父元素的max-height。然后设置父元素overflow-y: scroll;

起初,我大概的代码布局如下:

 <div className='。' style={{ maxHeight: this.state.viewPortHeihgt + "px" }}><Lists>...</Lists></div>

其中Lists中的内容的高度是动态的。
css如下:

 .small-nav{overflow-y: scroll;overflow-x: hidden;}

此方法在andriod和pc上运行正常,但是在ios上就出现卡出不能滑动的现象。

分析

我们知道,页面的渲染流程分为以下几个步骤:

  1. 构建DOM tree
  2. 构建CSS Rule tree
  3. 根据DOM tree和CSS tree来构建render tree
  4. 根据render tree计算页面的layout
  5. render页面

safari浏览器在构建render tree的时候,会预先找到相应的overflow: scroll元素,在计算页面layout的时候,会计算父元素的高度与子元素的高度,若子元素高于父元素,则在render页面时为其建立一个原生的scrollView。当子元素的高度小于父元素的高度时,safari不会给父元素一个原生的scrollView。

这里我Lists中的内容初始是小于父元素.small-nav的高度的,所以在ios的解释中不会给父元素添加一个scrollView。

解决

针对这种情况,我们可以设置让浏览器一开始就给父元素增加scrollView,当我们的内容撑开,高过父元素的时候,就可以进行滑动。

代码如下:

 <div className='small-nav-outer' style={{ height: this.state.viewPortHeihgt + "px" }}><div className='small-nav-inner'><Lists>...</Lists></div></div>
.small-nav-outer{-webkit-overflow-scrolling: touch;overflow-y: scroll;overflow-x: hidden;}.small-nav-inner{min-height: calc(100% + 1px);}

代码中可以看出,我在父元素的内部添加一个一个包裹的div,.small-nav-inner,让他的高度高于父元素1px,然后给父元素添加 -webkit-overflow-scrolling: touch;属性,这样可以令一开始的时候就添加一个scrollView。

如此,ios上的兼容性问题得以解决。

以上内容参考大神博文:
https://segmentfault.com/a/1190000016408566

【兼容性】ios上设置overflow: scroll不滚动bug相关推荐

  1. 在移动端设置overflow:hidden禁止滚动的解决方法

    在移动端设置overflow:hidden禁止滚动的解决方法 参考文章: (1)在移动端设置overflow:hidden禁止滚动的解决方法 (2)https://www.cnblogs.com/ko ...

  2. ios滚动条影响父页面 vue_父元素设置overflow:scroll时vuedraggable组件出现奇怪效果的解决方案...

    在使用 vu围幸业很例站闪以近着好务多如宽动为近着好edraggable 做拖拽效果时,因为要用到滚动条而使用了 overflow: scroll,导致了两个奇怪的效果,虽然折腾了一段时间,不过最后我 ...

  3. 修改 placeholder 样式,placeholder 换行 以及iOS 上设置placeholder被遮挡问题解决

    一.修改placeholder样式 通过选择器就可以简单的修改该placeholder的样式 input::placeholder{font-size:14px;color: #666666; } 二 ...

  4. html scroll无效,css div设置overflow-x: scroll 横向滚动无效

    我给最外层div设置了overflow-x: scroll想要里面的span超出时横向滚动 发现效果依然是上下滚动 请问这个种情况该如何布局 html 满999减40 满999减40 满999减40 ...

  5. css 设置overflow:scroll 滚动条的样式

    /* 定义滚动条样式 */ ::-webkit-scrollbar {width: 6px;height: 6px;background-color: rgba(240, 240, 240, 1); ...

  6. iOS 移动端overflow:auto 滚动不平滑及bug处理

    在苹果手机上使用overflow:auto 默认滚动不平滑. 解决方案是使用-webkit-overflow-scrolling:touch bug: 会导致使用固定定位的元素,随着页面一起滚动. f ...

  7. 解决H5在移动端overflow:scroll滚动条默认不显示和滚动后消失的问题

    今天在工作中,遇到一个关于overflow在移动端视图调试滚动的问题,我在使用了overflow:scroll进行滚动时,滚动后滚动条自动消失了,需求是需要保留让它一直都在,下面的代码意思是重新设置滚 ...

  8. overflow:scroll滚动条样式修改

    第一,在需要加滚动条的元素上加上overflow: scroll,并设置高度! 如: <div><p class="AddStyle">2131313212 ...

  9. qq群 voiceover_如何在iOS上使用VoiceOver为所有人构建应用程序

    qq群 voiceover by Jayven N 由Jayven N 如何在iOS上使用VoiceOver为所有人构建应用程序 (How to build apps for everyone usi ...

最新文章

  1. 简述WSL 2安装和WSL 1转换为WSL 2
  2. linux 基础学,linux基础学习【1】
  3. 微软也加入FB开放计算项目 发布交换机操作系统
  4. comsol 超声声场模拟_新品上市 | COMSOL 物理仿真软件全新发布5.6 版本并推出四个新模块...
  5. 特斯拉副总裁陶琳:在中国采集的数据都将存在中国
  6. 【渝粤题库】陕西师范大学165101社会学 作业(高起专)
  7. windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
  8. Insomni'hack teaser 2019 - Misc - echoechoechoecho
  9. 自动升级Golang版本
  10. 每天进步一点点————MUMA架构优化和应用优化
  11. 创业过程中技术真的那么重要吗
  12. JavaScript基础随笔
  13. HDU-6608-Fansblog(威尔逊定理+快速乘)(多校)
  14. 遗传算法解决TSP(34个省会城市)问题
  15. Handlebars.js的下载及使用示例
  16. python对文件进行tar和gz格式的压缩和解压缩(亲测,可用)
  17. 2010数据库技术大会演讲主题PPT下载
  18. 如何单页面Vue应用转化成多页面的Vue应用
  19. Allegro测量距离如何同时显示mil和mm双单位
  20. 锤子T1手机 只显示logo无法开机

热门文章

  1. 如何在Keil uVision5建立飞思卡尔K60开发板的工程
  2. 闪光法测量高导热碳化硅(4H-SiC、6H-SiC)圆晶中存在的问题
  3. 杜克大学计算机专业,杜克大学计算机专业怎么样?过来人告诉你
  4. 安徽安全员A考试最新多选题库
  5. No qualifying bean of type ‘xxx‘的问题解决方案
  6. 解决QProcess启动进程后kill无效
  7. [2021ICLR]Improve Object Detection with Feature-based Knowledge Distillation 论文笔记
  8. VBA调用Shell
  9. 关于 DevOps ,咱们聊的可能不是一回事
  10. Hazel引擎学习(五)