如果隐藏溢出,则使用 css 变换缩小的图像将被裁剪

Scaled down image with css transform is cropped if overflow is hidden

我有一个比视口大的图像(或者更一般地说,<div> 中的一些内容)。

由于用户不希望看到图像中不可见的部分,因此我设置了 css 属性

overflow: hidden;

这样可以防止出现滚动条和滚动条。

然后在某些时候(用户交互)图像会通过 CSS 动画按比例缩小,例如:

transition: transform 0.5s;
transform: scale(0.5);

不幸的是,当图像缩小时,最初不可见的部分在调整图像大小时仍然隐藏 ,因为 overflow: hidden 属性

有没有办法避免这种情况?

这是fiddle


HTML

<body>
    <div id="container">
        <img id="picture" src="https://www.nasa.gov/sites/default/files/images/453915main_2010-3355_full.jpg"/>
    </div>
</body>

CSS

#container {
    overflow: hidden;
    position: absolute;
    display:  block;
    left:     10px;
    top:      10px;
    width:    500px;
    height:   500px;
}

#picture {
    position: absolute;
    width:    3000px;
    height:   2000px;
    left:    -1000px;
    top:     -500px;
}

JS

$(function()
{
    $('#container').on('click', resize);
}
);

function resize()
{
    $('#container').css(
    {
        'transition': 'transform 0.5s',
        'transform':  'scale(0.5)'
    } );
}

问题的产生是因为转换也应用于转换元素的 widthheight 属性。

这个问题可以通过将缩放后的 <div> 封装到相同的 wrapper <div> 中来解决尺寸。

然后 overflow: hidden 应用于 wrapper,而转换仍然适用于 wrapped <div>

Fiddle