TransWikia.com

Определить viewBox для svg, если в самом svg он отсутствует

Stack Overflow на русском Asked by Floyat on November 24, 2021

Есть два svg.

В первом случае у svg есть заданный viewBox="0 0 57.21 126.47"
https://jsfiddle.net/5jaLdyex/

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57.21 126.47">...

Во втором случае у svg viewBox удален. В остальном svg без изменений.
https://jsfiddle.net/5jaLdyex/1/

<svg xmlns="http://www.w3.org/2000/svg">...

width/height тоже отсутствуют и в первом случае, и во втором.

Вопрос: как определить пропорции для svg #2? Точно знаю, что это возможно сделать, потому что если загрузить этот svg в конструктор canva, то он определит размер 57.21 126.47 даже если не задано width/height/viewBox.

2 Answers

Значения wdth height можно узнать использовав метод JS getBBox()

const svg = document.querySelector("svg");
const {x, y, width, height} = svg.getBBox();
console.log(width);

Вы можете установить значение параметров viewBox равными высоте и ширине пользовательского окна просмотра (viewport)

<script>
const svg = document.querySelector("svg");
const {x, y, width, height} = svg.getBBox();
svg.setAttribute("viewBox", `${x} ${y} ${width} ${height}`); 
</script>  

Значения будут те же, как в вашем первом примере viewBox="0 0 57.21 126.47"
Именно так и нарисовано ваше изображение в векторном редакторе.

Чтобы уменьшить его, например в 10 раз, нужно в шапке svg увеличить viewBox в 10 раз viewBox="0 0 572.1 1264.7"
или с помощью JS

<script>
const svg = document.querySelector("svg");
const {x, y, width, height} = svg.getBBox();
<!-- Увеличиваем viewBox - уменьшаем изображение -->
svg.setAttribute("viewBox", `${x} ${y} ${width * 10} ${height * 10}`);
</script>

Другой путь для регулировки размеров SVG

Раз вы уже знаете размер viewBox="0 0 57.21 126.47" укажите его явно, не указывая width, height в шапке SVG.
Оберните SVG в div и укажите width, height в относительных единицах

<style>
.container {
width:10vw;
height:10vh;
}
<div class="container"> 
<svg viewBox="0 0 57.21 126.47">
</svg>
</div>

Answered by Alexandr_TT on November 24, 2021

https://svgwg.org/specs/integration/#svg-css-sizing

Если нет width/height/viewBox, то размер SVG будет 300×150px независимо от содержимого.

Answered by Alexey Ten on November 24, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP