CSS:在img:hover上更改图像src

Ham*_*ava 104 html css

我需要更改<img>源URL hover.

我试过这个但是不行:

HTML

<img id="my-img" src="http://dummyimage.com/100x100/000/fff"/>
Run Code Online (Sandbox Code Playgroud)

CSS

#my-img:hover {
    content: url('http://dummyimage.com/100x100/eb00eb/fff');
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

任何帮助,将不胜感激.

更新:

这仅适用于Webkit/Google Chrome.

Ash*_*mar 138

只有html和css,它不能改变图像的src.如果您使用div标签替换img标签,那么您可以更改设置为背景的图像

div {
    background: url('http://dummyimage.com/100x100/000/fff');
}
div:hover {
    background: url('http://dummyimage.com/100x100/eb00eb/fff');
}
Run Code Online (Sandbox Code Playgroud)

如果你认为你可以使用一些javascript代码,那么你应该能够改变img标签的src,如下所示

function hover(element) {
  element.setAttribute('src', 'http://dummyimage.com/100x100/eb00eb/fff');
}

function unhover(element) {
  element.setAttribute('src', 'http://dummyimage.com/100x100/000/fff');
}
Run Code Online (Sandbox Code Playgroud)
<img id="my-img" src="http://dummyimage.com/100x100/000/fff" onmouseover="hover(this);" onmouseout="unhover(this);" />
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您使用 CSS 选项,如果您不希望图像在需要在悬停时加载时“闪烁”到视图中,您可以通过将其放在隐藏的某个位置来将其预加载到您的页面上:`&lt;img src= "..." style="visibility: hidden" /&gt;` (3认同)

Sur*_*een 100

我修改了与Patrick Kostjens相关的一些变化.

<a href="#">
<img src="http://icons.iconarchive.com/icons/fasticon/angry-birds/128/yellow-bird-icon.png" 
onmouseover="this.src='http://icons.iconarchive.com/icons/fasticon/angry-birds/128/red-bird-icon.png'"
onmouseout="this.src='http://icons.iconarchive.com/icons/fasticon/angry-birds/128/yellow-bird-icon.png'"
border="0" alt=""/></a>
Run Code Online (Sandbox Code Playgroud)

DEMO

http://jsfiddle.net/ssuryar/wcmHu/429/

  • 在此示例中,每次将鼠标悬停时,都会在网络上加载两个图像(但是,第一次尝试后应将其缓存)。这是预期的行为。有时,在页面上具有图像元素很重要,例如出于可访问性要求,但是最好使用CSS显示/隐藏两个图像元素。在大多数情况下,使用JS更改图片的src属性是一个坏主意,请尝试使用background-image。 (3认同)

put*_*nde 16

你可以做的是通过设置欺骗一点,width然后height0来隐藏实际图像并应用一些CSS来做你想做的事情:

#aks {
    width:0px;
    height:0px;
    background:url('http://dummyimage.com/100x100/000/fff');
    padding:50px;
}

#aks:hover {
    background: url('http://dummyimage.com/100x100/eb00eb/fff');
}
Run Code Online (Sandbox Code Playgroud)

填充使img标记符合您希望的大小(实际图像大小的一半).

小提琴


Mic*_*elC 16

我有类似的问题,但我的解决方案是有两个图像,一个隐藏(显示:无)和一个可见.在悬停在周围跨度上时,原始图像将更改为display:none,另一个图像将显示为:block.(可能会根据您的具体情况使用'内联')

此示例使用两个span标记而不是图像,因此您可以在此处运行时查看结果.我遗憾地没有使用任何在线图像源.

#onhover {
  display: none;
}
#surround:hover span[id="initial"] {
  display: none;
}
#surround:hover span[id="onhover"] {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)
<span id="surround">
    <span id="initial">original</span>
    <span id="onhover">replacement</span>
</span>
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,您可以说'span #initial`代替`span [id ="initial"]` (2认同)

jcr*_*ruz 12

这是使用纯CSS的替代方法.我们的想法是在HTML标记中包含这两个图像,并相应地显示或隐藏它们:悬停

HTML

<a>
   <img src="https://cdn4.iconfinder.com/data/icons/imoticons/105/imoticon_15-128.png" /> 
   <img src="https://cdn4.iconfinder.com/data/icons/imoticons/105/imoticon_12-128.png" />
</a>
Run Code Online (Sandbox Code Playgroud)

CSS

a img:last-child {
  display: none;  
}
a:hover img:last-child {
  display: block;  
}
a:hover img:first-child {
  display: none;  
}
Run Code Online (Sandbox Code Playgroud)

jsfiddle:https://jsfiddle.net/m4v1onyL/

请注意,所使用的图像具有相同的尺寸以便正确显示.此外,这些图像文件大小非常小,因此在这种情况下加载多个不是问题,但如果您要切换大尺寸图像的显示,则可能是这样.

  • @putvande的方法可能相似,但这是一个完整且简化的工作示例,可以更好地利用CSS选择器 (3认同)

Ano*_*ous 9

关于语义,我不喜欢迄今为止给出的任何解决方案。因此,我个人使用以下解决方案:

.img-wrapper {
  display: inline-block;
  background-image: url(https://www.w3schools.com/w3images/fjords.jpg);
}

.img-wrapper > img {
  vertical-align: top;
}

.img-wrapper > img:hover {
  opacity: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div class="img-wrapper">
  <img src="https://www.w3schools.com/w3css/img_lights.jpg" alt="image" />
</div>
Run Code Online (Sandbox Code Playgroud)

这是一个只有 CSS 的解决方案,具有良好的浏览器兼容性。它使用一个图像包装器,该包装器具有最初由图像本身隐藏的背景。在悬停时,图像通过不透明度隐藏,因此背景图像变得可见。这样,标记代码中就没有空的包装器,而是一个真实的图像。


小智 5

我还有一个解决方案。如果有人使用AngularJs:http : //jsfiddle.net/ec9gn/30/

<div ng-controller='ctrl'>
    <img ng-mouseover="img='eb00eb'"  ng-mouseleave="img='000'"
         ng-src='http://dummyimage.com/100x100/{{img}}/fff' />
</div>
Run Code Online (Sandbox Code Playgroud)

Javascript:

function ctrl($scope){
    $scope.img= '000';
}
Run Code Online (Sandbox Code Playgroud)

没有CSS ^^。