html - 全屏 svg 类似于适合对象的封面

标签 html css svg

我已经阅读了很多问题和教程,但仍然无法弄清楚如何正确地使 svg 占据全屏并覆盖它(就像你使用 object-fit: cover ,在我的例子中是 object-position: 0 ),所以没有可见的滚动条。我唯一设法得到的是一个不可滚动的全屏,其中包含可以放入其中的 svg 部分。

svg 位于 <object> 内,因为我需要链接才能工作。

<div class="map">
  <object class="fullscreen-map" type="image/svg+xml" data="europe3.svg">
    Your browser does not support SVG
  </object>
</div>

默认情况下,svg 本身没有 viewBox 并且有 width=1920height=1080 ,但我在尝试我发现的其他东西时也尝试包含一个具有相同尺寸的 viewBox。

Here's a link to the SVG I'm trying to get to fullscreen

到目前为止,我能想到的最好办法是围绕它设置 <object> 的样式,但它只会裁剪,甚至不会尝试缩放 SVG:

.fullscreen-map {
    position: absolute;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    min-width: 1020px;
    object-fit: cover;
    object-position: 0;
    font-family: 'object-fit: cover;';
    z-index: -1;
}

我可以通过在 img 标签中添加 SVG 来让它工作,但是我将无法点击其中的链接。

So here is the expected result 如您所见,如果您将视口(viewport)宽高比更改为不同于 16:9 的值,指向不同位置的链接的定位实际上不起作用。如果您有关于如何轻松实现的建议,我也很乐意听到他们的建议:)

谢谢你帮助我!

最佳答案

首先更改您的 CSS。删除 object-fitobject-position属性。

.fullscreen-map {
    position: absolute;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    min-width: 1020px;
    z-index: -1;
}

接下来,您需要修改您的 SVG。在根 <svg>标记,进行以下更改:

  1. 删除 widthheight属性。
  2. 添加以下属性:

    viewBox="0 0 1920 1080"
    preserveAspectRatio="xMinYMin slice"
    

您的 SVG 现在应该如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   viewBox="0 0 1920 1080"
   preserveAspectRatio="xMinYMin slice"
   id="svg3157"
   inkscape:version="0.92.1 r15371"
   sodipodi:docname="europe3.svg">
  <sodipodi:namedview
  ...etc...

preserveAspectRatio="xMinYMin slice"相当于你的 object-fit SVG 的设置。 viewBox是必需的,以便浏览器知道它需要多少来缩放 SVG 内容。

关于html - 全屏 svg 类似于适合对象的封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43348351/

相关文章:

html - 如何在向下滚动时调整导航栏 Logo 的大小

html - 移动后的 div 仍然占用原始空间吗?

javascript - gsap和css可以同时过渡吗?

svg - 如何从旋转/平移/缩放值计算 SVG 变换矩阵?

css - 使用 svg-url-loader 在 webpack 中加载 svg

html - 外部 CSS 高度不起作用

javascript - 哪个 HTML 标签 "support"背景色

css - 如何在特定列的所有行上放置网格中的奇数元素,在不同列上放置偶数元素?

html - 为 TextField 中的占位符设置样式

html - 以 SVG 作为数据 URL 的 CSS 背景在 Chrome 中不起作用