Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >safari对100vh的兼容问题[通俗易懂]

safari对100vh的兼容问题[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-02 08:32:55
发布于 2022-09-02 08:32:55
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
需求:在以下的布局要求下,利用flex布局来实现,但需要在最外层给一个固定高度来控制页面高度及可滑动区域的可视高度

很自然的利用100vh来控制最外层的高度,但测试过程中,发现safari浏览器中,页面的高度出现了偏差,比屏幕的高度还要高出一部分,出现了双层滚动条。

经研究,发现safari的100vh是包含地址栏和功能列的,而其它浏览器100vh才是用户浏览器真正的可见区域(见下图)

解决方案

通过innerHeight重新定义一个变量代替vh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
safariHacks() {
    let windowsVH = window.innerHeight / 100;
    document.querySelector('.wrap').style.setProperty('--vh', windowsVH + 'px');
    window.addEventListener('resize', function() {
        document.querySelector('.wrap').style.setProperty('--vh', windowsVH + 'px');
    });
}

在mounted内调用该方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
height: 100vh; /*給 Safari 以外的瀏覽器讀取*/
height: calc(var(--vh, 1vh) * 100);

注意–vh要写在100vh下面。。。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139676.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在移动端避免使用100vh「建议收藏」
CSS中的Viewport单元听起来很棒。如果你想将一个元素设置成全屏高度,你可以设置高度:100vh,这样你就有了一个完美的全屏元素,它会随着视口的改变而改变大小!遗憾的是,事实并非如此。100vh在不同的浏览器的实现方式上也有一点微妙的变化,这使得它几乎毫无用处。最好避免100vh,而是依赖javascript来设置高度,以获得完整的视口体验。
全栈程序员站长
2022/08/23
2.7K0
在移动端避免使用100vh「建议收藏」
浅谈-web屏幕适配的解决方案
就目前看来,web的屏幕适配是贯穿整个前端行业的,如常见的PC端,移动端,响应式,小程序等。
万少
2025/02/11
1080
浅谈-web屏幕适配的解决方案
你不应该依赖CSS 100vh,这就是原因!
如果有一个文本和一个按钮,我们想让文本粘在上面,而按钮粘在下面!使用CSS Flex 似乎很容易做到。
前端小智@大迁世界
2022/09/27
1.3K0
你不应该依赖CSS 100vh,这就是原因!
不要用100vh做移动响应
一般来说,我们使用 height:100vh 进行全屏布局,这是一种很方便的响应式方法。
前端小智@大迁世界
2022/06/02
9090
不要用100vh做移动响应
css3中的width:100vh以及calc(100vh + 10px)
vh/vw vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw;
全栈程序员站长
2022/08/11
9590
css3中的width:100vh以及calc(100vh + 10px)
避免在移动端页面中使用100vh
在CSS中,视口单位(Viewport units)听起来不错。如果要设置一个元素的样式使它占据整个屏幕的高度,那么你可以设置height: 100vh,这样你就拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可惜的是,事实并非如此。100vh在移动浏览器中以一种微妙但基本的方式被破坏,使其几乎无用。最好避免使用100vh,而应该通过javascript设置高度的方式来获得完整的视口体验。
全栈程序员站长
2022/08/14
1.6K0
避免在移动端页面中使用100vh
17个场景,带你入门CSS布局
CSS 布局本质就是控制元素的位置和大小。比如这样的布局:元素宽960px,水平居中。宽960px是大小。水平居中是位置。又如这样的布局:两个元素在一行,左侧元素固定宽200px,右侧元素撑满剩余空间。固定宽200px,撑满剩余空间是大小。两个元素在一行是位置。
前端GoGoGo
2020/03/20
2.8K0
来来来,给您送🕐了
theme: channing-cyan highlight: a11y-dark
用户4793865
2023/02/03
3460
弹指间,重温几个设置满屏的小技巧
因为CSS里部分属性是继承父级而来的,height就是其中之一,当前html标签height为0,自然而然body100%也为0。
Sneaker-前端公虾米
2021/12/23
1.2K0
弹指间,重温几个设置满屏的小技巧
解决height:100vh超出屏幕高度的问题
大家好,又见面了,我是你们的朋友全栈君。 废话不多说 , 先来看看问题 期望的样子 : 实际的样子 : 怎么样 , 看出问题了吧 , 那来看看代码吧 ! ( 只看有关的代码哦 ) // 此处使用stylus书写样式 .evaluation // 最外边的div width 100% height 100vh // 高度为屏幕的高度 padding-top 0.9rem background #f5f5f5 .mint-header // 头部
全栈程序员站长
2022/09/05
4.1K0
解决height:100vh超出屏幕高度的问题
前端开发常用单位-vwvh
程序员NEO
2023/09/28
4320
前端开发常用单位-vwvh
CSS 你到底有多少长度单位?
听说糙着干活的只靠 px 和 % 闯天下,不知道在看文章的你是不是也是其中一员,哈哈哈哈
全栈程序员站长
2022/06/30
4690
瀑布流式布局怎么实现(什么是瀑布流布局)
今天逛闲鱼的时候观察到每一行的高度不是相同的,经了解才知道原来这是一种瀑布流布局,感觉挺有意思,于是决定研究一下,在网上也找了一些方案,实现瀑布流大概有3种方式。
全栈程序员站长
2022/08/02
1.6K0
瀑布流式布局怎么实现(什么是瀑布流布局)
ipad上100vh和100%踩坑记「建议收藏」
即,flex容器中的绝对定位子元素会脱离flex布局流,也就是说flex: 1对子元素来说已经失效了。因此他的高度为绝对定位中的100%设置的高度,但是又设置了overflow:hidden,因此才会在虚拟键盘隐藏时出现一部分空白,从而导致了导航条的隐藏。
全栈程序员站长
2022/08/31
1.3K0
ipad上100vh和100%踩坑记「建议收藏」
100vh和100%的区别[通俗易懂]
我的案例: 元素没有设置高度的时候, 我写移动端界面的时候用100vh会把屏幕撑大到需要滑动框,但是100%却不会。
全栈程序员站长
2022/08/19
1.2K0
jq js100vh做减法算法[通俗易懂]
function viewportToPixels(value) { var parts = value.match(/([0-9.]+)(vh|vw)/) var q = Number(parts[1]) var side = window[[‘innerHeight’, ‘innerWidth’][[‘vh’, ‘vw’].indexOf(parts[2])]] return side * (q/100) }
全栈程序员站长
2022/08/26
4.1K0
热点面试题:JS 如何判断一个元素是否在可视区域内?
•问题标注 Q:(question)•答案标注 R:(result)•注意事项标准:A:(attention matters)•详情描述标注:D:(detail info)•总结标注:S:(summary)•分析标注:Ana:(analysis)•提示标注:T:(tips)
沉浸式趣谈
2024/03/13
3760
热点面试题:JS 如何判断一个元素是否在可视区域内?
CSS calc()函数与单位vh 常见height:100vh[通俗易懂]
calc() 函数属于CSS3版本内容,用于动态计算长度值。例如:width: calc(100% - 10px);需要注意的是,运算符前后都需要保留一个空格。calc()函数支持 “+”, “-“, “*”, “/” 运算;
全栈程序员站长
2022/09/05
1.9K0
移动端避免使用100vh
CSS中的视口单位听起来很棒。如果要设置元素的样式以占据整个屏幕的高度,则可以设置height: 100vh,您拥有一个完美的全屏元素,该元素会随着视口的变化而调整大小!可悲的是,事实并非如此。100vh在移动浏览器中以微妙但基本的方式被破坏,这使其几乎无用。最好避免100vh ,而是依靠javascript设置高度以获得完整的视口体验。
前端开发博客
2020/11/04
1.9K0
移动端避免使用100vh
css3自适应布局单位vw,vh详解
在桌面端,视口指的是在桌面端,指的是浏览器的可视区域;而在移动端,它涉及3个视口:Layout Viewport(布局视口),Visual Viewport(视觉视口),Ideal Viewport(理想视口)。
TimothyJia
2019/11/12
1K0
css3自适应布局单位vw,vh详解
相关推荐
在移动端避免使用100vh「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验