Как сделать так, чтобы встроенный SVG всегда заполнял экран?
Я создал векторное изображение, которое я хотел бы использовать в качестве героя для моего сайта. Он должен заполнить ширину и высоту области просмотра во всех разрешениях.
Кроме того, мне нужно иметь возможность анимировать элементы SVG с помощью CSS или JavaScript, поэтому вставка их в качестве фона CSS или IMG не вариант (по крайней мере, насколько я знаю).
Ребята, вы знаете, как решить эту проблему? Это изображение показывает, чего я хотел бы достичь:
Любая помощь будет принята с благодарностью!
3 ответа
Приступил к работе, благодаря комментарию Роберта Лонгсона: preserveAspectRatio="xMidYMid slice"
и 100% ширина и высота, чтобы SVG работал.
Вы можете увидеть это здесь: http://codepen.io/EigenDerArtige/pen/yMaXZx
Добавьте атрибут preserveAspectRatio="slice"
в SVG. См. https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio для получения подробной информации.
Предпочтительные изображения svg, заполняющие экран, показаны обрезанными. Поскольку вы работаете с SVG, я полагаю, что вы, возможно, захотите, чтобы все изображение было удобно расположено по центру, не обрезаясь. Пример кода ниже загрузит файл SVG и заполнит экран, центрируя SVG. Все элементы доступны для изменений CSS и JavaScript. Это также будет реагировать на изменение размера окна.
Скопируйте приведенное ниже в HTML-файл, добавив свой собственный URL-адрес SVG-файла и раскомментируйте событие onload
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Load SVG file - full screen</title>
</head>
<body style='padding:0px;font-family:arial'>
<div id=svgDiv style='width:100%;height:100%;overflow:hidden;position:absolute;top:0px;left:0px;'></div>
<script>
function loadSVG()
{
var SVGFile="...your SVG file..."
var loadXML = new XMLHttpRequest;
loadXML.onload = callback;
loadXML.open("GET", SVGFile, true);
loadXML.send();
function callback()
{
//---responseText---
svgDiv.innerHTML=loadXML.responseText
sizeFull()
}
}
//--onload, onresize----
function sizeFull()
{
var mySVG=document.getElementsByTagName("svg")[0]
var svgW=window.innerWidth
var svgH=window.innerHeight
var bb=mySVG.getBBox()
var bbx=bb.x
var bby=bb.y
var bbw=bb.width
var bbh=bb.height
mySVG.setAttribute("viewBox",bbx+" "+bby+" "+bbw+" "+bbh )
mySVG.setAttribute("width",svgW)
mySVG.setAttribute("height",svgH)
}
window.onresize=sizeFull
//document.addEventListener("onload",loadSVG(),false)
</script>
</body>
</html>