CSS Sprite 淡入淡出动画

标签 css css-transitions fadein css-animations sprite

我基本上需要使 Sprite 元素具有淡入淡出动画而不是滚动效果(不透明动画而不是背景位置)。我怎样才能用css3或js来做到这一点,但没有jquery?有没有办法不使用像素,而是使用 % 或 rems 来定位元素(在下面的代码中)?

.youtube {
    background-position: -256px -256px;
    &:hover {
        background-position: -256px -384px;
    }
}

这是 fiddle :http://jsfiddle.net/zvj89o0o/1/

最佳答案

背景位置:x% y%;

实际上,背景位置百分比的工作原理如下:

  • 横坐标0%时,图像的左侧与容器的左侧对齐。
  • 横坐标100%时,图像的右侧与容器的右侧对齐。
  • 中间值按线性计算。

同样,

  • 纵坐标0%时,图像的顶边与容器的顶边对齐。
  • 纵坐标100%时,图像的底边与容器的底部对齐。
  • 中间值按线性计算。

你的问题

在您的问题中, Sprite 容器的横坐标可能有3个理想值:0%50% 100%,纵坐标可能有 4 个理想值:0%33.33%66.66%100%。见下图:
enter image description here

要添加淡入淡出效果,请在普通元素上方添加伪元素 :before 。现在,相应地定位背景并添加淡入淡出的悬停效果。

更新的代码片段:

body {
  background: #141414;
}
.sprites {
  position: relative;
  display: block;
}
a {
  display: inline-block;
  margin-top: 6px;
}
.youtube,
.pinterest,
.vk,
.facebook,
.twitter,
.instagram {
  width: 125px;
  height: 125px;
  background: url(http://i.imgur.com/xGT3jFF.png) 0 0 no-repeat;
  -webkit-transition: all 300ms ease-in-out;
  -moz-transition: all 300ms ease-in-out;
  transition: all 300ms ease-in-out;
  float: left;
  display: block;
  margin-right: 5px;
}
.youtube:before,
.pinterest:before,
.vk:before,
.facebook:before,
.twitter:before,
.instagram:before {
  position: absolute;
  width: 125px;
  height: 125px;
  content: "";
  background: url(http://i.imgur.com/xGT3jFF.png) 0 0 no-repeat;
  transition: 0.5s ease;
}
.youtube {
  background-position: 100% 100%;
}
.youtube:before {
  background-position: 100% 66.6666%;
}
.youtube:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
.pinterest {
  background-position: 50% 100%;
}
.pinterest:before {
  background-position: 50% 66.6666%;
}
.pinterest:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
.vk {
  background-position: 0% 100%;
}
.vk:before {
  background-position: 0px 66.6666%;
}
.vk:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
.facebook {
  background-position: 100% 33.333%;
}
.facebook:before {
  background-position: 100% 0%;
}
.facebook:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
.twitter {
  background-position: 50% 33.3333%;
}
.twitter:before {
  background-position: 50% 0%;
}
.twitter:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
.instagram {
  background-position: 0% 33.33333%;
}
.instagram:before {
  background-position: 0% 0%;
}
.instagram:hover:before {
  transition: 0.5s ease;
  opacity: 0;
}
<div class="sprites">
  <a class="instagram" href="http://instagram.com"></a>
  <a class="twitter" href="https://twitter.com"></a>
  <a class="facebook" href="https://fb.com"></a>
  <a class="vk" href="https://vk.com"></a>
  <a class="pinterest" href="https://pinterest.com"></a>
  <a class="youtube" href="https://youtube.com"></a>
</div>

关于CSS Sprite 淡入淡出动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004344/

相关文章:

php - 如何居中对齐 wordpress 网站主页的标题?

html - 使用 CSS 为常规图像添加​​色调

javascript - 如何添加一个简单的卡片翻转动画?

css - 为什么当我不关注输入时,这个 CSS3 转换不起作用? ( :focus)

jQuery + AJAX 追加淡入淡出

jquery - 添加淡入效果 li :hover with jquery

javascript - 如何防止 JQuery 中的鼠标光标变为 'selected text'?

html - 如何显示其他元素的划分

css - 在 firefox 上悬停和转换时图像跳跃/闪烁

jquery - 菜单项鼠标悬停时淡入有效,但淡出无效