首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么iOS 10上的最小高度100vh会导致大窗口?

在iOS 10上,当设置一个元素的最小高度为100vh(视口高度)时,可能会出现大窗口的情况。这是由于iOS 10的Safari浏览器在计算视口高度时存在一个bug,导致100vh的计算结果不准确。

具体原因是,在iOS 10的Safari中,当网页有垂直方向的滚动条时,计算视口高度时会包括滚动条的高度,而不是排除滚动条的高度。这就导致了计算出来的100vh值比实际的视口高度要大,从而导致元素的最小高度设置失效,出现了大窗口的情况。

解决这个问题的方法有两种:

  1. 使用JavaScript进行修复:通过JavaScript代码获取视口的实际高度,并将这个高度应用到元素的最小高度上。可以使用以下代码进行修复:
代码语言:txt
复制
function setMinHeight() {
  var vh = window.innerHeight * 0.01;
  document.documentElement.style.setProperty('--vh', vh + 'px');
}

window.addEventListener('resize', setMinHeight);
setMinHeight();

在CSS中,可以使用变量--vh来代替100vh,并将元素的最小高度设置为calc(var(--vh, 1vh) * 100)

  1. 使用其他单位代替vh:如果不想使用JavaScript进行修复,可以考虑使用其他单位来设置元素的最小高度,例如像素(px)或百分比(%)。

总结起来,iOS 10上的最小高度设置为100vh可能会导致大窗口的问题,原因是iOS 10的Safari浏览器在计算视口高度时存在bug。可以通过使用JavaScript修复或者使用其他单位来避免这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你不应该依赖CSS 100vh,这就是原因!

要看到这个问题,你需要在真实的手机或模拟器上查看你的应用程序。在本文中使用的 iPhone 13(iOS 15.2)进行测试,下面是结果: 图片 啥,底部按钮跑哪里去了?...图片 为什么100vh问题会发生在移动设备上? 我对这个问题进行了一番调查,发现了其中的原因。简短的答案是,浏览器的工具栏高度没有被考虑在内。...如果你想深入了解为什么会发生这种情况,Stack Overflow的这个帖子很有帮助。 如何修复移动设备上的100vh问题? 第一个建议是尽量少用 vh。...仅使用 CSS 在移动设备上修复 100VH 问题 时,使用 vh 的目的是为了简单地创建与视口高度相等的部分。例如,当你在建立登陆页面时,这很常见。...一些开发者喜欢根据窗口的内部高度定义一个CSS变量,并使用该变量来设计他们所需的元素。

1.3K40

ipad上100vh和100%踩坑记「建议收藏」

最近遇到了一个小bug,在ipad上编辑word文件的虚拟键盘收回时,会导致页面的导航条隐藏,且页面的下面会出现一块空白 自己尝试的解决方案 通过focusin和focusout对虚拟键盘的弹入弹出进行监听...如果在虚拟键盘弹出时元素的高度等有变化,那么可以尝试通过这种方式判断虚拟键盘是不是弹出来了....,100vh其实是比视口大,即100vh包含了下面的状态栏的高度。...我们看一下W3C的文档怎么说 即,flex容器中的绝对定位子元素会脱离flex布局流,也就是说flex: 1对子元素来说已经失效了。...因此他的高度为绝对定位中的100%设置的高度,但是又设置了overflow:hidden,因此才会在虚拟键盘隐藏时出现一部分空白,从而导致了导航条的隐藏。

1.3K10
  • 弹指间,重温几个设置满屏的小技巧

    不妨了解一下 vh定义法 vh:css3新单位,view height的简写,是指可视窗口的高度,1vh=视窗高度的1%; 既然讲到CSS单位了,麻烦各位再脑补下这个问题: CSS单位都有哪些?...vh单位定义为视窗高度的百分比,那岂不是esay? body{ height:100vh; } 搞定,大功告成!...这里扩展了解下vh在移动端设备上的部分“特性” 我们依然设置body 100vh的情况下,分别打开微信内置浏览器、Safari浏览器、Google浏览器 从效果图不难看出,在Safari浏览器、Google...浏览器中100vh这个方案都是不完美的,都出现了滚动条,并不能达到我们预期的可视区域的满屏高度。...作为一个cv高手,借助搜索引擎我们了解到,Safari把网址栏与工具栏算进了100vh中,是第一个通过选择根据屏幕的最大高度为vh定义固定值来更新其实现的移动浏览器之一,而后Google浏览器也效仿它。

    1.2K20

    微信小程序布局单位的使用

    如在 iPhone6 上,屏幕宽度为750 px,则共有个750 物理像素,则750 rpx = 375px = 750 物理像素 例如 : 1rpx = 0.5px = 1物理像素 但是不同iOS设备上...上: 1rpx = 0.552px 1px = 1.81rpx 在不同设备上rpx与px的转换是不相同的,但是宽度的rpx却是固定的,所以可以使用rpx作为单位,来设置布局的宽高,不是所有的单位都适合...rpx,字体不适合rpx,会导致不同设备看不清。...vh:viewpoint height,视口高度,1vh等于视窗高度的1%。 vw和vh是css3中的新单位,是一种视窗单位,在小程序中也同样适用。...小程序中,窗口宽度固定为100vw,将窗口宽度平均分成100份,1份是1vw 小程序中,窗口高度固定为100vh ,将窗口高度平均分成100份,1份是1vh [图片.png] vmin:vw和vh中较小的那个

    3.1K61

    避免在移动端页面中使用100vh

    如果要设置一个元素的样式使它占据整个屏幕的高度,那么你可以设置height: 100vh,这样你就拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可惜的是,事实并非如此。...结果导致:当地址栏可见时,屏幕的底部将被切断,从而破坏了开始时100vh的目的。...在页面加载时,将高度设置为window.innerHeight可以将高度正确设置为窗口的可见部分高度。 如果地址栏可见,则window.innerHeight将为全屏的高度。...例如,尝试在移动浏览器上打开wordsheet.io/demo/V3Y。无论地址栏是否可见,屏幕都将是视口的高度。...遗憾的是,在不依赖JavaScript的情况下,仍然没有一种简单的方法来使元素占据整个视口高度。100vh是如此接近伟大(greatness),但考虑到它在移动设备上的局限性,最好避免使用它。

    1.6K30

    CSS | 视差滚动 | 笔记

    例如,较远的东西(即 z 轴上的负平移)会移动得更慢。相反,距离较近的东西(即 z 轴上的正平移)会移动得更快。 另一个物理效应是规模。 如果我们把一些东西移得更远,它就会显得更小。...视口/视窗 (屏幕可见部分(去除书签栏等, 真正用于渲染页面部分), 非整个浏览器窗口) height:100% 铺满父容器的高度 height:100vh 铺满屏幕(viewport)的高度 "100vh...vh 优势在于能够直接获取高度, 而用 % 在没有设置 body 高度的情况下, 是无法正确获得可视区域的高度的。 100vh 在不同的浏览器的实现方式上也有一点微妙的变化, 这使得它几乎毫无用处。...这些浏览器没有将 100vh 的高度调整为视口高度变化时屏幕的可见部分,而是将 100vh 设置为隐藏地址栏的浏览器高度。...当页面加载时,将高度设置为 window.innerHeight 将正确地将高度设置为窗口的可见部分。 如果地址栏是可见的,那么 window.innerHeight 是全屏的高度。

    82021

    大屏开发你需要知道哪些

    vw 100vw 等于当前窗口屏幕得宽度;vh 100vh 等于当前窗口屏幕得高度;rem 主要根据根元素body得font-size:12px, 1rem 等于12px, 然后跟用窗口得大小赋值给body...真适配又分为 高度适配、宽度适配。 宽度适配就是根据用户得屏幕窗口宽度发生变化做到一个界面适配,比如全部都使用vw。...高度适配是根据用户屏幕窗口发生变化达到一个界面适配,比如使用vh;其实个人认为没必要做高度适配、都根据宽度vw达到一个界面适配就好了,主要是因为做高度适配得话使用vh,再小点得屏幕上 很容易就发生文本重叠...、界面不美观、因为文字大小再浏览器最小是12px嘛。...大屏界面布局 其实一般大屏布局会又一个header(主标题、时间展示)、side (副标题:屏幕的两侧可能会分为4块4个维度去展示当前屏的一些信息)、main(大屏主视图)、footer(底部)。

    88910

    css视口单位vw,vh的妙用(embed篇)

    ,就是写死播放器长宽,导致不能随网页大小的变化自由变换尺寸。...前天,在往博客上折腾B站视频时,无意间灵机一动,想到了个好主意,就是使用vw单位,配合使用calc。...only screen and (max-width:767px){ embed{ height: calc(9 * 100vw/ 16);width: 100%;} } 其实就是对于电脑端设备,在宽度设置上,...本来,文章写道这里就应该结束了,但是突然想到了香菇社长那个超宽的屏幕,仅仅是上述代码肯定会导致一个问题,视频高度可能会超出屏幕的高度。 怎么办呢?想了一下,觉得这样比较简单!...在电脑端css加入下面的东东 max-height:100vh;/*限制视频高度最大不能超过浏览器窗口高度*/ max-width:calc(16 * 100vh/ 9);/*限制视频宽度最大不能超过浏览器窗口高度的

    1.1K30

    css3新发现height:100vh;

    vh/vw vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度中较大的那个。...其中最大的那个被均分为100单位的vmax; vmin: 相对于视窗的宽度或高度中较小的那个。...其中最小的那个被均分为100单位的vmin; 视区所指为浏览器内部的可视区域大小, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小...不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。 calc是 css3提供的一个在css文件中计算值的函数: 用于动态计算长度值。...“/” 运算; calc()函数使用标准的数学运算优先级规则; calc(100vh - 10px) 表示整个浏览器窗口高度减去10px的大小 calc(100vw - 10px) 表示整个浏览器窗口宽度减去

    65720

    css3中的width:100vh以及calc(100vh + 10px)

    vh/vw vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度中较大的那个。...其中最大的那个被均分为100单位的vmax; vmin: 相对于视窗的宽度或高度中较小的那个。...其中最小的那个被均分为100单位的vmin; 视区所指为浏览器内部的可视区域大小, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小...不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。 calc是 css3提供的一个在css文件中计算值的函数: 用于动态计算长度值。..., “/” 运算; calc()函数使用标准的数学运算优先级规则; calc(100vh - 10px) 表示整个浏览器窗口高度减去10px的大小 calc(100vw - 10px) 表示整个浏览器窗口宽度减去

    92320

    网站自适应布局为什么我要抛弃rem,改用vw?

    在html文件头部放入一大段压缩过的js代码,是不是让你很难受?来了解下vw吧,能让你的代码更纯粹。...但这种方案有弊端(弊端之一:和根元素font-size值强耦合,系统字体放大或缩小时,会导致布局错乱;弊端之二:html文件头部需插入一段js代码 ),本文将介绍一种更优秀纯粹的方案。...百分比%是根据父元素宽度或者高度进行计算,而vw vh固定按照viewport来计算,不会受父元素宽高度影响。...我们来看看vw和rem的兼容性。  ? ? 相较之下,vw单位兼容性比rem稍差,ios8、安卓4.4及以上才完全支持。这也是为什么之前rem布局一直更流行的原因。...总结 目前ios8、安卓4.4以下的用户已经非常少了,caniuse上面显示,在中国这部分用户只有1.2%,比例已经非常低了,而这部分用户的手机估计只会打打电话不会使用互联网的(还是需根据各自产品的用户数据分析来决定是否使用

    3.5K10

    手机软键盘弹起导致页面变形的一种解决方案

    最近用 uniapp(一种第三方 app 开发框架) 开发 app,其中一个页面有十几个 input 输入框,在点击 input 输入时,软键盘弹起,导致页面往上顶,底部的按钮也全部弹到页面上面去了,布局全被打乱...一种可行的解决方案:给页面设置一个最小高度,即一个能让所有元素按原来布局排列的高度。...举例: 我开发的 APP 运行在 ipad上,横屏显示时,高度为 768px ,我可以把 768px 当做页面的最小高度。....app { min-height: 768px; /* 原来定义的高度 100% */ height: 100vh; } ?...软键盘还是会弹起,因为页面最小高度被设为了 768px,所以此时总高度为 768px + 软键盘高度,超出了屏幕高度(ipad横屏屏幕高度为768px)。

    2.6K40

    01_移动端布局基础

    下图是我们需要适配的移动端屏幕设备尺寸,看到这些数据,是不是有一种键盘敲烂的感觉。 1.1 移动端设备 移动端设备主要包括 Android、iOS 等手机设备。...视觉视口 视觉视口是指用户正在看到的网站的区域,这个区域的宽度等同于移动设备的浏览器窗口的宽度。 理想视口 理想视口是指对设备来讲最理想的视口尺寸。...比如同样是 14px 大小的字,在 1366×768 显示屏下会显示的小,在 1024×768 显示屏下会相对大。也称为物理像素(设备像素),是分辨率的尺寸单位。...vm/vh:vw(view-width),vh(view-height) 这两个单位是 CSS 新增的单位,表示视区宽度/高度,视区总宽度为 100vw,总高度为 100vh。...vm/vh:vw(view-width),vh(view-height) 这两个单位是 CSS 新增的单位,表示视区宽度/高度,视区总宽度为 100vw,总高度为 100vh。

    9810

    一步一步,开始上手Mac 开发(三)

    大窗口的App 再或者你把窗口缩小(如下图),一部分需要显示的内容已经无法看见了,因此我们需要明显的设置一个窗口的最小幅度,这样我们的应用才可以正常使用 ?...查看view 的size inspect页 1.4 选择mainMenu.xib,然后选择window,根据上一步我们记下的view 的窗口size来设置window的最小尺寸: ?...设置table view 的autosizing属性 设置完成后,运行应用,你会发现当我们改变窗口大小时,table view 的高度会随窗口变化,但宽度是固定不变的,这正是我们需要的效果 * 如果你发现...table view 的高度并没有你预料中的跟随窗口高度变化,请确认你的view 设置是否正确(如下图:) ?...image view 的autoresizing设置 运行工程,我们可以看到所有的控件都会在窗口大小改变的时候会相应的调整合适的尺寸或位置,这样看起来比我们之前没有设置窗口适配要美观一些了,当然,若是觉得窗口过大导致

    98120

    移动端避免使用100vh

    如果要设置元素的样式以占据整个屏幕的高度,则可以设置height: 100vh,您拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可悲的是,事实并非如此。...这些浏览器没有将100vh高度调整为视口高度变化时屏幕的可见部分,而是将100vh设置为浏览器的高度,并隐藏了地址栏。结果是,当地址栏可见时,屏幕的底部将被切除。...页面加载时,将高度设置为window.innerHeight可以将高度正确设置为窗口的可见部分。如果地址栏可见,则window.innerHeight将为全屏的高度。...例如,尝试在移动浏览器上打开wordsheet.io/demo/V3Y 。无论地址栏是否可见,屏幕都将是视口的高度。...遗憾的是,在不依赖JavaScript的情况下,仍然没有一种简单的方法来使元素占据整个视口高度。 height: 100vh 非常接近 ,但鉴于其在移动设备上的局限性,最好避免使用它。

    2K20

    移动端避免使用100vh

    CSS中的视口单位听起来很棒。如果要设置元素的样式以占据整个屏幕的高度,则可以设置height: 100vh,您拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可悲的是,事实并非如此。...这些浏览器没有将100vh高度调整为视口高度变化时屏幕的可见部分,而是将100vh设置为浏览器的高度,并隐藏了地址栏。结果是,当地址栏可见时,屏幕的底部将被切除。 如下所示: ?...页面加载时,将高度设置为window.innerHeight可以将高度正确设置为窗口的可见部分。如果地址栏可见,则window.innerHeight将为全屏的高度。...例如,尝试在移动浏览器上打开wordsheet.io/demo/V3Y 。无论地址栏是否可见,屏幕都将是视口的高度。...遗憾的是,在不依赖JavaScript的情况下,仍然没有一种简单的方法来使元素占据整个视口高度。 height: 100vh 非常接近 ,但鉴于其在移动设备上的局限性,最好避免使用它。

    1.9K20

    给萌新HTML5 入门指南

    广义上的HTML5是HTML最新的修订版本,由万维网联盟(W3C)于2014年10月完成标准制定。...一些语义化标签如section、nav在使用时和传统div并无大的区别,但这种标签更有利于搜索引擎的索引整理,利于智能手机、Pad等小屏设备适配,以及方便残障人士使用。...Web Workers,JavaScript单线程,复制js需算会导致页面出现假死。如果js操作不需要访问页面window,那么可以放在web worker中并行处理。...下面我们通过一个例子来展示Flex布局的易用性,下图是一个典型的单页应用样式,结构上分为header,aside,footer和main四部分。...body设置高度 100vh, 这里使用了CSS3 的新单位vh,即 view height 视窗高度,100vh相当于html, body 高度100%,同样还有vw代表视窗宽度 body设置flex

    1.3K41

    移动端bug汇总(一)

    A:根本原因是-webkit-tap-highlight-color,这个属性是用于设定元素在移动设备(如Adnroid、iOS)上被触发点击事件时,响应的背景框的颜色。...input里面placeholder字体的大小 A:代码如下 ::-webkit-input-placeholder{ font-size:10pt;} 8.audio元素和video元素在ios和andriod...-- 选择视频 --> 10.输入框自动填充颜色 Q: 针对input标签已经输入过的,会针对曾经输入的内容填充黄色背景,这是webkit...translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); 12.用户设置字号放大或者缩小导致页面布局错误...important; margin: 0; } 14.实现横屏竖屏的方案 css 用 css3媒体查询,缺点是宽度和高度不好控制 @media screen and (orientation

    3.2K130
    领券