CSS3变换缩放和带溢出容器

4

我正在尝试使用CSS3 Transform(缩放)为容器创建一个缩放功能,一切似乎都很顺利,但是当图片被缩放时,溢出仅覆盖了图像的一部分,使左上角的部分超出了溢出区域。

代码如下:

HTML:

<div class="outer">
    <img id="profile" src="http://flickholdr.com/300/200/" />
</div>
<button class="zoom orig">Original</button>
<button class="zoom x2">x2</button>
<button class="zoom x4">x4</button>

CSS:

.outer          { width: 500px; height: 500px; overflow: auto; text-align: center; background: #eee; }
.outer:before   { content: ''; display: inline-block; vertical-align: middle; height: 100%; }
.outer img      { vertical-align: middle; }

.scale_x2   { -webkit-transform: scale(2); -moz-transform: scale(2); -ms-transform: scale(2); -o-transform: scale(2); transform: scale(2); }
.scale_x4   { -webkit-transform: scale(4); -moz-transform: scale(4); -ms-transform: scale(4); -o-transform: scale(4); transform: scale(4); }

JS:

$(function() {
    $('.zoom').on("click", function() {
        if ($(this).hasClass('orig')) {
            $("#profile").removeClass();
        } else if ($(this).hasClass('x2')) {
            $("#profile").removeClass().addClass('scale_x2');
        } else if ($(this).hasClass('x4')) {
            $("#profile").removeClass().addClass('scale_x4');
        }
    });
});

请查看这里的示例:http://jsfiddle.net/sbaydakov/RhmxV/2/

有没有关于如何使整个图像可见的想法?

谢谢。


你想要像这样的吗?http://jsfiddle.net/hushme/RhmxV/3/ - Hushme
1
我实际上想要能够在容器中滚动,这样如果我想要的话就能看到图像的所有角落。 - sbay
将它们应用于容器类。 - Hushme
请问您能否详细说明您想要做什么?您原来的jsFiddle将图像缩放到了中心位置。但是听起来您正在寻找不同的东西。 - Brett DeWoody
@BrettDeWoody 在缩放时要特别注意整个图像区域,因为顶部和左侧部分会被裁剪掉。 - sbay
显示剩余2条评论
2个回答

3
图片是从中心向辐射方向缩放,因此导致左上角的图像像素消失。查看这个有效示例:http://jsfiddle.net/RhmxV/37/
.scale_x2 {
    margin-left: 150px;
    margin-top: -193px;
    -webkit-transform: scale(2);
    -moz-transform: scale(2);
    -ms-transform: scale(2);
    -o-transform: scale(2);
    transform: scale(2);
}
.scale_x4 {
    margin-left: 450px;
    margin-top: 15px;
    -webkit-transform: scale(4);
    -moz-transform: scale(4);
    -ms-transform: scale(4);
    -o-transform: scale(4);
    transform: scale(4);
}

1

如果您想保持左上角的位置不变,请使用 transform-origin

transform: scale(2);
transform-origin: top left;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接