SVH 单元在移动 Safari 中无法正常工作

2024-01-06

Mobile Safari 不区分 CSS 单元svh and dvh。当视口展开(工具栏缩回)时,这些单元应该产生不同的高度,但它们却产生相同的高度。

Safari 对这些单位的支持是在 WebKit 博客中宣布 https://webkit.org/blog/12669/new-webkit-features-in-safari-15-5/大约一年前。这些单位在规范中进行了描述CSS 值和单位模块级别 4 https://www.w3.org/TR/css-values-4/#viewport-variants.

测试页

这个片段说明了这个错误,就像这个网页 https://donald.net.au/bugs/svh/。请注意,该错误是仅在使用移动 Safari 时可见(在 iPhone 或 iPad 上,或使用 Xcode 附带的模拟器)。

body {
  display: flex;
  gap: 1em;
  margin: 0 2em;
}
div {
  border: 5px solid red;
  box-sizing: border-box;
  width: 5em;
  padding-top: 1em;
  text-align: center;
}
div:nth-child(1) {
  background: cyan;
  height: 100vh;
}
div:nth-child(2) {
  background: yellow;
  height: 100svh;
}
div:nth-child(3) {
  background: lime;
  height: 100dvh;
}
div:nth-child(4) {
  background: pink;
  height: 100lvh;
}
<div>100vh</div>
<div>100svh</div>
<div>100dvh</div>
<div>100lvh</div>

预期行为

当工具栏折叠和展开时,唯一应该改变大小的元素是大小为dvh单位(石灰色元素)。其他三个元素应保持固定大小。

在小视口(工具栏展开)中查看页面时,元素大小为svh and dvh两者都应该完全适合视口,并且元素的大小与lvh应大于视口。

在大视口(工具栏折叠)中查看页面时,元素的大小为dvh and lvh两者都应该完全适合视口,并且元素的大小与svh应小于视口。

换句话说,黄色元素应该是short,粉色元素应该是long和石灰 元素应在短和长之间切换。

实际行为

当工具栏折叠和展开时(使用“隐藏工具栏”菜单选项),两个元素的大小都随着svh and dvh改变它们的大小。有趣的是,黄色元素立即改变大小,石灰元素稍后调整。然而,这里的要点是黄色元素不应该改变它的大小。

这里有一个截图视频 https://donald.net.au/bugs/svh/svh.mp4说明移动 Safari 的这种不正确行为。在运行 iOS 16.4.1 的 iPhone 上拍摄。


我相信这是浏览器渲染引擎中的一个错误,我已将其报告给 Apple。

UPDATE 1

我最初使用 Apple 的 Feeback Assistant 报告了这一情况;以这种方式提交的报告不会公开。然而,我刚刚发现WebKit有一个公共Bugzilla系统,所以我创建了这张票 https://bugs.webkit.org/show_bug.cgi?id=261185对于这个问题。

UPDATE 2

Bugzilla 中的票证反馈表明 Safari 可能会按预期运行。反馈表明工具栏之间可能存在区别自动隐藏由于滚动和工具栏手动隐藏使用隐藏工具栏菜单选项。

这可能是预期的行为。

当工具栏因滚动而自动隐藏时,只有 dvh 大小的条形变化。 svh 大小的条不受影响。这是作为 预期的。

然而,当您按下“隐藏工具栏”选项时,您实际上将 关闭自动显示/隐藏功能。由于不再有 工具栏将自动覆盖小视口的部分 viewport 可以解释为与大视口相同, 类似于桌面浏览器。

我不确定这里正确的解释应该是什么。它会 听到实施者的意见很有趣。

您是否有一个特定的用例,其中重要的是小 当用户禁用工具栏时,视口不受影响 共?

如果手动隐藏工具栏是永久性更改,这种状态会一直持续到我进行另一次手动更改为止,那么我可以理解在滚动期间将其与暂时隐藏的滚动条区分开来。但这不可能是永久性的改变。手动隐藏工具栏有助于在需要时临时回收一些屏幕空间,但您无法在隐藏工具栏的情况下浏览网页。一旦您需要使用后退按钮或搜索或输入另一个网址,您就需要返回大工具栏,您可以通过点击小工具栏来获取该工具栏。

如果 SVH 和 DVH 的行为彼此不同,那么对开发人员来说会更有用 - 然后我们可以选择我们想要使用的值。他们表现得相同是没有任何用处的。因此,我继续反对移动 Safari 中实施 SVH 单元的方式。

UPDATE 3

好消息,在过去几天(2023 年 11 月),此错误有了一些进展。首先,来自负责该错误的人员的评论:

我同意这是意外的行为。

受让人还发布了一个修复程序,他声称该修复程序可以解决该问题,但我们必须等待该修复程序经过审查和部署才能验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVH 单元在移动 Safari 中无法正常工作 的相关文章

  • 使用边距与填充? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近开始自己在线学习周三开发 并且是这个领域的新手 所以对我的基本查询表示歉意 我知道边距和填充之间的区别 用逻辑术语 但不太确定 何时应该使
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • Windows 上的锯齿字体 - Chrome 和 Safari

    我使用以下代码在网页上使用自定义字体 font face font family HelveticaNeueBold src url fonts HelveticaNeueBold eot src url fonts HelveticaNe
  • 在其他布局的 LinearLayout 中膨胀布局

    我有这个布局 ComposeView http img845 imageshack us img845 2121 d6zp png http img845 imageshack us img845 2121 d6zp png 2 个边框 左
  • CSS - 设置 Div 的大小以填充剩余空间

    我是 CSS 新手 我正在尝试创建模板的准系统结构 我有一个用于页眉 主要内容和页脚的 div 我的页脚和页眉很好 但我需要主要内容 div 来 填充 页眉和页脚之间的剩余空间 我尝试将 padding bottom 属性设置为与页脚相同的
  • 列表的 CSS 计数器

    我正在尝试在我的有序列表上使用 css 中的计数器增量 但它不起作用 这就是我想要显示的内容 1 Acknowledgements 1 1 blah blah 1 2 blah blah 1 3 blah blah 2 Risk State
  • 更改网格模板列会破坏布局

    定义时grid template columns在相应的父 div 中这很好 wrapper display grid grid template columns 1fr 1fr 700px 但是如果我只想要两列怎么办 如果我删除其中之一f
  • Tailwind CSS:“outline”类不存在。但这不是自定义样式,而是框架类

    在一个新项目中 我得到了奇怪的行为 除了大纲和相关内容之外 一切都按预期进行 https tailwindcss com docs outline style https tailwindcss com docs outline style
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • 如何在rollup中使用css @import?

    我尝试创建一个简单的汇总应用程序的配置 但在 css 方面遇到了一些麻烦 这是我的 CSS 文件 import normalize css import typeface roboto html body root height 100 f
  • 为什么 Firefox 对 Helvetica 的处理方式与 Chrome 不同?

    Firefox 和 Mac 版 Chrome 中以 Helvetica 呈现的文本的垂直位置及其内容区域的大小有所不同 例如 在 Chrome 中 如果行高与字体大小相同 则下行部分将被剪裁 我调整了图中块元素的位置 保持基线一致 以说明大
  • 如何使 CSS 动画/过渡以固定速度而不是固定持续时间播放? [复制]

    这个问题在这里已经有答案了 我有一个 CSS 动画 可以使元素沿直线移动未定义的距离 据我所知 动画具有固定的持续时间 因此无论元素必须移动多远 动画始终需要相同的时间来运行 我该如何制作才能使动画没有固定的duration 但有固定的运动
  • iPad 上的网站纵向视图

    我的网站在 iPad 纵向模式下无法正确显示 它在横向模式下看起来不错 但当我将其转换为纵向模式时 我最终会得到一个混乱的网站 所有元素都分散在整个网站上 我怎样才能解决这个问题 请帮我 这是我网站的链接 inclouds co uk ht
  • 固定 CSS 导航栏

    我最近解决了困扰我一段时间的 CSS 导航栏问题 现在我遇到了将其固定到顶部的问题 以便当您滚动页面时它会向下滚动 我知道我需要添加的是 Position fixed 但我不知道在哪里添加它 我最近的尝试导致文本被修复 但导航栏的背景却没有
  • CSS3家谱,如何添加妻子

    我正在关注这个guide http thecodeplayer com walkthrough css3 family tree关于如何仅使用 CSS3 制作家谱 但我真的不知道如何结婚 To clarify What the codes
  • BEM 与 SASS 和 :hover

    使用 BEM 和 SASS 声明活动 焦点 悬停状态的正确方法是什么 例如 我有这样的结构 div class card img class card image src alt div class card overlay div cla
  • height:100% 在 Internet Explorer 中不起作用

    我有一个关于 CSS 属性的问题height 100 在 Internet Explorer 中 height 100 在 IE 中不起作用 但在 Firefox 和 Chrome 中可以 HTML 文件 div ul ul div
  • CSS 列不会水平对齐

    我正在使用列计数来允许我的文本流入两个不同的列 但第一列的顶部 最左边 低于另一列 col moz column count 2 webkit column count 2 column count 2 div h3 Options h3
  • BS3 - img 响应类 - 为什么没有最大高度?

    引导程序 3 包括 img responsive班级 应用这些 css 设置 display block height auto max width 100 为什么没有max height 100 我发现添加这个使得图片的高度也适合 但我不
  • 不透明度如何影响元素顺序?

    我发现 CSS 有一个非常奇怪的行为opacity与浮动元素相结合 考虑以下 HTML div div Right button div div div Overlay div 最后div将覆盖前两个浮动的 删除不透明度会将最新的 div

随机推荐