【问题标题】:Fullscreen svg similar to object-fit cover全屏 svg 类似于适合对象的封面
【发布时间】:2017-04-12 19:11:43
【问题描述】:

我已经阅读了很多问题和教程,但仍然无法弄清楚如何正确地使 svg 占据全屏并覆盖它(就像您使用 object-fit: cover 和在我的情况下使用 @987654325 一样@),因此没有可见的滚动条。我唯一设法得到的是一个不可滚动的全屏,其中包含可以放入其中的 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

到目前为止,我能想到的最好的办法就是围绕它设置 &lt;object&gt; 的样式,但它只会裁剪,甚至不会尝试缩放 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 如您所见,如果您将视口纵横比更改为不同于 16:9 的值,则指向不同位置的链接的定位实际上并不起作用。如果您有如何轻松实施的建议,我也很高兴听到他们的建议:)

谢谢你帮助我!

【问题讨论】:

  • 创建一个minimal reproducible example,这样我们就可以看到你已经走了多远。
  • 我希望这就够了 (:
  • font-family: 'object-fit: cover;';??
  • 这适用于 Edge 和 IE,它们还不支持 object-fit,但是有一个 JQuery 插件可以处理这个问题,并且需要 font-family 属性中的信息。

标签: html css svg


【解决方案1】:

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

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

接下来,您需要修改 SVG。在根 &lt;svg&gt; 标记中,进行以下更改:

  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" 等同于 SVG 的 object-fit 设置。需要viewBox,以便浏览器知道缩放 SVG 内容需要多少。

【讨论】:

  • 只是一个简短的问题:如果我删除 &lt;object&gt; 并将 svg 放入具有相同类 fullscreen-map 的 div 中,preserveAspectRatio="xMinYMin slice" 不再做任何事情(它需要整个宽度,但相应地调整高度,保持纵横比)。这是为什么呢?
  • 您需要将该类添加到&lt;svg&gt;,而不是&lt;div&gt;。否则,如果没有任何指定的大小,SVG 将自己选择一个。它将从其父级 (100vw) 获取宽度,从宽度和 viewBox 纵横比 (ie. 100vw * 1080/1920) 获取高度。
  • 非常感谢您的回答,保罗!一切都很完美:)
  • 如果您需要缩放图像在可用视口中居中(作为img 将与object-fit: cover; 一起使用),使用xMidYMid 而不是xMinYMin 将实现此目的。
  • 谢谢,关于 SVG 的另一个奇怪的事情。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 2020-11-02
  • 2021-06-04
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多