Tôi đã tạo tệp SVG mà tôi định sử dụng làm hình nền trong CSS. Tôi muốn để có thể thay đổi màu sắc lấp trong SVG sử dụng một tham số truy vấn-string, như vậy:Hiểu thông số chuỗi truy vấn SVG
#rect { background-image: url('rect.svg'); }
#rect.red { background-image: url('rect.svg?color=red'); }
Theo tôi được biết, sử dụng một thẻ script trong SVG, tôi có thể nhận được các thông số color
và cập nhật màu tô. Dưới đây là ví dụ về SVG:
<!DOCTYPE svg PUBLIC "-//W3C//DDTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" />
<script>
<![CDATA[
var params = { };
location.href.split('?')[1].split('&').forEach(
function(i)
{
params[ i.split('=')[0] ] = i.split('=')[1];
}
);
if(params.color)
{
var rect = document.getElementsByTagName("rect")[0];
rect.setAttribute("fill", params.color);
}
]]>
</script>
</svg>
Chuyển đến tệp trực tiếp hoặc sử dụng thẻ đối tượng có vẻ hoạt động, nhưng đối với hình nền CSS hoặc thẻ img, tham số màu bị bỏ qua.
Tôi không chắc chắn những gì đang diễn ra ở đây và tôi hy vọng rằng sẽ có giải thích hoặc giải pháp thay thế cho những gì tôi đang cố gắng hoàn thành (tốt nhất là không cần xử lý phía máy chủ).
Đây là một jsFiddle cho thấy phương pháp làm khác nhau: http://jsfiddle.net/ehb7S/
javascript bị tắt khi SVG được sử dụng làm hình nền CSS hoặc trong thẻ hình ảnh. –
Ahh, điều đó giải thích tại sao nó không hoạt động. Tôi sẽ để nó mở trong trường hợp có bất kỳ giải pháp thông minh nào khác để truyền tham số cho SVG thông qua CSS, nhưng có vẻ như tôi không may mắn về điều này. – Quantastical
tại sao không sử dụng một số js bên ngoài svg? – mihai