html - 如何在 HTML5 中正确且响应式地缩放 SVG?

标签 html css svg

我想在同一个标​​题容器中包含页面 Logo 和导航 - Logo 位于左侧,导航容器位于右侧。如何使 SVG Logo 嵌入内联正确缩放以始终填充其容器(标题)高度和自动缩放宽度的 100% - 同时保持在容器的左侧? (我需要单独的 <div> 来包装 <svg> 容器吗?)

可能我必须设置 svg viewBox 属性,但我不确定如何做到这一点以确保它能够响应并在不同的分辨率下正确渲染)?

我的代码:

HTML:

<header id="page-header">

    <svg id="logo" 
         xmlns="http://www.w3.org/2000/svg">
         <path d="..."/><g></g>
    </svg>

    <nav id="page-nav">
          <a href="...">...</a>
          ...
    </nav>

</header>

CSS:

#page-header {
    height: 9em;
    padding: 0;
    margin: 0 0 6em 0;
}

#logo {
    padding: 0;
    width:600px;  //not working at all.

    vertical-align:top;
    float:left;

    display:inline-block;
}

#page-nav {
   float:right;
   ...
}

最佳答案

您应该首先设置 viewBox 属性,然后使 svg 中的所有尺寸都与其相关。当您分配 heightwidth (无论是在 svg 标签中还是在 css 中)时,您正在调整 svg 边界框的大小,而不是其中元素的大小。通过设置 viewBox,您可以让浏览器知道您希望图像包含在某个边界框中,然后当您调整宽度或高度时,它将相应地重新缩放。

viewBox 属性采用四个空格分隔的值 x y w h,其中 x 是边界框左侧的 x 坐标, y 是边界框顶部的 y 坐标,wh 是边界框的宽度和高度。

如果您想要 Logo 的方形边框,您可以执行以下操作:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <!-- your svg elements -->
</svg>

然后所有内容的大小都会相对于 100x100 边界框进行调整,因此,如果您想要在中心有一个圆,其宽度与边界框相同,您只需执行以下操作:

<circle cx="50" cy="50" r="50" fill="red"></circle>

然后,如果您使用 css 来制作 width: 100%;,您的圆圈将是容器的宽度而不是 50px。

这是一个fiddle that shows how changing each value of the viewBox affects the output 。希望有帮助。

关于html - 如何在 HTML5 中正确且响应式地缩放 SVG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666701/

相关文章:

html - 在 bootstrap 2 中将 div 的列与流体布局对齐

javascript - jQuery .click 在 if/else 语句中不起作用

javascript - D3js 按钮 onclick 函数可缩放特定时间范围内的图表

css - 当模态在 React 中可见时平滑过渡

css - 如果在页面上多次使用 id,浏览器的规则是什么?

javascript - 如何在 svg 元素中使用 z-index?

svg - Safari 麻烦定位 SVG feSpotlight 滤镜

javascript - 获取从 HTML 表单计算得出的 JavaScript 数据,并将其作为新元素添加到同一表单操作中以使用 PHP 保存

php - 检查 Javascript 并将其重定向到另一个页面

css - 覆盖谷歌地图在 jqm 中放置搜索框样式