7

我有一个 div,它是我的“弹出窗口”,我正在制作动画以显示在其父 div 的直接中心。所以我使用绝对定位、负边距和左+上来定位它,以便我可以简单地-webkit-transform: translateY(-100%)在悬停时为其设置动画。在 Safari 和 Mobile Safari 上运行良好。

如果您在 Chrome 或 Firefox 中使用像素,它可以正常工作,即使您使用所有百分比但使用像素设置父 div 宽度,它也可以工作。但是,如果你使用所有百分比,FF+Chrome 似乎完全是假的,并根据我无法弄清楚的东西渲染百分比。

Fiddle 示例:在 Safari 和 FF/Chrome 中查看此内容,以查看 Safari 呈现#pixels的效果与原样相同,#percents并且应该在两者中呈现。是 Safari 造成了这个错误吗?

<div class="container">
    <div class="pretendImage"></div>
    <div id="percents"></div>
</div>

和我的 CSS:

#percents {
    width:100%;
    height:100%;
    position:absolute;
    top:50%;
    left:50%;
    margin:-50% 0 0 -50%;
}
.container {
    position:relative;
    width:50%;
    height:auto;
}
.pretendImage {
    width:200px;
    height:200px;
}

好吧,我通过添加额外的包装器找到了解决方法。不过,我仍然想知道是什么原因造成的。

我的解决方法: Fiddle使用包装器来避免必须计算使用 80% 宽度/高度的内部 div 的顶部 + 边距。

4

2 回答 2

6

高度和顶部百分比相对于其包含块的高度 - 即具有“容器”类的 div。包含块的高度由“pretendImage”类的 div 的高度决定。

宽度、左边和左边距百分比是相对于它们包含块的宽度的——即具有“容器”类的 div。包含块的宽度被确定为其包含块的百分比,在 jsfiddle 案例中是初始包含块,它本身与视口的宽度相同。这不是您计算您认为需要的百分比的方式。您可以通过收缩包装position:relative(使用display:inline-block;or float:left;)的元素并在其外部创建另一个包装器 div 来分隔视口中的元素来处理此问题。

奇怪的是边距顶部(和边距底部)百分比。这些是相对于容器块的宽度的。这没有帮助,除非包含块具有已知且固定的纵横比,否则对此几乎无能为力,在这种情况下,您可以根据宽度和纵横比计算所需高度的百分比值。

不知道 Safari 在做什么,但听起来很糟糕。

于 2013-08-03T12:03:15.550 回答
0

这是适用于所有经过测试的浏览器和移动设备(Chrome、IE、Firefox、Safari、iPad、iphone 5 和 6、Android)的方法。

我认为您只需要确保在下面添加整组转换规则即可涵盖所有场景。

img.ui-li-thumb {
    position: absolute;
    left: 1px;
    top: 50%;

    -ms-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
    -moz-transform: translateY(-50%);
    -o-transform: translateY(-50%);
    transform: translateY(-50%);
}
于 2015-05-14T18:55:44.013 回答