最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - SVG - make viewBox(0, 0, 100%, 100%) with percentages - Stack Overflow

programmeradmin4浏览0评论

How can I make SVG viewBox user coordinate system the same as the viewport coordinates system provided by SVG itself (height="100%" and width="100%")?

I need this special case for a project I'm doing, SVG element should be responsive, but still we need to keep height and width 100% on the SVG itself.

So, I need something like this:

<svg height="100%" width="100%" viewBox="0, 0, 100%, 100%">
  <circle cx="25" cy="25" r="20" stroke="black" strokeWidth="1" fill="black" />
</svg>

.. but the viewBox attribute doesn't accept percentages.

How can I make SVG viewBox user coordinate system the same as the viewport coordinates system provided by SVG itself (height="100%" and width="100%")?

I need this special case for a project I'm doing, SVG element should be responsive, but still we need to keep height and width 100% on the SVG itself.

So, I need something like this:

<svg height="100%" width="100%" viewBox="0, 0, 100%, 100%">
  <circle cx="25" cy="25" r="20" stroke="black" strokeWidth="1" fill="black" />
</svg>

.. but the viewBox attribute doesn't accept percentages.

Share Improve this question asked May 3, 2018 at 13:08 Tamara JovicTamara Jovic 2291 gold badge3 silver badges4 bronze badges 2
  • 3 The viewBox attribute simply sets the maximum x and y coordinates of your graphic's internal coordinate system, which will then be stretched to the size you specify in width and height. Long story short, just use viewBox="0 0 100 100" and you can use numbers between 0 and 100. – Máté Safranka Commented May 3, 2018 at 13:10
  • 2 @MátéSafranka not completely right, whether stretching happens depends on the value of the preserveAspectRatio attribute. As a default, it won't. @TamaraJovic, the answer to the question depends on what "responsive" behavior you want. Please describe what should happen when the SVG resizes: should the circle remain a circle, or be stretched/shrinked to an ellipse? – ccprog Commented May 3, 2018 at 14:44
Add a comment  | 

1 Answer 1

Reset to default 35

%/px is not allowed in the viewBox, those are the maximum coordinates.

By default the SVG content is contained to the SVG size.
If you want the content to stretch to 100%, disable the aspect ratio using preserveAspectRatio="none".
You can also use preserveAspectRatio="slice" to make the content cover the SVG (like background-size: cover).

<svg height="100%" width="100%" viewBox="0 0 100 100" preserveAspectRatio="none">

There are some good articles about this: https://css-tricks.com/scale-svg/ and https://alligator.io/svg/preserve-aspect-ratio/

发布评论

评论列表(0)

  1. 暂无评论