Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 我是否使用<;img>&书信电报;对象>;,或<;嵌入>;对于SVG文件?_Html_Svg_Vector Graphics - Fatal编程技术网

Html 我是否使用<;img>&书信电报;对象>;,或<;嵌入>;对于SVG文件?

Html 我是否使用<;img>&书信电报;对象>;,或<;嵌入>;对于SVG文件?,html,svg,vector-graphics,Html,Svg,Vector Graphics,我应该使用、或将SVG文件加载到页面中,加载方式类似于加载jpg、gif或png 为确保其尽可能好地工作,每个项目的代码是什么?(在我的研究中,我看到了包括mimetype或指向备用SVG渲染器的参考资料,但没有看到一个良好的最新参考资料) 假设我正在检查SVG对非支持SVG的浏览器的支持,并且正在回退(可能使用普通的标记进行替换)。我可以推荐SVG入门(由W3C发布),它涵盖了以下主题: 如果您使用,则可以免费获得光栅回退*: <object data="your.svg" type="

我应该使用
将SVG文件加载到页面中,加载方式类似于加载
jpg
gif
png

为确保其尽可能好地工作,每个项目的代码是什么?(在我的研究中,我看到了包括mimetype或指向备用SVG渲染器的参考资料,但没有看到一个良好的最新参考资料)


假设我正在检查SVG对非支持SVG的浏览器的支持,并且正在回退(可能使用普通的
标记进行替换)。

我可以推荐SVG入门(由W3C发布),它涵盖了以下主题:

如果您使用
,则可以免费获得光栅回退*:

<object data="your.svg" type="image/svg+xml">
  <img src="yourfallback.jpg" />
</object>
注意:多背景策略在Android 2.3上不起作用,因为它支持多背景,但不支持svg


svg回退是另外一个好的读物。

从IE9及以上版本,您可以在普通的IMG标记中使用svg


有一个有趣的属性:它们使从外部文档获取对SVG文档的引用成为可能(考虑到同源策略)。然后,该引用可用于设置SVG动画、更改其样式表等

给定


然后你可以做类似的事情

document.getElementById("svg1").addEventListener("load", function() {
    var doc = this.getSVGDocument();
    var rect = doc.querySelector("rect"); // suppose our image contains a <rect>
    rect.setAttribute("fill", "green");
});
document.getElementById(“svg1”).addEventListener(“加载”,函数(){
var doc=this.getSVGDocument();
var rect=doc.querySelector(“rect”);//假设我们的图像包含
rect.setAttribute(“填充”、“绿色”);
});

找到了一个使用纯CSS且无需下载双图像的解决方案。它不是我想要的那么漂亮,但它很管用

<!DOCTYPE html>
<html>
  <head>
    <title>HTML5 SVG demo</title>
    <style type="text/css">
     .nicolas_cage {
         background: url('nicolas_cage.jpg');
         width: 20px;
         height: 15px;
     }
     .fallback {
     }
    </style>
  </head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
    <style>
    <![CDATA[ 
        .fallback { background: none; background-image: none; display: none; }
    ]]>
    </style>
</svg>

<!-- inline svg -->
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40">
  <switch>
     <circle cx="20" cy="20" r="18" stroke="grey" stroke-width="2" fill="#99FF66" />
     <foreignObject>
         <div class="nicolas_cage fallback"></div>
     </foreignObject>
  </switch>
</svg>
<hr/>
<!-- external svg -->
    <object type="image/svg+xml" data="circle_orange.svg">
        <div class="nicolas_cage fallback"></div>
    </object>
</body>
</html>

HTML5 SVG演示
尼古拉斯·尤凯奇先生{
背景:url('nicolas_cage.jpg');
宽度:20px;
高度:15px;
}
.撤退{
}

其思想是插入具有回退样式的特殊SVG

您可以在中找到更多详细信息和测试过程。

如果使用标记,则基于webkit的浏览器将不会显示嵌入的位图图像

对于任何类型的高级SVG使用,包括SVG内联,都提供了迄今为止最灵活的灵活性

Internet Explorer和Edge将正确调整SVG的大小,但必须同时指定高度和宽度

您可以在svg内部将onclick、onmouseover等添加到svg中的任何形状:onmouseover=“top.myfunction(evt);”

您还可以在SVG中使用web字体,方法是将它们包含在常规样式表中

注意:如果您从Illustrator导出SVG,web字体名称将是错误的。您可以在CSS中纠正这一点,避免在SVG中弄乱。例如,Illustrator为Arial提供了错误的名称,您可以这样修复它:

所有这些都适用于自2013年以来发布的任何浏览器

有关示例,请参见。除联系人表单外,整个网站都由SVG组成


警告:在Safari中,Web字体的大小调整不准确-如果您有大量从纯文本到粗体或斜体的转换,则转换点可能会有少量额外或缺少的空间。有关更多信息,请参见我的答案。

最好的选择是在不同的设备上使用SVG图像:)


使用
srcset
Most,允许为不同的用户指定不同的图像。例如,您可以将其用于1x和2x像素密度,浏览器将选择正确的文件

在这种情况下,如果您在
srcset
中指定了一个SVG,而浏览器不支持它,它将返回
src

<img src="your-svg-image.svg" alt="Your Logo Alt" onerror="this.src='your-alternative-image.png'">

与其他解决方案相比,此方法有几个优点:

  • 它不依赖任何奇怪的黑客或脚本
  • 很简单
  • 您仍然可以包含alt文本
  • 支持
    srcset
    的浏览器应该知道如何处理它,以便它只下载所需的文件

  • 此jQuery函数捕获svg图像中的所有错误,并用备用扩展名替换文件扩展名

    请打开控制台查看加载图像svg时出现的错误

    (函数($){
    $('img')。在('error',function()上{
    var image=$(this.attr('src');
    if(/(\.svg)$/i.test(图像)){
    $(this.attr('src',image.replace('.svg','.png'));
    }
    })  
    })(jQuery)
    
    我个人会使用
    标签,因为如果你这样做,你就可以完全控制它。如果您在
    中使用它,您就无法用CSS等控制SVG的内部

    另一件事是

    只需打开
    svg
    文件并将其直接粘贴到模板中

    <img src="logo.png" srcset="logo.svg" alt="My logo">
    

    一些资源:

    如果你需要你的SVG完全可以用CSS进行样式化,它们必须在DOM中内联。这可以通过SVG注入实现,SVG注入使用Javascript替换HTML元素(通常是
    
    
    加载图像后,
    onload=“SVGInject(this)
    将触发注入和
    属性。这适用于所有支持SVG的浏览器


    免责声明:我是SVGInject的合著者。我的两分钱:截至2019年,使用中的93%的浏览器(以及每种浏览器的最后两个版本的100%)可以在
    元素中处理SVG:

    资料来源:

    所以我们可以说没有理由再使用

    然而它仍然有它的优点

    • 检查时(例如,使用Chrome Dev工具),您会看到整个SVG标记,以防您想对其稍加修改并看到实时更改。

    • <!DOCTYPE html> <html> <head> <title>HTML5 SVG demo</title> <style type="text/css"> .nicolas_cage { background: url('nicolas_cage.jpg'); width: 20px; height: 15px; } .fallback { } </style> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" width="0" height="0"> <style> <![CDATA[ .fallback { background: none; background-image: none; display: none; } ]]> </style> </svg> <!-- inline svg --> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40"> <switch> <circle cx="20" cy="20" r="18" stroke="grey" stroke-width="2" fill="#99FF66" /> <foreignObject> <div class="nicolas_cage fallback"></div> </foreignObject> </switch> </svg> <hr/> <!-- external svg --> <object type="image/svg+xml" data="circle_orange.svg"> <div class="nicolas_cage fallback"></div> </object> </body> </html>
    @font-face {    
        font-family: 'ArialMT';    
        src:    
            local('Arial'),    
            local('Arial MT'),    
            local('Arial Regular');    
        font-weight: normal;    
        font-style: normal;    
    }
    
    <img src="your-svg-image.svg" alt="Your Logo Alt" onerror="this.src='your-alternative-image.png'">
    
    <img src="logo.png" srcset="logo.svg" alt="My logo">
    
    <svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3400 2700" preserveAspectRatio="xMidYMid meet" (click)="goHome();">
      <g id="layer101">
        <path d="M1410 2283 c-162 -225 -328 -455 -370 -513 -422 -579 -473 -654 -486 -715 -7 -33 -50 -247 -94 -475 -44 -228 -88 -448 -96 -488 -9 -40 -14 -75 -11 -78 2 -3 87 85 188 196 165 180 189 202 231 215 25 7 129 34 230 60 100 26 184 48 185 49 4 4 43 197 43 212 0 10 -7 13 -22 9 -13 -3 -106 -25 -208 -49 -102 -25 -201 -47 -221 -51 l-37 -7 8 42 c4 23 12 45 16 49 5 4 114 32 243 62 129 30 240 59 246 66 10 10 30 132 22 139 -1 2 -110 -24 -241 -57 -131 -33 -240 -58 -242 -56 -6 6 13 98 22 107 5 4 135 40 289 80 239 61 284 75 307 98 14 15 83 90 153 167 70 77 132 140 139 140 7 0 70 -63 141 -140 70 -77 137 -150 150 -163 17 -19 81 -39 310 -97 159 -41 292 -78 296 -82 8 -9 29 -106 24 -111 -1 -2 -112 24 -245 58 -134 33 -245 58 -248 56 -6 -7 16 -128 25 -136 5 -4 112 -30 238 -59 127 -29 237 -54 246 -57 11 -3 20 -23 27 -57 6 -28 9 -53 8 -54 -1 -1 -38 7 -81 17 -274 66 -379 90 -395 90 -16 0 -16 -6 3 -102 11 -57 21 -104 22 -106 1 -1 96 -27 211 -57 115 -31 220 -60 234 -66 14 -6 104 -101 200 -211 95 -111 175 -197 177 -192 1 5 -40 249 -91 542 l-94 532 -145 203 c-220 309 -446 627 -732 1030 -143 201 -265 366 -271 367 -6 0 -143 -183 -304 -407z m10 -819 l-91 -161 -209 -52 c-115 -29 -214 -51 -219 -49 -6 1 32 55 84 118 l95 115 213 101 c116 55 213 98 215 94 1 -3 -38 -78 -88 -166z m691 77 l214 -99 102 -123 c56 -68 100 -125 99 -127 -4 -3 -435 106 -447 114 -4 2 -37 59 -74 126 -38 68 -79 142 -93 166 -13 23 -22 42 -20 42 2 0 101 -44 219 -99z"/>
        <path d="M1126 2474 c-198 -79 -361 -146 -363 -147 -2 -3 -70 -410 -133 -805 -12 -73 -20 -137 -18 -143 2 -6 26 23 54 63 27 40 224 320 437 622 213 302 386 550 385 551 -2 2 -165 -62 -362 -141z"/>
        <path d="M1982 2549 c25 -35 159 -230 298 -434 139 -203 283 -413 319 -465 37 -52 93 -134 125 -182 59 -87 83 -109 73 -65 -5 20 -50 263 -138 747 -17 91 -36 170 -42 176 -9 8 -571 246 -661 280 -14 6 -7 -10 26 -57z"/>
        <path d="M1679 1291 c-8 -11 -71 -80 -141 -153 l-127 -134 -95 -439 c-52 -242 -92 -442 -90 -445 6 -5 38 28 218 223 l99 107 154 0 c85 0 163 -4 173 -10 10 -5 78 -79 151 -162 73 -84 136 -157 140 -162 18 -21 18 4 -2 85 -11 46 -58 248 -105 448 l-84 364 -87 96 c-108 121 -183 201 -187 201 -2 0 -10 -9 -17 -19z m96 -488 c33 -102 59 -189 57 -192 -2 -6 -244 -2 -251 4 -5 6 120 375 127 375 4 0 34 -84 67 -187z"/>
        </g>
      </svg>
    
    svg {
      fill: red;
    }
    
    <html>
    <head>
      <script src="svg-inject.min.js"></script>
    </head>
    <body>
      <img src="image.svg" onload="SVGInject(this)" />
    </body>
    </html>
    
    <svg viewBox="" width="" height="">
    <path fill="#xxxxxx" d="M203.3,71.6c-.........."></path>
    </svg>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="350" height="350" viewBox="0 0 350 350">
    
      <title>SVG 3 Circles Intersection </title>
    
        <circle cx="110" cy="110" r="100"
                stroke="red"
                stroke-width="3"
                fill="none"
                />
        <text x="110" y="110" 
              text-anchor="middle"
              stroke="red"
              stroke-width="1px"
              > Label
        </text>
        <circle cx="240" cy="110" r="100" 
                stroke="blue" 
                stroke-width="3"
                fill="none"
                />
        <text x="240" y="110" 
              text-anchor="middle" 
              stroke="blue" 
              stroke-width="1px"
              > Ticket
        </text>
        <circle cx="170" cy="240" r="100" 
                stroke="green" 
                stroke-width="3" 
                fill="none"
                />
        <text x="170" y="240" 
              text-anchor="middle" 
              stroke="green" 
              stroke-width="1px"
              > Vecto
        </text>
    </svg>
    
    https://svgshare.com/i/RJV.svg
    
    <img src="https://svgshare.com/i/KJV.svg"/>
    
    <svg>
        <g> 
            <path> </path>
        </g>
    </svg>
    
    <embed src="logo.svg" style="width:100%; height:180px" type="image/svg+xml" />
    
    <svg style="width:100%">
        <use xlink:href="logo.svg#logo"></use>
    </svg>