Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
T treasure
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 12
    • Issues 12
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • FE
  • treasure
  • Issues
  • #211

Closed
Open
Created Dec 20, 2023 by JayChen@JayChenOwner

ios safari 不同版本对于 vh这个单位具备不同的度量方案

背景

通常,我们设置 100vh,是代表页面高度是 视口撑满。
无论是在微信浏览器,chrome 浏览器,还是我们RN/app 内嵌webview里 100vh 就等于 window.innerHeight。 但一些版本的safari浏览器则不然。他所计算的100vh,是 window.innerHeight + ui组件栏。也就是说 100vh 是大于 window.innerHeight的。

解决方案

在项目初始插入 计算vh,代码如下

app.tsx

useEffect(() => {
    const vh = window.innerHeight * 0.01;
    document.documentElement.style.setProperty('--vh', `${vh}px`);
}, []);

使用方文件 xx.less

height: 100vh 应该换成如下写法

height: calc(var(--vh, 1vh) * 100 - constant(safe-area-inset-bottom));
height: calc(var(--vh, 1vh) * 100 - env(safe-area-inset-bottom));
Edited Dec 20, 2023 by JayChen
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking