当前位置: 首页 > 面试题库 >

带有CSS的图像灰度和鼠标悬停时重新着色?

漆雕成弘
2023-03-14
问题内容

我正在寻找一个带颜色的图标(并将成为链接),并将其设为灰度,直到用户将鼠标置于该图标上(然后该图标将对该图像进行着色)。

是否可以这样做,并且以IE和Firefox支持的方式进行?


问题答案:

有多种方法可以完成此操作,下面将通过一些示例详细说明。

纯CSS(仅使用一张彩色图像)

img.grayscale {
  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */
  filter: gray; /* IE6-9 */
  -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
}

img.grayscale:hover {
  filter: none;
  -webkit-filter: grayscale(0%);
}



img.grayscale {

  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");

  /* Firefox 3.5+, IE10 */

  filter: gray;

  /* IE6-9 */

  -webkit-filter: grayscale(100%);

  /* Chrome 19+ & Safari 6+ */

  -webkit-transition: all .6s ease;

  /* Fade to color for Chrome and Safari */

  -webkit-backface-visibility: hidden;

  /* Fix for transition flickering */

}



img.grayscale:hover {

  filter: none;

  -webkit-filter: grayscale(0%);

}



svg {

  background: url(http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s400/a2cf7051-5952-4b39-aca3-4481976cb242.jpg);

}



svg image {

  transition: all .6s ease;

}



svg image:hover {

  opacity: 0;

}


<p>Firefox, Chrome, Safari, IE6-9</p>

<img class="grayscale" src="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" width="400">

<p>IE10 with inline SVG</p>

<svg xmlns="http://www.w3.org/2000/svg" id="svgroot" viewBox="0 0 400 377" width="400" height="377">

  <defs>

     <filter id="filtersPicture">

       <feComposite result="inputTo_38" in="SourceGraphic" in2="SourceGraphic" operator="arithmetic" k1="0" k2="1" k3="0" k4="0" />

       <feColorMatrix id="filter_38" type="saturate" values="0" data-filterid="38" />

    </filter>

  </defs>

  <image filter="url(&quot;#filtersPicture&quot;)" x="0" y="0" width="400" height="377" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" />

   </svg>

您可以在此处找到与此技术相关的文章。

纯CSS(使用灰度和彩色图像)

这种方法需要图像的两份副本:一份是灰度的,另一份是全彩色的。使用CSS:hoverpsuedoselector,您可以更新元素的背景以在两者之间切换:

#yourimage { 
    background: url(../grayscale-image.png);
}
#yourImage:hover { 
    background: url(../color-image.png};
}



#google {

  background: url('http://www.google.com/logos/keystroke10-hp.png');

  height: 95px;

  width: 275px;

  display: block;

  /* Optional for a gradual animation effect */

  transition: 0.5s;

}



#google:hover {

  background: url('https://graphics217b.files.wordpress.com/2011/02/logo1w.png');

}


<a id='google' href='http://www.google.com'></a>

这也可以通过以hover()相同方式使用基于Java的悬停效果(例如jQuery的功能)来实现。

考虑第三方图书馆

在去色库是一个公共库,可以让您轻松定元素或图像的灰度版本和全彩色版本之间切换。



 类似资料:
  • 问题内容: 有时,我可以选择使用CSS元素:悬停或JavaScript onmouseover来控制页面上html元素的外观。考虑以下情况,其中div包装了输入 我希望输入将鼠标光标悬停在div上时更改背景色。CSS方法是 JavaScript方法是 每种方法的优点和缺点是什么?CSS方法是否适用于大多数Web浏览器?JavaScript比CSS慢吗? 问题答案: :hover的问题是IE6仅在链

  • 问题内容: 我试图当鼠标移到图像的左下方时出现一个小框。在该框内,将有一个指向其他页面的链接。 这有点类似于我想要的东西,但是盒子要更小并且不连接到图像的边框。 我已经尝试了一切,但找不到答案。而且我不想使用工具提示,更不用说我没有任何JavaScript知识了。我真的希望这是CSS。 问题答案: 这是在CSS3中使用伪元素。 HTML: CSS: 相反,这是使用jquery达到相同结果的一种方式

  • 问题内容: 我的问题.. 我有许多图像(在超链接中),并且我希望每个图像在鼠标悬停时变暗(即,使用具有高不透明度或某些功能的黑色蒙版),然后在mouseout上恢复正常。但是我想不出最好的方法。 我试过了.. jQuery颜色动画和一些javascript参考。 使用javascript设置图像的不透明度。 我不要 图像从80%的不透明度开始,然后在鼠标悬停时达到100%(这很容易)。 要在2张图

  • 问题内容: libgdx中是否有任何侦听器可以让我检测到鼠标悬停而不是鼠标悬停。在场景2D的按钮类中,您有2种方法isOver和isPressed,但是它们执行相同的操作…还有其他问题吗?还有另一种方法来检测鼠标悬停在actor上吗? 问题答案: 还有的可以连接到和它提供的事件,如下面的: 该事件从根本上来说意味着鼠标开始悬停在角色上,意味着它“离开”了角色的区域。它还有一个事件,您可以使用该事件

  • 我有一系列使用d3创建的行。我写了一些和事件事件。 当I时,事件通过增加行的值正常工作。 但是在上,在我编写代码的地方,事件不能正常工作,将值设置为初始值。 小提琴 帮我修一下。

  • 问题内容: 我有一张图片: 然后,我将其显示在屏幕上: 如何检测鼠标是否在触摸图像? 问题答案: 使用获得描述你的边界,然后使用来检查,如果鼠标光标这里面。 例: