CSS 循环背景图像的方式,包括封面或包含尺寸

标签 css responsive-design css-animations

假设您正在尝试为这样的可平铺背景制作动画:

.container {
  width: 160px;
  height: 91px;
}
.bg {
  width: 100%;
  height: 100%;
  background: url(http://i60.tinypic.com/2j2fhjm.jpg) repeat-x left center;
  background-size: contain;
  -webkit-animation: displace 2s linear infinite;
  animation: displace 2s linear infinite;
}
@-webkit-keyframes displace {
  from {
    background-position: 0 center;
  }
  to {
    background-position: 160px center;
  }
}
@keyframes displace {
  from {
    background-position: 0 center;
  }
  to {
    background-position: 160px center;
  }
}
<div class="container">
  <textarea class="bg"></textarea>
</div>

一旦您更改容器的尺寸,循环动画就会中断!

有什么办法可以不用 JS 来实现响应式吗?

最佳答案

问题是,要使其具有响应性,您需要使用百分比设置动画背景位置。

但是,当您将 background-size 设置为 cover 或 contain 时,在某些情况下宽度会调整为 100%。在这种情况下,使用百分比的背景位置是无用的(不会移动它)。

我发现管理这个的唯一方法是将图像移动到一个伪元素,然后移动它。不过,为了保持连续性,我们需要两个伪元素。

但这不适用于文本区域。

你没有说 textarea 是一个要求,所以我发布这个。要显示它适用于调整大小,请将其悬停。

.container {
  width: 160px;
  height: 100px;
  position: relative;
  border: solid 1px black;
  display: inline-block;
}
.container:nth-child(2) {
   width: 220px;  
}
.bg {
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

.bg:before, .bg:after {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    background-image: url(http://i.stack.imgur.com/wBHey.png);
    background-size: 100%;
    animation: move 2s infinite linear;
}

.bg:before {
    right: 100%;
}

@keyframes move {
    from {transform: translateX(  0%);}
      to {transform: translateX(100%);}
}
<div class="container">
  <div class="bg"></div>
</div>
<div class="container">
  <div class="bg"></div>
</div>

test image

关于CSS 循环背景图像的方式,包括封面或包含尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730650/

相关文章:

javascript - 用于在 Safari 中放大图像的 Stuttery CSS 动画

jquery - png 图像不会上传到背景图像

javascript - 如何在 js/css 中用逗号分隔数组中的字符串?

css - 流体布局中的高度

html - 屏幕分辨率改变时改变列

CSS 动画适用于 Chrome 上的 JSFiddle,但不适用于本地主机上的 Chrome

html - 动画偏移

html - 添加类 row 而不是 col-md-12 会使 div 无法覆盖屏幕的整个宽度。有人可以帮我理解这背后的原因吗?

css - 在 css 中按 ".class"或 "*[class~=box]"定位类有什么区别?

css - Wordpress 主题 twentyeleven 的侧边栏如何使用 CSS 在特定窗口大小下堆叠?