如何防止图像被裁剪

Rom*_*ada 5 html css css-animations

我正在尝试创建一个包含大量图层的动画图片.为了在不同的屏幕上使用正确比例的图像,我使用covercss属性值(我已经object-fit为图像和background-size背景图像尝试了它).这就是为什么我在宽屏幕上的图像被浏览器歪曲的原因.

问题是我的图层在动画过程中被变换(主要是旋转和移动),因此有时会看到裁剪后的图像.

请参阅下面的示例.

如何预防?还是有其他一些技巧?

body {
  margin: 0;
  padding: 0;
  /*Just to imitate wide screen*/
  width: 1000px;
  height: 450px;
}

#container {
  width: 100%;
  height: 100vh;
  /*Just to imitate wide screen*/
  height: 100%;
  overflow: hidden;
  position: relative;
}

.layer {
  height: 100%;
  position: absolute;
  width: calc(100% + 20px);
}

.layer img {
  height: 100%;
  width: 100%;
  object-fit: cover;
}

.gulls {  
  animation: gulls ease-in-out 13s infinite alternate;
}

@keyframes gulls {
  from {
    transform: rotate(3deg) scaleX(0.95) skew(-10deg, -10deg);
  }
  to {
    transform: rotate(-3deg) scaleX(1.05) skew(10deg, 10deg);
  }
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
  <div class="layer">
    <img src="https://firebasestorage.googleapis.com/v0/b/wedding-42174.appspot.com/o/animation%2Fsky.png?alt=media&token=25033588-d58c-4616-94e9-4974ec4157a4" alt="">
  </div>
  <div class="layer gulls">
    <img src="https://firebasestorage.googleapis.com/v0/b/wedding-42174.appspot.com/o/animation%2Fgulls5.png?alt=media" />
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

目前我有这个:https://jsfiddle.net/koljada/c08qdw1m/

and*_*bin 2

可以使用容器 div 来裁剪图像overflow: hidden; position: relative,因此您可以使用 来将图像定位在里面position: absolutetop图像的css属性left必须设置为负值。

可以使用正弦和余弦函数找到图像的精确值。

body {
  margin: 0;
  padding: 0;
  /*Just to imitate wide screen*/
  width: 200px;
  height: 100px;
}

#container {
  width: 100%;
  height: 100vh;
  /*Just to imitate wide screen*/
  height: 100%;
  overflow: hidden;
  position: relative;
}

.layer {
  height: 100%;
  position: absolute;
  top: -20px;
  left: -20px;
  width: calc(100% + 20px);
}

.layer img {
  height: 150%;
  width: 150%;
}

.gulls {  
  animation: gulls ease-in-out 3s infinite alternate;
}

@keyframes gulls {
  from {
    transform: rotate(3deg) scaleX(0.95) skew(-10deg, -10deg);
  }
  to {
    transform: rotate(-3deg) scaleX(1.05) skew(10deg, 10deg);
  }
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
  <div class="layer gulls">
    <img src="http://via.placeholder.com/350x150/000000" />
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)