绝对定位容器中 Ipad 垂直中心上的 IOS Safari

Posted

技术标签:

【中文标题】绝对定位容器中 Ipad 垂直中心上的 IOS Safari【英文标题】:IOS Safari on Ipad vertical center in absolute positioned container 【发布时间】:2014-09-13 11:44:46 【问题描述】:

我有两个容器,它们的位置绝对是一个在另一个下面,如下所示:

<header>
    <div class="vcenter">
    ...
    </div>
</header>
<div id="wrapper">
...
</div>

CSS:

header 
position: absolute;
top: 0;
height: 70%;


.vcenter 
position: relative;
margin-top: -50px;
top: 50%;


#wrapper 
position: absolute;
width: 100%;
top: 70%;

我以相对定位垂直居中 .vcenter。这在所有主要浏览器中都可以正常工作。只有在 Ipad 上的 ios Safari 上才会出现问题。查看我正在处理的site。 .vcenter 是徽标的容器。

我正在通过 Xcodes IOS-Simulator 对其进行检查,并在真正的 Ipad 上进行检查。这可能是 IOS Safari 错误吗?有人有解决方法吗?我想保持我的标题动态垂直调整大小(高度:70%)...

提前感谢您的想法。

桌面截图(应该如何):

IOS-Simulator Ipad 屏幕截图(不应该如此):

【问题讨论】:

【参考方案1】:

我无法真正解释,但使用 position: absolute 似乎可以解决您的问题:

.vcenter 
  position: absolute;
  margin-top: -50px;
  top: 50%;
  width: 100%; /* needed to add to fix horizontal positioning */

我认为这与在absolute 上使用absolute 定位和百分比有关。如果您检查htmlbody 的高度,它们实际上并没有您的内容那么高——所以计算vcenter 的50% 定位可能会变得一团糟。不确定...

【讨论】:

谢谢伙计,正是我需要的。我忘记了宽度:100%,这就是我首先放弃这个解决方案的原因。谢谢【参考方案2】:

您是否尝试过使用transform 解决方案?它通常涵盖了诸如 iOS 渲染问题之类的基础知识(其中不只是这种情况)。

像这样编写你的类(它会在 IE9 及以下版本中中断,但这就是浏览器 shiming 的用途,你可以使用 Modernizr 将现有代码用于 shim)

.vcenter 
  position: relative;
  top: 50%;
  transform: translateY(-50%);
 

这应该在所有现代浏览器以及 iOS Safari 的垂直中心呈现 .vcenter

【讨论】:

我已经尝试过了,但不幸的是它不起作用。 .vcenter 仍然奇怪地定位自己。就像 IOS 无法处理两个绝对定位的容器,一个在另一个下方,并且基于错误的计算高度或其他东西定位 .vcenter...

以上是关于绝对定位容器中 Ipad 垂直中心上的 IOS Safari的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Safari 中将 flex 容器的绝对定位子项居中?

iOS - 如何通过 Objective-C 定位我的 iPad/iPhone 上的所有文件

高度固定,行数不固定的文字垂直居中问题

iOS - Swift - UIImage 上的可点击区域

html标签的垂直居中方法总结

使用display:flex将图像水平和垂直居中