gpt4 book ai didi

html - 为什么设置 View 宽度和高度不足以强制 SVG 元素的完整浏览器窗口呈现?

转载 作者:行者123 更新时间:2023-12-04 07:56:15 26 4
gpt4 key购买 nike

问题
我有以下 html,我试图在其中绘制一个 SVG 视口(viewport),其中包含我的浏览器窗口大小的行:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg"
style="outline: 5px solid red" width="100vw" height="100vh">
<line x1="0" y1="75%" x2="250" y2="50" stroke="black"/>
</svg>
</body>
</html>
但是,当我渲染 html 时,视口(viewport)似乎比我的浏览器窗口大,因为我必须滚动才能看到 SVG 视口(viewport)的完整范围,如下所示:
enter image description here
目标
我的目标是让视口(viewport)与我的浏览器窗口的大小完全相同,如下所示:
enter image description here
尝试使用边框
边框重新定义了 width包括填充、边框和边距。如果在边框框行为下宽度和高度设置为 100vw 和 100vh,则应包括整个浏览器窗口中的所有填充、边框和边距。但是,这似乎不起作用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
svg {
box-sizing: border-box;
outline: 5px solid red;
width: 100vw;
height: 100vh;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg">
<line x1="0" y1="75%" x2="250" y2="50" stroke="black" />
</svg>
</body>
</html>
添加 block 元素行为
根据 svg 的 act as inline elements by default 下面的答案之一.没关系,但只需包括 display: block在 css 中应该可以解决问题,但这不起作用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
svg {
box-sizing: border-box;
border: 5px solid red;
width: 100vw;
height: 100vh;
display: block;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg">
<line x1="0" y1="75%" x2="250" y2="50" stroke="black" />
</svg>
</body>
</html>
对某些答案的异议
  • 我不明白为什么要使用 %单位在这里是必不可少的。 %简单地提供相对于父元素的相对长度,在本例中为 body . vwvh提供相对于视口(viewport)窗口的长度,如 this link 中所述.在这个特定的应用程序中,我更关心视口(viewport)窗口而不是主体元素本身...
  • 我不明白为什么这里需要将 body 元素的边距设置为 0。 body 元素包含 svg block ,但由于 svg block 是根据 View 高度和宽度定义的,因此应该导致与 body 元素独立的宽度和高度行为。
  • 最佳答案

    带走margin对于body标签。

    body {
    margin: 0;
    }
    替换 svg的显示类型带有 border 的边框以免违反 svg的标称尺寸.将宽度设置为 width: 100% .并制作 svg通过设置 display: block 设置成 block 状.
    svg {
    display: block;
    border: 5px solid red;
    width: 100%;
    ...
    }

    body {
    margin: 0;
    }

    svg {
    display: block;
    box-sizing: border-box;
    border: 5px solid red;
    width: 100%;
    height: 100vh;
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    </head>
    <body>
    <svg xmlns="http://www.w3.org/2000/svg">
    <line x1="0" y1="75%" x2="250" y2="50" stroke="black" />
    </svg>
    </body>
    </html>

    要获得屏幕截图中的结果,请使用 calc() 设置高度函数减去 body 的上边距 - 8px 和下边距 - 8px标签等于 16 像素 :
    height: calc(100vh - 16px);

    svg {
    display: block;
    box-sizing: border-box;
    border: 5px solid red;
    width: 100%;
    height: calc(100vh - 16px);
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    </head>
    <body>
    <svg xmlns="http://www.w3.org/2000/svg">
    <line x1="0" y1="75%" x2="250" y2="50" stroke="black" />
    </svg>
    </body>
    </html>

    关于html - 为什么设置 View 宽度和高度不足以强制 SVG 元素的完整浏览器窗口呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66688871/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com