iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >不应该依赖CSS 100vh的原因是什么
  • 414
分享到

不应该依赖CSS 100vh的原因是什么

2024-04-02 19:04:59 414人浏览 独家记忆
摘要

今天小编给大家分享一下不应该依赖CSS 100vh的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们

今天小编给大家分享一下不应该依赖CSS 100vh的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

如果有一个文本和一个按钮,我们想让文本粘在上面,而按钮粘在下面!使用CSS Flex 似乎很容易做到。

// html
<div className="layout">
  <p>Lorem ipsum dolor sit amet...</p>
  <button>Sign Up</button>
</div>

// CSS
.layout {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 100vh;
}

在真机检查一下效果:

不应该依赖CSS 100vh的原因是什么

酷! git add, git commit, git push, oh yeah!

这有什么问题吗?

当然,是有的! 要看到这个问题,你需要在真实的手机或模拟器上查看你的应用程序。在本文中使用的 iPhone 13(iOS 15.2)进行测试,下面是结果:

不应该依赖CSS 100vh的原因是什么

啥,底部按钮跑哪里去了?

顺便说一下,它在安卓手机上甚至不能按预期工作。

不应该依赖CSS 100vh的原因是什么

为什么100vh问题会发生在移动设备上?

我对这个问题进行了一番调查,发现了其中的原因。简短的答案是,浏览器的工具栏高度没有被考虑在内。如果你想深入了解为什么会发生这种情况,Stack Overflow的这个帖子很有帮助。

如何修复移动设备上的100vh问题?

第一个建议是尽量少用 vh。例如,在上面的代码中,你可以使用一个 sticky 按钮,避免使用vh单位。

// HTML
<div className="layout">
  <p>Lorem ipsum dolor sit amet...</p>
  <button>Sign Up</button>
</div>

// CSS
.layout {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 100vh;
}
.layout button {
  position: sticky;
  bottom: 0;
}

效果:

不应该依赖CSS 100vh的原因是什么

它在横向模式下也很好:

不应该依赖CSS 100vh的原因是什么

说实话,结果是好的,但你不能总是用 sticky  元素来解决 100vh 的问题。

仅使用 CSS 在移动设备上修复 100VH 问题

时,使用 vh 的目的是为了简单地创建与视口高度相等的部分。例如,当你在建立登陆页面时,这很常见。在这些情况下,position sticky不会有帮助,这里介绍一下 fill-available属性。它用起来很简单,只要记住使用前缀和回退值就可以了。

.layout {
  min-height: 100vh;            
  min-height: -moz-available;
  min-height: -WEBkit-fill-available;
  min-height: fill-available;
}

效果:
不应该依赖CSS 100vh的原因是什么

而且,当你旋转设备时,它还会更新高度,太棒了!

不应该依赖CSS 100vh的原因是什么

fill-available 修复 100vh 的问题确实很直接,但在调查这个解决方案时,也遇到过一些问题。

1. HTML类型声明问题

页面上有  <!DOCTYPE html> 声明,会使 fill-available 在 Chrome 浏览器上无法正常工作。

不应该依赖CSS 100vh的原因是什么

甚至不能在安卓浏览器上工作:

不应该依赖CSS 100vh的原因是什么

因此,为了解决这个问题,必须从页面中删除 doctype 声明。

2. Safari上的垂直 padding  问题

min-height(或 height)为 fill-available的元素上添加垂直 padding (bottom 和  top),Safari浏览器上会导致问题,高度不会正确。

不应该依赖CSS 100vh的原因是什么

要解决这个问题,只需将你的内容包在另一个 div 元素内,就可以了:

// HTML
<div class="screen">
  <div class="content">
    ...
  </div>
</div>

// CSS
.screen {
  background-color: mediumpurple;
  min-height: 100vh;
  min-height: -moz-available;
  min-height: -webkit-fill-available;
  min-height: fill-available;
}
.content {
  color: #fff;
  display: flex;
  flex-direction: column;
  justify-content: center;
  height: 100%;
  padding: 30px;
}

3. fill-available 不能与 calc() 一起使用

需要注意的一件事是,不能在 fill-available 属性下使用 calc()。所以,下面的CSS规则就不会生效:

min-height: calc(-webkit-fill-available / 2);

例如,如果需要在元素上有一半的可用高度,必须使用javascript

使用JavaScript修复移动设备上的100vh问题

可以使用 window 的 innerHeight 属性,将元素 height (或minHeight)设置为window.innerHeight,如下所示:

<!DOCTYPE html>
<html>
<head>
  <style>
    ...
  </style>
</head>
<body>
<div id="intro">
  <h2>Hello World!</h2>
  <h3>The height of this area is equal to...</h3>
</div>
...
<script>
  (function () {
    const el = document.getElementById('intro');
    el.style.minHeight = window.innerHeight + 'px';
  })();
</script>
</body>
</html>

效果:

不应该依赖CSS 100vh的原因是什么

接着,再介绍一种花销的方式。 一些开发者喜欢根据窗口的内部高度定义一个CSS变量,并使用该变量来设计他们所需的元素。代码如下:

// 以像素为单位计算1vh值
// 基于窗口的内部高度
var vh = window.innerHeight * 0.01;

//  将CSS变量设置为根元素
// 相当于1vh
document.documentElement.style.setProperty('--vh', vh + 'px');

在 CSS 中:

min-height: calc(var(--vh) * 100);

最后一件事是当窗口被调整大小或设备方向改变时,重新计算这个值:

function calculateVh() {
  var vh = window.innerHeight * 0.01;
  document.documentElement.style.setProperty('--vh', vh + 'px');
}

// 初始计算
calculateVh();

// 调整大小时重新计算
window.addEventListener('resize', calculateVh);

// 在设备方向改变时重新计算
window.addEventListener('orientationchange', calculateVh);

以上就是“不应该依赖CSS 100vh的原因是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网JavaScript频道。

--结束END--

本文标题: 不应该依赖CSS 100vh的原因是什么

本文链接: https://www.lsjlt.com/news/98829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 不应该依赖CSS 100vh的原因是什么
    今天小编给大家分享一下不应该依赖CSS 100vh的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • Spring bean需要依赖注入的原因是什么
    这篇文章主要介绍“Spring bean需要依赖注入的原因是什么”,在日常操作中,相信很多人在Spring bean需要依赖注入的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring bean...
    99+
    2023-06-20
  • css中100vh指的是什么
    本篇内容介绍了“css中100vh指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • maven依赖爆红的原因及解决方法是什么
    Maven依赖爆红的原因可能有以下几种:1. 缺少依赖:Maven项目的pom.xml文件中可能缺少了某些依赖的声明,导致编译器无法...
    99+
    2023-09-17
    maven
  • maven依赖冲突的原因及解决方法是什么
    Maven依赖冲突的原因可能是由于以下几个因素:1. 版本不匹配:当项目中存在多个依赖项,并且这些依赖项使用了不同的版本时,可能会导...
    99+
    2023-09-23
    maven
  • laravel依赖注入的原理是什么
    Laravel的依赖注入原理是基于反射的。依赖注入是一种设计模式,它的目的是通过将依赖对象的实例传递给需要它们的对象,来解耦和提高代...
    99+
    2023-10-22
    laravel
  • css不失效的原因是什么
    这篇文章将为大家详细讲解有关css不失效的原因是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。css不起作用的原因:一、html标签没写完整,漏了“<”、”>”或者“/”等这...
    99+
    2023-06-14
  • angular依赖注入的原理是什么
    Angular的依赖注入(Dependency Injection)是一种设计模式,用于管理组件之间的依赖关系。它的原理是通过将组件...
    99+
    2023-09-21
    angular
  • spring依赖注入的原理是什么
    Spring依赖注入的原理是通过IOC(Inversion of Control)容器来实现的。IOC容器是Spring框架的核心,...
    99+
    2023-09-29
    spring
  • python3 依赖倒置原则是什么
    本篇内容介绍了“python3 依赖倒置原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!场景针对园区停车信息,需要对各个公司提供的停...
    99+
    2023-06-20
  • php依赖注入的原理是什么
    PHP依赖注入的原理是通过将一个对象的依赖关系通过构造函数、方法参数或者setter方法的方式进行传递。依赖注入的目的是解耦,使得代...
    99+
    2023-09-21
    php
  • laravel依赖注入原理是什么
    Laravel的依赖注入原理是通过容器(Container)来实现的。容器是一个管理依赖关系的工具,它可以创建和解析对象,并自动解决...
    99+
    2023-09-06
    laravel
  • VSCode中依赖注入的原理是什么
    这篇文章主要介绍“VSCode中依赖注入的原理是什么”,在日常操作中,相信很多人在VSCode中依赖注入的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VSCode中依赖注入的原理是什么”的疑惑有所...
    99+
    2023-07-05
  • JavaScript中依赖注入的原理是什么
    这期内容当中小编将会给大家带来有关JavaScript中依赖注入的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如下需求:假设已经有定义好的服务模块Key-Va...
    99+
    2024-04-02
  • css不起作用是什么原因
    这篇文章主要讲解了“css不起作用是什么原因”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css不起作用是什么原因”吧! css...
    99+
    2024-04-02
  • Java中依赖倒转原则是什么
    小编给大家分享一下Java中依赖倒转原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是依赖倒转原则?高层模块不应该依赖低层模块,二者都应该依赖其抽...
    99+
    2023-06-29
  • css样式不生效的原因是什么
    这篇文章主要介绍“css样式不生效的原因是什么”,在日常操作中,相信很多人在css样式不生效的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css样式不生效的原因是...
    99+
    2024-04-02
  • EWeb4J的pom依赖是什么
    这篇文章主要介绍“EWeb4J的pom依赖是什么”,在日常操作中,相信很多人在EWeb4J的pom依赖是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”EWeb4J的pom依赖是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • css的样式不起作用的原因是什么
    这篇文章给大家分享的是有关css的样式不起作用的原因是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。css的全称是什么css的全称是Cascading Style Sheets(层叠样式表),它是一种用来表现...
    99+
    2023-06-14
  • linux依赖包指的是什么
    这篇文章主要讲解了“linux依赖包指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux依赖包指的是什么”吧! l...
    99+
    2023-03-24
    linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作