css - 移动 safari 和 iOS 11 : Web apps and full height (100vh) overlapped by nav bar

标签 css web-applications responsive-design mobile-safari

在 Mobile Safari 上使用 100vh 不会考虑下方导航栏的高度。

以下面的示例屏幕截图为例。为了显示我的类似应用程序的页脚,我需要手动(并且以一种丑陋的方式,请参见下面的代码)从容器的高度中减去 74px。不这样做只会将我的页脚隐藏在移动版 Safari 的导航页脚下。

有没有一种通用且干净的方法来解决这个问题?

enter image description here

我使用以下代码解决了这个问题。这对我来说很难看。用户代理推断平台/浏览器和硬编码偏移量以摆脱 native 行为。相信我的解决方案感觉不太好:

编辑 顺便说一下,这段代码在我的 Angular4“响应式、移动优先和渐进式网络应用”(流行语的力量)的 ngAfterViewInit() 方法中运行

const wrapper:any = document.getElementsByClassName('hack-to-fix-ios-height')[0];
if(wrapper && this.iOS()){
  let height = wrapper.offsetHeight;
  height -= 74;

  // Mobile Safari fix for footer nav
  this.renderer.setStyle(wrapper, 'height', height + 'px');
}

最佳答案

尝试将 wrapper.style.height 设置为 window.innerHeight。我相信这会给你没有导航栏的高度 - 如果导航栏可见。如果您的用户向下滚动并使导航栏消失。然后 window.innerHeight 将增加导航栏的高度。

关于css - 移动 safari 和 iOS 11 : Web apps and full height (100vh) overlapped by nav bar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039211/

相关文章:

php - 一般网络编程/设计问题 :?

css - 如何制作响应式表格

html - 网站在不同手机上的字体大小相同

javascript - jQuery 响应式图像映射 : Uncaught TypeError

html - 如何使用 anchor 将用户带到一个部分而不显示另一个部分的一半?

html - 响应式 2 列布局,其中 1 个 div 的大小固定,另一个在页面的其余部分(高度和宽度)上延伸但不可滚动

css - 变换比例时宽度不一致

javascript - Apple 取消了仅在网络应用程序中在 ios 6 上流式传输 shoutcast 和 icecast 的可能性?

php - 如何保存酒店的空房情况? PHP5/MySQL

css - 从外部样式屏蔽 React 组件