简体   繁体   English

背景图像(SVG)改变:悬停行动有趣

[英]background-image (SVG) change on :hover acting funny

When I hover over the div the background-image is supposed to change to a different one. 当我将鼠标悬停在div上时, background-image应该更改为另一个。 However it seems to start with a small image that then zooms up to the actual size requested... 然而,它似乎从一个小图像开始,然后放大到所要求的实际尺寸......

What could be causing this? 可能是什么导致了这个?

JSFiddle 的jsfiddle

 .animate { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } div.rating_system { position: relative; float: left; clear: none; display: block; width: 260px; height: 50px; } div.rating_system input[type=radio] { display: none; visibility: collapse; } div.rating_system input[type=radio] + label { position: relative; float: right; clear: none; display: block; width: 18.4%; height: 100%; margin: 0; padding: 0 2% 0 0; outline: 0; cursor: pointer; background-image: url('data:image/svg+xml;utf8,<svg version="1.1" fill="#2C3E50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 110 105" style="enable-background:new 0 0 110 105;" xml:space="preserve"><ellipse opacity="0.3" cx="55" cy="52.5" rx="55" ry="52.5"/><path d="M55,8c25.9,0,47,20,47,44.5S80.9,97,55,97S8,77,8,52.5S29.1,8,55,8 M55,0C24.6,0,0,23.5,0,52.5c0,29,24.6,52.5,55,52.5s55-23.5,55-52.5C110,23.5,85.4,0,55,0L55,0z"/></svg>'); background-repeat: no-repeat; background-position: center center; background-size: 40px; } div.rating_system input[type=radio]#star-5 + label { padding: 0 0 0 0; } div.rating_system:hover > input[type=radio] + label:hover, div.rating_system:hover > input[type=radio] + label:hover ~ label, div.rating_system > input[type=radio]:checked ~ label { background-image: url('data:image/svg+xml;utf8,<svg version="1.1" fill="#2C3E50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 110 105" style="enable-background:new 0 0 110 105;" xml:space="preserve"><ellipse cx="55" cy="52.5" rx="55" ry="52.5"/></svg>'); } 
 <div class="rating_system"> <input type="radio" id="star-5" name="rating-01" value="5" class="animate"><label for="star-5" class="animate"></label> <input type="radio" id="star-4" name="rating-01" value="4" class="animate"><label for="star-4" class="animate"></label> <input type="radio" id="star-3" name="rating-01" value="3" class="animate"><label for="star-3" class="animate"></label> <input type="radio" id="star-2" name="rating-01" value="2" class="animate"><label for="star-2" class="animate"></label> <input type="radio" id="star-1" name="rating-01" value="1" class="animate"><label for="star-1" class="animate"></label> </div> 

It looks like a browser bug. 它看起来像一个浏览器错误。 I could advice you the cross-browser solution based on :after pseudo-element and transition by opacity : 我可以根据以下内容向您推荐跨浏览器解决方案:在伪元素之后和通过不透明度 transition

JSFiddle (simplified your code for the snippet) JSFiddle (简化了代码片段的代码)

 .rating-system { float: left; display: block; width: 260px; height: 50px; } input { display: none; } label { position: relative; float: right; display: block; width: 18.4%; height: 100%; margin: 0; padding: 0 2% 0 0; outline: 0; cursor: pointer; background-image: url('data:image/svg+xml;utf8,<svg version="1.1" fill="#2C3E50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="110" height="105"><ellipse opacity="0.3" cx="55" cy="52.5" rx="55" ry="52.5"/><path d="M55,8c25.9,0,47,20,47,44.5S80.9,97,55,97S8,77,8,52.5S29.1,8,55,8 M55,0C24.6,0,0,23.5,0,52.5c0,29,24.6,52.5,55,52.5s55-23.5,55-52.5C110,23.5,85.4,0,55,0L55,0z"/></svg>'); background-repeat: no-repeat; background-position: 50% 50%; background-size: 40px; } label:first-of-type { padding: 0; } label:after { content: ''; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: url('data:image/svg+xml;utf8,<svg version="1.1" fill="#2C3E50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="110" height="105"><ellipse cx="55" cy="52.5" rx="55" ry="52.5"/></svg>'); background-repeat: no-repeat; background-position: 50% 50%; background-size: 40px; opacity: 0; -webkit-transition: opacity 0.2s ease-in-out; -moz-transition: opacity 0.2s ease-in-out; -o-transition: opacity 0.2s ease-in-out; transition: opacity 0.2s ease-in-out; } label:hover:after, label:hover ~ label:after, input:checked ~ label:after { opacity: 1; } 
 <div class="rating-system"> <input type="radio" id="star-5" name="rating-01" value="5"/> <label for="star-5"></label> <input type="radio" id="star-4" name="rating-01" value="4"/> <label for="star-4"></label> <input type="radio" id="star-3" name="rating-01" value="3"/> <label for="star-3"></label> <input type="radio" id="star-2" name="rating-01" value="2"/> <label for="star-2"></label> <input type="radio" id="star-1" name="rating-01" value="1"/> <label for="star-1"></label> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM