使用 CSS 进行图像灰度化并在鼠标悬停时重新着色?

2023-12-01

我希望获取一个彩色图标(并且将是一个链接)并将其灰度化,直到用户将鼠标放在该图标上(然后它将为图像着色)。

这是否可以做到,并且以 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:hover伪选择器,您可以更新元素的背景以在两者之间切换:

#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>

这也可以通过使用基于 Javascript 的悬停效果(例如 jQuery 的)来完成hover()以同样的方式发挥作用。

考虑第三方库

The 去饱和库是一个通用库,可让您轻松在给定元素或图像的灰度版本和全彩版本之间切换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CSS 进行图像灰度化并在鼠标悬停时重新着色? 的相关文章

  • Bootstrap 4 中导航栏重叠内容

    我的作品集页面有一个粘性导航栏 但是当我单击导航栏链接时 它会与每个部分中的文本重叠 在大约中 它与文本重叠 在 投资组合 和 关于 中 它与两个图块重叠 我试图在每个部分用一些填充顶部来补偿 但无济于事 这是完整的导航栏
  • CSS mix-blend-mode 可以与转换一起使用吗?

    显然 mix blend mode 不能很好地配合transform translate and z index 将其中任何一个应用到某些文本元素将立即取消混合混合模式效果 问题 这是一个已知的限制吗 有没有基于 CSS 的解决方法 我知道
  • 如何独立于“thead”滚动表“tbody”?

    如指定W3规格 http www w3 org TR html401 struct tables html idx row group对于表 表格行可以分为桌头 桌脚和一个或多个 更多表体部分 使用THEAD https www w3 or
  • IE8、IE7透明背景问题

    对我的菜单使用图标 png 透明背景 对于 IE9 Chrome Firefox safari opera 没有任何问题 但是如果我使用 IE7 或 IE8 打开页面 图像周围会出现断线黑色边框 CSS 代码 menu item1 back
  • jQuery 验证插件错误 CSS

    我想在错误时将标签字体颜色更改为红色或将文本框元素着色为红色 我使用的 CSS 不适合我 并且不确定如何更改单选 文本框的标签 而不是如果验证插件添加的标签错误 HTML
  • CSS:将边框应用于选项卡焦点图像

    使用 CSS 如何在使用键盘 TAB 的焦点周围放置边框以在页面中导航 这里展示了如何使用文本而不是图像来完成此操作 http www joepettersson com demo the outline property http www
  • Flexbox 中的 Bootstrap 列无法在较小的屏幕上换行

    我的网站有一个部分 我在 2 个 div 上使用下面的 CSS 其中一个a标签以使内容在中心垂直对齐 问题是 使用 Flex 样式属性时 理想情况下 当窗口 col md 4会一个一个地堆叠起来 这并没有发生 相反 列变得非常瘦并且仍然并排
  • 无论单元格中的文本量如何,都将表格列宽设置为恒定吗?

    在我的表格中 我将列中第一个单元格的宽度设置为100px 但是 当该列中的一个单元格中的文本太长时 该列的宽度将变得超过100px 我怎样才能禁用这个扩展 我玩了一会儿 因为我很难弄清楚 您需要设置单元格宽度 th or td工作 我设置了
  • 使用 twitter-bootstrap 时使文本区域缩放到网页

    我正在尝试根据页面大小调整文本区域的比例 即我试图使文本区域填充第二个容器和页脚之间的空间 HTML
  • 填充重叠的圆形区域

    我有两个相交的圆 我想让相交区域具有颜色 即使这两个圆是透明的 我想我可以找到一些方法用 css 来做到这一点mix blend mode财产 但我没有成功 当然 我可以使圆圈具有颜色并降低其不透明度 但我希望它们是白色或透明的 其中只有重
  • 如何消除页面边缘的间隙?

    我已经将主体和两个 div 的边框 内边距和边距设置为 0px 但我似乎仍然无法摆脱差距 body padding 0px border 0px margin 0px width 100 height 100vh mainPage heig
  • 嵌套最小高度不起作用

    我有一个固定大小的绝对定位区域 其中滚动条包含可变大小的内容 现在我需要将内容包装在两个 div 中 这两个 div 至少与区域一样大 但会扩展以适合内容 div div div div content div div div div 要求
  • 同时使用高度和最小高度,并且均以百分比形式表示

    有没有办法根据CSS中的百分比设置最小高度 当我同时使用高度和最小高度时 我不能同时使用百分比我正在寻找一种控制最小高度的方法 因为我的内容基于百分比并且它的高度发生了变化 我无法将高度设置为自动 因为我需要高度为 100 而最小高度也基于
  • 来自外部的 Shadow DOM CSS 样式在 Google Chrome 中不起作用

    我在用polymer s paper action dialog and paper button在我的网页中 纸张操作对话框中有两个纸张按钮 我想从外部 主 html 设计这些纸质按钮的样式 我已经写了CSS样式在shadow DOM符号
  • 桌子高度如何固定?

    我想将表格高度固定为 600px 即使内容很长 尝试将表格包裹在一个div标签 并设置 CSS 属性div像这样 div tablewrapper height 600px overflow y auto 如果表格的高度超过 600 像素
  • 如何使用 Selenium WebDriver 获取 CSS 选择器?

    我正在尝试创建横幅菜单中显示的元素的动态 元素映射 包括为每个菜单显示的链接 该地图将存储在String 矩阵 它将用于不同的方法和测试 为此 我得到了元素的href属性并为菜单中显示的每个链接创建我自己的 CSS 选择器 这是我创建 CS
  • 当 Flexbox 项目以列模式换行时,容器不会增加其宽度

    我正在研究一个嵌套的弹性盒布局 它应该按如下方式工作 最外层 ul main 是一个水平列表 当向其中添加更多项目时 该列表必须向右扩展 如果它变得太大 应该有一个水平滚动条 main display flex flex direction
  • 使用 JS 从列表中删除最近的 元素的 URL

    所以我有一个网址列表 并且有删除按钮 图像按钮 当点击删除按钮时 按钮旁边的 url 必须从列表中删除 let list const remove document getElementById remove const view docu
  • 如何以编程方式将 CSS 定义应用到整个页面?

    我确信该信息已经存在 但我找不到它 对不起 我想使用 JavaScript 创建 CSS 规则 并将它们应用到整个页面 就像它们位于文档头部的样式元素中一样 我不想通过生成 CSS 文本来实现 我想将规则保留为可以更改的实体 JavaScr
  • Angular 2:将路由器出口设计为宽度 < 100%

    我正在构建一个 Angular 2 应用程序 该应用程序将为宽度超过 500 的屏幕提供侧导航栏 为宽度小于 500 的屏幕提供底部导航栏 现在 我尝试为侧栏分配 20 的宽度 即 80 应用内容 我遇到的问题是路由器出口内容 即实际的应用

随机推荐

  • 如何在Powershell中运行C++程序,就像CMD一样?

    就像在 CMD 中一样 要运行 C 程序 我使用以下命令g filename cpp 然后我使用命令运行它a exe 这会在 CMD 本身中打开输出 如何使用 PowerShell 来做这样的事情 我无法通过简单的命令打开文件a exe 我
  • ASP.NET 2.0 - 如何使用 app_offline.htm

    我读过有关app offline htm该文件可以放置在 NET 2 0 应用程序的根目录中 这实际上会关闭该应用程序并禁止请求任何其他页面 我已将该文件放置在根目录中 并且我的网站仍然可以加载 我进入 IIS 中的默认文档并将其设置为ap
  • 在Java中使用XML作为数据库

    我想使用 XML 文件作为数据库 我想在其中存储 ID 及其相应的字符串路径 喜欢
  • 尝试让 Laravel 5 电子邮件正常工作

    我尝试通过输入 URL 向指定用户发送电子邮件 但收到以下错误 AbstractSmtpTransport php 第 383 行中的 Swift TransportException 预期响应代码 250 但得到代码 530 消息为 53
  • JButton长按事件

    我正在 NetBeans 平台上开发 Java 桌面应用程序 我有一些JFrames并且在这些框架内我有几个JButtons 我的应用程序将在工业 PC 基于 Linux 的平板电脑等触摸屏上运行 所以我需要使用按钮的长按事件 我该如何处理
  • 将 MKAnnotation 坐标转换为视图坐标

    当用户单击图钉时 如 Zillow 应用程序 我将显示自定义 UIView 现在的问题是我需要将视图放置在实际引脚的正上方 MKAnnotationView坐标系与地图相关 如何获取相对于 iPhone 屏幕的坐标 然后将我的视图放置在该坐
  • 在不使用库的情况下以格式打印表格,SQLite 3 python

    我想以更好的格式打印数据库中的数据 这是我制作的游戏 这是代码 def read all tables self self cursor execute SELECT Name Gender Age Score Date Time FROM
  • 仿制药的服务定位器

    我说了十几种T继承自EntityObject and IDataObject 我有以下通用接口 IDataManager
  • ASP.NET MVC 网站在任何浏览器上被重定向到本地 IIS 而不是 IIS Express

    Aim 在任何浏览器上的 IIS Express 上本地运行 ASP NET MVC 网站 History 相关项目是一个 ASP NET MVC 网站 最初设置为使用启用了 SSL 的本地 IIS 我尝试在 IIS Express 上进行
  • 如何在不使用 $scope 的情况下在兄弟组件之间传递数据?

    我正在以这种方式制作一个包含 3 个子组件的组件
  • 使用 Swift 将精灵旋转到 SpriteKit 中不精确的精灵位置

    我正在尝试将球员旋转到触球位置 使用触摸移动功能 我将位置设置为变量 然后我调用一个函数 可以用 但是角度不对 Location 是全局变量 player 是我想要转动的精灵 大约倾斜了15度 func rotatePlayer let a
  • 离线应用程序的分析+统计?

    正如标题所示 我需要做的是在各种 iO Android Windows 应用程序中跟踪各种用户事件 例如点击 滑动 在页面上花费的时间等 这些应用程序基于响应式 HTML CSS JS 并具有简单的操作系统特定容器 所有数据 例如图像 视频
  • 如何使用 OpenMP 编译使 R 包 xgboost 在 OS X 中并行?

    我在 R 中使用 xgb cv 和 xgboost 但是 它不能并行工作 我的示例代码如下 library xgboost library parallel param lt list objective reg logistic eval
  • 如何在 *n* 个测试失败后停止 MsTest 测试执行

    我想通过 MS Test 从 Windows 控制台 运行单元测试 这样我就可以在以下情况下停止 终止测试执行 失败的测试计数超过一定的阈值 对于我的用例 当一定比例的测试已经失败时 没有必要继续运行测试 我只能考虑创建一个新的控制台应用程
  • 在 CombinedDomainXYPlot 中创建标记/十字准线

    我想在CombinedDomainXYPlot 中显示一个标记 这是行不通的 我可以为每个子图添加标记 但我想将其添加到CombinedDomainXYPlot 中 任何人都可以告诉我有关这个问题的信息 我认为十字准线的行为是相同的 这是创
  • 如何将字符串从一个 SWF 传递到另一个 SWF

    希望这是一个足够简单的问题 一些细节 我用的是Flash CS5 从来没有接触过Flex 此外 正在加载的 SWF 将是clientSWF 因此希望有一个可以使用简单几行代码的解决方案 基本上我正在处理的 SWF 内部只包含一个简单的字符串
  • 将关键代码发送到 OS X 上的命令行程序

    我想制作一个启动程序然后向其发送按键输入的脚本 在伪脚本中 bin bash program lt lt PRESS CONTROL Z 程序正在运行 因此如果脚本中有其他命令 则将无法访问它们 除非说 control z 终止程序 这可能
  • 如何知道最近的iBeacon

    我有一个代码可以知道哪个信标是最近的 但是当信标的精度为 1 00000 时 我遇到一个问题 应用程序采用第二个信标 因此 有一个小伙子寻找最近的信标 寻找其他信标 并将最近的信标与周围发现的其他信标进行比较 然后 当我知道哪个是最近的一个
  • 好的面向对象设计可以像好的关系数据库设计那样形式化吗?

    在数据库世界中 我们有标准化 您可以从设计开始 逐步推进步骤 最后得到正常形式的数据库 这是在数据语义的基础上完成的 可以被认为是一系列的设计重构 在面向对象的设计中 我们有 SOLID 原则和各种其他特殊的指导方针来实现良好的设计 您是否
  • 使用 CSS 进行图像灰度化并在鼠标悬停时重新着色?

    我希望获取一个彩色图标 并且将是一个链接 并将其灰度化 直到用户将鼠标放在该图标上 然后它将为图像着色 这是否可以做到 并且以 IE 和 Firefox 支持的方式实现 有许多方法可以实现这一点 我将通过下面的几个示例对其进行详细说明 纯