html - 如何在 Sprite 表动画中设置背景位置值?

标签 html css animation

我写了这段代码:

body {
  background: #24aecd;
}

#monster {
  width: 190px;
  height: 290px;
  margin: 2% auto;
  background: url('http://treehouse-code-samples.s3.amazonaws.com/CSS-DD/codepen/blog/monster.png') left center;
  animation: play .8s steps(10) infinite;
}

@keyframes play {
  100% {
    background-position: -1900px;
  }
}
<head>
  <title>Page Title</title>
</head>

<body>
  <div id="monster"></div>
</body>

它工作正常但是当我改变背景位置时它不能正常工作。

Can anyone explain how to set background-position value in different sprit sheets.

怎么可能

最佳答案

“但是当我改变背景位置时它不能正常工作。” -- play 关键帧中的 background-position 在您的情况下不应更改,值 1900px 恰好是背景图像的宽度。这是整个动画的解释:

  1. 动画由一张大背景图片 (http://treehouse-code-samples.s3.amazonaws.com/CSS-DD/codepen/blog/monster.png) 实现。如果您下载并打开这张图片,它由 10 张独立的小图片(水平)组成,每张图片构成动画中的 1 帧。
  2. 默认情况下,显示最左边的帧图像(#monsterbackground 属性中的left)。
  3. 定义一个动画,使用10帧和0.8s周期,无限播放。动画的效果是将背景图片向左移动,每一步移动一帧图像(-1900px/10 = -190px,190px是一帧图像的宽度)。显示所有 10 帧图像后,background-position 将为 -1900px(100% 在关键帧中)并且随着背景图像的重复,新一轮将开始。

background-repeat-x 这个动画是必须的,否则不能无限动画。但是,background-repeat-y 应该是 no-repeat 以获得更好的效果。

如果要改变动画背景图片,改变相应的background-position,可以应用类似的计算——分帧,合成一张图片,设置100%关键帧作为合成图片的负宽度,最后定义CSS动画。

更新:

对于评论中提到的示例 Sprite 图像,其宽度为612px,由6帧组成,因此一帧的宽度为102px。代码片段将是:

#monster {
  width: 102px;
  height: 200px;
  margin: 0 auto;
  background: url('https://lh3.googleusercontent.com/proxy/hCmcllpdGXPzzIkEQxUf8EEkl2Tc9WqLu4D9JIAbPtmLpb5Fx0H7DG2yojnZ-rRNt8XXsM-xBGEWrPijzLnVZUpZbAnWTNui9TLjwdzm2R_PFdwwhVh0jV0=w612-h148-nc') left center;
  animation: play .8s steps(6) infinite;
  background-repeat-y: no-repeat;
}

@keyframes play {
  100% {
    background-position: -612px;
  }
}
<div id="monster"></div>

关于html - 如何在 Sprite 表动画中设置背景位置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43731287/

相关文章:

javascript - 新手程序员 = "Need explanation on this JQUERY smoothscrolling code"

html - Chrome 导航列表定位错误与 CSS/HTML 中的媒体查询

javascript - 我的 javascript 错误在哪里?转换日期格式

html - 如何使用 CSS 倾斜 div 布局,并允许图像填充倾斜区域

jquery - 将 foreach 与 Bootstrap 的网格一起使用以列出元素

CSS "fill-mode:forwards"在 Safari 中不工作

javascript - 在给定的 5 秒等待后无法找到动画的方法

html - 使用 W3C 有效徽章有什么意义?

CSS 菜单背景高度和文本高度

android - 向 View 添加一些文本