【问题标题】:fade between icon sprite image with text在图标精灵图像与文本之间淡入淡出
【发布时间】:2015-08-20 22:04:04
【问题描述】:

我正在尝试编辑带有图标的链接以淡化颜色。我正在使用 :before 作为精灵的背景图像,因为当它只是 png 文件时,我不知道如何仅使用 css 来更改图标的颜色。

我发现这篇文章可能是一个答案(CSS3 - Fade between 'background-position' of a sprite image)并尝试根据我的需要对其进行修改,但它不起作用......

这里是代码和 codepen 演示 (http://codepen.io/kikibres/pen/KpjZKM):

HTML

<div id="button"><a href="#">Button</a></div>

CSS

#button{
  display: block;
}
#button a {
font-size: 30px;
font-weight: 700;
letter-spacing: 1;
color: #121e34;
text-decoration: none;
vertical-align: middle;
display: inline-block;
transition: color 0.4s ease;
}
#button a:hover {
color: #f68e07;
}
#button a:before {
  content: "";
  display: inline-block;
  vertical-align: middle;
    /*float:                  left;*/
    background-image:       url('http://www.dagrafixdesigns.com/Templates/DA-2011/DA-2013/Nike_13/img/mobile.png');
    background-position:    0 0px;
    background-repeat:      no-repeat;

    width:              30px;
    height:             30px;
  transition:         opacity 0.4s ease-in-out;
    -moz-transition:    opacity 0.4s ease-in-out;
    -webkit-transition: opacity 0.4s ease-in-out;
    -o-transition:      opacity 0.4s ease-in-out;

}
#button a:hover:before{
  content: "";
    background-image:       url('http://www.dagrafixdesigns.com/Templates/DA-2011/DA-2013/Nike_13/img/mobile.png');
    background-position:    0 -29px;
    background-repeat:      no-repeat;

    width:              30px;
    height:             30px;

    display:            inline-block; 
    /*text-indent:        -9999px;*/ 

    /*transition:         opacity 0.4s ease-in-out;
    -moz-transition:    opacity 0.4s ease-in-out;
    -webkit-transition: opacity 0.4s ease-in-out;
    -o-transition:      opacity 0.4s ease-in-out;*/
   opacity:            0;
}
/*#button a:hover:before 
{ 
    opacity:            0.4; 
}*/

如何修复它,使它从一种颜色褪色到另一种颜色...

* 更新 * 在其他人的帮助下(谢谢大家!),我能够编辑代码。但是,它并没有像我想要的那样排在中间。这是我用于网站的实际链接。显示的第一个代码只是一个示例,看看我如何使它工作。无论如何,我最终使用 span 将图标和文本分开,但现在我试图通过在 css 中使用“+”将它们绑定在一起,但它不起作用。这是codepen代码:http://codepen.io/kikibres/pen/GJbQKq

HTML

<div id="button"><a href="#"><span></span>Free Consultation</a></div>

CSS

body {
background-color: #121e34;
}
#button{
  display: block;
  width: 100%;
}
#button a {
  display: inline-block;
    position: relative;
    /*text-indent: 80px;*/
    /*width: 100%;
    height: 52px;*/
    /*background: url(http://i.imgur.com/32k8ugR.png) no-repeat;*/
  text-decoration: none;
  text-transform: uppercase;
font-size: 30px;
font-weight: 700;
letter-spacing: 1;
color: #fff;
vertical-align: middle;
transition: color 0.4s ease;
}
#button a:hover  {
color: #f68e07;
}
#button a span {
    position: relative;
  display: inline-block;
    /*top: 0; left: 0; bottom: 0; right: 0;*/
    background: url(http://i.imgur.com/32k8ugR.png) no-repeat;
  width: 66px;
  height: 52px;
  margin-right: 15px;
  vertical-align: middle;
}
#button a span:before {
  content: "";
  /*display: inline-block;*/
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  background: url(http://i.imgur.com/32k8ugR.png) no-repeat;
  background-position: 0 -52px;
  opacity: 0;
  -webkit-transition: opacity 0.5s;
    -moz-transition:    opacity 0.5s;
    -o-transition:      opacity 0.5s;
}
#button a span:hover:before {
    opacity: 1;
}

正如您从这个新的 codepen 代码中看到的那样,如果您将鼠标悬停在图标上,则图标和文本都有效,但如果您将鼠标悬停在文本上,则只有文本有效。我该如何解决?

【问题讨论】:

  • 淡出什么?图标?
  • 你的小提琴在工作jsfiddle.net/DIRTY_SMITH/7oebee2m/8什么不工作?
  • 图标的淡化不起作用。我希望它改变图像精灵中的颜色。我发布的另一篇文章是关于成功更改颜色的图标精灵,但问题是它没有文字。我试图将其修改为有文本。

标签: html css css-transitions


【解决方案1】:

您必须在不同的 DOM 元素上应用不同的图像样式,一旦它是锚标记,第二个是跨度(在我的示例中),然后切换不同定位背景的不透明度。 CodePen Link

片段

.button {
	display: inline-block;
	position: relative;
	text-indent: 30px;
	width: 36px;
	height: 30px;
	background: url(http://www.dagrafixdesigns.com/Templates/DA-2011/DA-2013/Nike_13/img/mobile.png) no-repeat;
  text-decoration: none;
  font-size: 1.5em;
  transition: color 0.4s ease;
  line-height:1.5em;
}
.button:hover{
  color:#f68e07;
}
.button span {
	position: absolute;
	top: 0; left: 0; bottom: 0; right: 0;
	background: url(http://www.dagrafixdesigns.com/Templates/DA-2011/DA-2013/Nike_13/img/mobile.png) no-repeat;
	background-position: 0 -29px;
	opacity: 0;
	-webkit-transition: opacity 0.5s;
	-moz-transition:    opacity 0.5s;
	-o-transition:      opacity 0.5s;
}
.button:hover span {
	opacity: 1;
}
&lt;a href="#" class="button"&gt;Button&lt;span&gt;&lt;/span&gt;&lt;/a&gt;

【讨论】:

  • 谢谢!它有效,但问题是图标和文本不是垂直对齐:中间。这是我用于网站的实际链接。第一个 codepen 只是让它工作的一个例子。这个新的 codepen 是我正在使用的实际链接:codepen.io/kikibres/pen/KpjZKM。我想这就是我使用 :before 的原因,因为它更容易垂直对齐图标和文本。
【解决方案2】:

要更改颜色,您可以将 CSS 转换与 -webkit-filter 结合在一起,当发生某些事情时,您将调用您选择的 -webkit-filter。例如:

            img {
                        -webkit-filter:grayscale(0%);
                        transition: -webkit-filter .3s linear;
                    }
                    img:hover 
                    {
                        -webkit-filter:grayscale(75%);
                    }

【讨论】:

  • 但它适用于 html 中的 img src。我正在使用的图像在 css background-image 中,它是一个精灵......
【解决方案3】:

您已经为 #button a:hover:before { ... } 声明了 opacity: 0;,这就是它在您的 codepen 演示中不起作用的原因。

【讨论】:

  • 你是否删除了不透明度:0;?
  • 我都试过了,但没有结果。图标所做的只是不停地来回晃动,而不是平滑地淡入另一个。我发布的另一篇文章是关于成功更改颜色的图标精灵,但问题是它没有文字。我试图将其修改为具有文本。 (stackoverflow.com/questions/15899865/…)
  • 啊,由于您使用的是图像精灵而不是两个不同的图像,请将 #button a:hover:before 的不透明度值设置为 1。
  • 这是克里斯蒂娜的小提琴工作示例,希望对您有所帮助。 jsfiddle.net/darh78kx
  • 文本在哪里?我试图取出文本缩进,但文本不在图标的右侧
【解决方案4】:

我明白了!!!感谢大家的帮助!我成功了!!!

这是工作代码笔:http://codepen.io/kikibres/pen/LVKQxE

HTML

<div id="button"><a href="#"><span></span>Free Consultation</a></div>

CSS

body {
background-color: #121e34;
}
#button{
  display: block;
  width: 100%;
}
#button a {
  display: inline-block;
    position: relative;
  text-decoration: none;
  text-transform: uppercase;
font-size: 30px;
font-weight: 700;
letter-spacing: 1;
color: #fff;
vertical-align: middle;
transition: color 0.4s ease;
}
#button a span {
    position: relative;
  display: inline-block;
    background: url(http://i.imgur.com/32k8ugR.png) no-repeat;
  width: 66px;
  height: 52px;
  margin-right: 15px;
  vertical-align: middle;
}
#button a span:before {
  content: "";
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  background: url(http://i.imgur.com/32k8ugR.png) no-repeat;
  background-position: 0 -52px;
  opacity: 0;
  -webkit-transition: opacity 0.5s;
    -moz-transition:    opacity 0.5s;
    -o-transition:      opacity 0.5s;
}
#button:hover a {
color: #f68e07;
}
#button:hover a span:before {
    opacity: 1;
}

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 2018-02-16
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    相关资源
    最近更新 更多