如何创建一个与浏览器窗口相同尺寸的SVG标签?

huangapple go评论57阅读模式
英文:

How can I create an svg tag with the same dimention as the browser window?

问题

以下是翻译好的部分:

假设我有以下HTML页面:

<!DOCTYPE html>
<html>
<head>
    <title>蛋白质结构分析器</title>
</head>
<body>
<div class="menu-strip">
    <ul>
      <li><a href="{{ url_for('index') }}">主页</a></li>
      <li><a href="{{ url_for('jobs_table') }}">工作</a></li>
      <li><a href="#">帮助</a></li>
    </ul>
  </div>
<div class="angry-grid">
    <form>
        <div class="header-div">SURPASS 图表</div>
        <div class="form-div">
            <div id="viewer_box" class="box"></div>
            <button id="show_hide" >显示/隐藏</button>
            <button id="rem" >移除</button>
            <button id="color" >颜色</button>
            <button id="zoom" >缩放</button>
        </div>
        <div class="plot-div">
            <svg  id="svg" 
                  xmlns="http://www.w3.org/2000/svg"
                  class="right" width="window.innerWidth" height="window.innerHeight">
            </svg>
        </div>

        <div class="footer-div">
            页脚
        </div>
    </form>
</div>
</body>
</html>

在页面中有一个SVG标签。

我希望这个标签可以自动获取浏览器窗口的尺寸。

因此,我写了:

<svg ... width="window.innerWidth" height="window.innerHeight" ...></svg>

然而,在浏览器的调试控制台中出现了错误:

错误: <svg> 属性 width:预期的长度,"window.innerWidth"。
如何解决这个错误?
英文:

Suppose, I have the following HTML page:

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;Protein Structure Analyzer&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;menu-strip&quot;&gt;
	&lt;ul&gt;
	  &lt;li&gt;&lt;a href=&quot;{{ url_for(&#39;index&#39;) }}&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;{{ url_for(&#39;jobs_table&#39;) }}&quot;&gt;Jobs&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Help&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
  &lt;/div&gt;
&lt;div class=&quot;angry-grid&quot;&gt;
	&lt;form&gt;
		&lt;div class=&quot;header-div&quot;&gt;SURPASS Plots&lt;/div&gt;
		&lt;div class=&quot;form-div&quot;&gt;
			&lt;div id=&quot;viewer_box&quot; class=&quot;box&quot;&gt;&lt;/div&gt;
			&lt;button id=&quot;show_hide&quot; &gt;Show/hide&lt;/button&gt;
			&lt;button id=&quot;rem&quot; &gt;Remove&lt;/button&gt;
			&lt;button id=&quot;color&quot; &gt;Color&lt;/button&gt;
			&lt;button id=&quot;zoom&quot; &gt;Zoom&lt;/button&gt;
		&lt;/div&gt;
		&lt;div class=&quot;plot-div&quot;&gt;
			&lt;svg  id=&quot;svg&quot; 
				  xmlns=&quot;http://www.w3.org/2000/svg&quot;
				  class=&quot;right&quot; width=&quot;window.innerWidth&quot; height=&quot;window.innerHeight&quot;&gt;
			&lt;/svg&gt;
		&lt;/div&gt;

		&lt;div class=&quot;footer-div&quot;&gt;
			Footer
		&lt;/div&gt;
	&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

There is an SVG tag in the page.

I want this tag to automatically acquire the dimension of the browser window.

Therefore, I wrote

&lt;svg ... width=&quot;window.innerWidth&quot; height=&quot;window.innerHeight&quot; ...&gt;&lt;/svg&gt;

However, this is raising error in the browser's debug console:

Error: &lt;svg&gt; attribute width: Expected length, &quot;window.innerWidt…&quot;.

How can I resolve this error?

答案1

得分: 2

尝试使用CSS:

<svg ... style="height: 100vh; width: 100vw" ...></svg>

或者,如果您在其周围有一个容器,您也可以使用100%。

英文:

Try it with CSS:

&lt;svg ... style=&quot;height: 100vh; width: 100vw&quot; ...&gt;&lt;/svg&gt;

Or if you have a container around it you could also use 100%

答案2

得分: 1

  1. Screen Size(我的屏幕尺寸为1920 x 1080像素)

  2. Browser Size(我的浏览器尺寸为1920 x 1040像素)

  3. Viewport Size(我的视口尺寸为1920 x 980像素)

要获取这些值集中的每一个,请使用...

  1. screen.widthscreen.height

  2. visualViewport.widthvisualViewport.height

  3. W.offsetWidthW.offsetHeight

注意:其中,“W”是窗口ID。

我知道你已经接受了SickerDude43的答案,但个人而言,我不会使用那种方法,因为浏览器可能在那一刻不是全屏,或者一些其他CSS样式可能会影响“100%”的真实含义。

在我给出的上述屏幕值集之一中使用,依我个人看来是更可靠的解决方案。

英文:

It depends on what you mean by "browser window" so let's get screen sizes cleared up first because there are actually three of them:

  1. Screen Size (mine is 1920 x 1080 pixels)

  2. Browser Size (mine is 1920 x 1040 pixels)

  3. Viewport Size (mine is 1920 x 980 pixels)

To get each of these sets of values use...

  1. screen.width and screen.height

  2. visualViewport.width and visualViewport.height

  3. W.offsetWidth and W.offsetHeight

NB: Where "W" is the window ID.

I know you've accepted the answer by SickerDude43, but I personally wouldn't use that method because the browser may not be full screen at that moment or some other CSS body styling affecting what "100%" really means.

Using one of the above sets of screen values I've given you, is a more robust solution IMHO.

huangapple
  • 本文由 发表于 2023年2月23日 21:49:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/75545699.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定