CSS: Change image src on img:hover
我需要更改
我已经尝试过了,但是不起作用:
的HTML
1 | <img id="my-img" src="http://dummyimage.com/100x100/000/fff"/> |
的CSS
1 2 3 | #my-img:hover { content: url('http://dummyimage.com/100x100/eb00eb/fff'); } |
jsFiddle
任何帮助,将不胜感激。
更新:
这仅适用于Webkit / Google Chrome。
仅使用html和css,无法更改图像的src。如果确实将img标签替换为div标签,则可以更改设置为背景的图像,例如
1 2 3 4 5 6 | div { background: url('http://dummyimage.com/100x100/000/fff'); } div:hover { background: url('http://dummyimage.com/100x100/eb00eb/fff'); } |
如果您认为可以使用一些JavaScript代码,则应该可以如下更改img标签的src
1 2 3 4 5 6 7 | function hover(element) { element.setAttribute('src', 'http://dummyimage.com/100x100/eb00eb/fff'); } function unhover(element) { element.setAttribute('src', 'http://dummyimage.com/100x100/000/fff'); } |
1 | <img id="my-img" src="http://dummyimage.com/100x100/000/fff" onmouseover="hover(this);" onmouseout="unhover(this);" /> |
我修改了与Patrick Kostjens相关的一些更改。
1 2 3 4 | <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=""/> |
演示
http://jsfiddle.net/ssuryar/wcmHu/429/
我有一个类似的问题,但是我的解决方案是要有两张图像,一张隐藏(显示:无),另一张可见。将鼠标悬停在周围跨度上时,原始图像更改为display:none,另一图像更改为display:block。 (根据您的情况,可以使用"内联"代替)
本示例使用两个span标签而不是图像,因此您可以在此处运行时查看结果。不幸的是,我没有任何在线图像来源可以使用。
1 2 3 4 5 6 7 8 9 | #onhover { display: none; } #surround:hover span[id="initial"] { display: none; } #surround:hover span[id="onhover"] { display: block; } |
1 2 3 4 | <span id="surround"> <span id="initial">original</span> <span id="onhover">replacement</span> </span> |
您可以做的是通过将
1 2 3 4 5 6 7 8 9 10 | #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'); } |
填充使
小提琴
这是使用纯CSS的替代方法。这个想法是在HTML标记中包括两个图像,并在:hover上相应地显示或隐藏这些图像。
的HTML
1 2 | <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" /> |
的CSS
1 2 3 4 5 6 7 8 9 | a img:last-child { display: none; } a:hover img:last-child { display: block; } a:hover img:first-child { display: none; } |
jsfiddle:https://jsfiddle.net/m4v1onyL/
请注意,所使用的图像具有相同的尺寸以便正确显示。另外,这些图像文件的大小非常小,因此在这种情况下加载多个图像不是问题,但是如果您要切换大尺寸图像的显示,则可能是这样。
我还有一个解决方案。如果有人使用AngularJs:
http://jsfiddle.net/ec9gn/30/
1 2 | <img ng-mouseover="img='eb00eb'" ng-mouseleave="img='000'" ng-src='http://dummyimage.com/100x100/{{img}}/fff' /> |
Javascript:
1 2 3 | function ctrl($scope){ $scope.img= '000'; } |
没有CSS ^^。
我有类似的问题-我想替换:hover上的图片,但由于缺少Bootstrap的自适应设计,因此无法使用BACKGRUND-IMAGE。
如果您喜欢我只想在:hover上更改图片(但不坚持更改某些图像标签的SRC),则可以执行以下操作-这是仅CSS的解决方案。
HTML:
1 2 3 4 5 6 | <li> <img src="/picts/doctors/SmallGray/Zharkova_smallgrey.jpg"> <img class="hoverPhoto" src="/picts/doctors/Small/Zharkova_small.jpg"> </li> |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | li { position: relative; overflow: hidden; } li img.hoverPhoto { position: absolute; top: 0; right: 0; left: 0; bottom: 0; opacity: 0; } li.hover img { /* it's optional - for nicer transition effect */ opacity: 0; -web-kit-transition: opacity 1s ease; -moz-transition: opacity 1s ease;li -o-transition: opacity 1s ease; transition: opacity 1s ease; } li.hover img.hoverPhoto { opacity: 1; } |
如果您想要IE7兼容的代码,则可以通过定位而不是不透明来隐藏/显示:HOVER图像。
由于您无法使用CSS更改
演示版
1 2 3 4 5 6 7 8 | $('#aks').hover( function(){ $(this).attr('src','http://dummyimage.com/100x100/eb00eb/fff') }, function(){ $(this).attr('src','http://dummyimage.com/100x100/000/fff') } ) |
它基本上是使用
我们正在使用
值得一提的是,您需要像小提琴一样包含的jQuery库来完成这项工作。
小提琴
同意AshisKumar的回答,有一种方法可以使用jQuery功能更改鼠标悬停时的图片网址,如下所示:
1 2 3 4 5 6 7 8 9 10 11 | $(function() { $("img") .mouseover(function() { var src = $(this).attr("src").match(/[^\.]+/) +"over.gif"; $(this).attr("src", url1); //URL @the time of mouse over on image }) .mouseout(function() { var src = $(this).attr("src").replace("over",""); $(this).attr("src", url2); //default URL }); }); |
就个人而言,我会选择一种JavaScript / jQuery解决方案。这不仅保持了HTML的语义(即,将图像显示为img元素,并且其在标记中定义了通常的src图像),而且,如果您使用JS / jQuery解决方案,那么您还可以使用JS / jQuery预加载您的悬停图像。
预加载悬停图像将意味着当用户将鼠标悬停在原始图像上时,没有下载延迟,从而使您的网站表现得更加专业。
这确实意味着您对JS有依赖性,但是没有启用JS的极少数人可能不会太着急-并且其他所有人都会获得更好的体验...并且您的代码也将很好!
关于语义,到目前为止,我不喜欢任何解决方案。因此,我个人使用以下解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 | .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; } |
1 | <img src="https://www.w3schools.com/w3css/img_lights.jpg" alt="image" /> |
这是具有良好浏览器兼容性的纯CSS解决方案。它利用图像包装器,该包装器的背景最初被图像本身隐藏。悬停时,图像通过不透明度隐藏,因此背景图像变得可见。这样,在标记代码中就不会有一个空的包装,而是一个真实的图像。
以下代码适用于Chrome和Firefox
1 | <img src="me-more-smile.jpg" onmouseover="this.src='me-thinking-about-a-date.jpg'" onmouseout="this.src='me-more-smile.jpg'" border="0" alt=""/> |
为此,您可以使用以下代码
1)HTML
1 |
2)CSS
1 2 3 4 5 6 7 8 9 10 11 | #aks { width:100px; height:100px; background-image:url('http://dummyimage.com/100x100/000/fff');} #aks:hover { background-image:url('http://dummyimage.com/100x100/eb00eb/fff'); } |
您不能使用css更改img src。您可以使用以下纯CSS解决方案。
HTML:
1 |
CSS:
1 2 3 4 5 6 7 8 9 | #asks { width: 100px; height: 100px; background-image: url('http://dummyimage.com/100x100/0000/fff'); } #asks:hover { background-image: url('http://dummyimage.com/100x100/eb00eb/fff'); } |
或者,如果您不想在背景图片中使用div,则可以使用javascript / jQuery解决方案。
HTML:
1 | <img id="asks" src="http://dummyimage.com/100x100/000/fff" /> |
jQuery的:
1 2 3 | $('#asks') .mouseenter(function(){$('#asks').attr('src', 'http://dummyimage.com/100x100/eb00eb/fff');}) .mouseleave(function(){$('#asks').attr('src', 'http://dummyimage.com/100x100/000/fff');}); |
您不能使用
HTML:
1 | <img id="my-img" src="http://dummyimage.com/100x100/000/fff" onmouseover='hover()'/> |
Javascript:
1 2 3 | function hover() { document.getElementById("my-img").src ="http://dummyimage.com/100x100/eb00eb/fff"; } |
在较旧的浏览器上,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <style> a#aks { width:100px; height:100px; display:block; } a#aks:link { background-image: url('http://dummyimage.com/100x100/000/fff'); } a#aks:hover { background-image: url('http://dummyimage.com/100x100/eb00eb/fff'); } </style> |
这是纯CSS解决方案。将可见图像放置在img标签中,将第二个图像作为背景放置在CSS中,然后在悬停时隐藏该图像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | .buttons{ width:90%; margin-left:5%; margin-right:5%; margin-top:2%; } .buttons ul{} .buttons ul li{ display:inline-block; width:22%; margin:1%; position:relative; } .buttons ul li a p{ position:absolute; top:40%; text-align:center; } .but1{ background:url('scales.jpg') center no-repeat; background-size:cover; } .but1 a:hover img{ visibility:hidden; } .but2{ background:url('scales.jpg') center no-repeat; background-size:cover; } .but2 a:hover img{ visibility:hidden; } .but3{ background:url('scales.jpg') center no-repeat; background-size:cover; } .but3 a:hover img{ visibility:hidden; } .but4{ background:url('scales.jpg') center no-repeat; background-size:cover; } .but4 a:hover img{ visibility:hidden; } <ul> <li class='but1'><img src='scalesb.jpg' height='300' width='300' alt='' /><p> Blog </p> </li> <li class='but2'><img src='scalesb.jpg' height='300' width='300' alt='' /> <p> Herrero </p> </li> <li class='but3'><img src='scalesb.jpg' height='300' width='300' alt='' /><p> Loftin </p> </li> <li class='but4'><img src='scalesb.jpg' height='300' width='300' alt='' /><p> Contact </p> </li> </ul> |
更改图像
1 | <img src='willbehidden.png' style="width:0px; height:0px; padding: 8px; background: url(newimage.png);"> |
观看现场演示:http://www.audenaerde.org/csstricks.html#imagereplacecss
请享用!
尝试此代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | .card { width: 200px; height: 195px; position: relative; display: inline-block; } .card .img-top { display: none; position: absolute; top: 0; left: 0; z-index: 99; width:200px; } .card:hover .img-top { display: inline; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!DOCTYPE html> <html lang="en"> <head> Image Change on Hover with CSS </head> <body> <img src="http://www.dhresource.com/200x200s/f2-albu-g5-M00-EC-97-rBVaJFkAobCAHD9XAADvz9DDocA266.jpg/diy-wall-stickers-home-decor-nature-colorful.jpg" alt="Card Back" style="width:200px"> <img src="https://s-media-cache-ak0.pinimg.com/236x/31/17/98/3117987a0be0a7d8976869aabf54d2d7.jpg" class="img-top" alt="Card Front"> </body> </html> |