最近覺得 SVG 很好用,在這個解析度非常多元的世代裡,靠 SVG 就可以做各種圖樣加上放大縮小都不會失真真的很方便,而且還可以用 HTML 的 img 標籤嵌入,但用 img 嵌入後就無法直接用 css 控制顏色,所以想要直接用 CSS 控制的話可以用加的 jQuery,就可以輕鬆愉快地控制了。
- jQuery('img.svg').each(function(){
- var $img = jQuery(this);
- var imgID = $img.attr('id');
- var imgClass = $img.attr('class');
- var imgURL = $img.attr('src');
- jQuery.get(imgURL, function(data) {
- // Get the SVG tag, ignore the rest
- var $svg = jQuery(data).find('svg');
- // Add replaced image's ID to the new SVG
- if(typeof imgID !== 'undefined') {
- $svg = $svg.attr('id', imgID);
- }
- // Add replaced image's classes to the new SVG
- if(typeof imgClass !== 'undefined') {
- $svg = $svg.attr('class', imgClass+' replaced-svg');
- }
- // Remove any invalid XML tags as per http://validator.w3.org
- $svg = $svg.removeAttr('xmlns:a');
- // Check if the viewport is set, if the viewport is not set the SVG wont't scale.
- if(!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) {
- $svg.attr('viewBox', '0 0 ' + $svg.attr('height') + ' ' + $svg.attr('width'))
- }
- // Replace image with new SVG
- $img.replaceWith($svg);
- }, 'xml');
- });
加了這段後,就可以直接用 CSS 控制顏色。
- <img class="svg icon" src="svg/favorite.svg" alt="favorite">
- .icon{
- cursor: pointer;
- }
- .icon:hover path{
- fill: #de5b78;
- }
記得控制 svg 填色是用 fill 就好了。