2

我想创建使用 <image> 元素的与分辨率无关的 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 version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="640" height="480">
    <defs>
        <pattern id="test" patternUnits="userSpaceOnUse"
            x="0" y="0" width="130" height="100"
            viewBox="0 0 130 100" >
            <IF PIXEL RATIO = 2>
                <image xlink:href="test_2x.png" id="svg_1" height="100" width="130" y="0" x="0"/>
            <ELSE>
                <image xlink:href="test.png" id="svg_1" height="100" width="130" y="0" x="0"/>
            <END IF>
        </pattern> 
    </defs>
    <rect id="rectangle" stroke="rgb(29, 29, 255)"  fill="url(#test)" x="50" y="47" width="320" height="240" />
</svg>

我只在文档中找到了Switch Element ,但它似乎不是很有帮助,因为没有“视网膜显示”功能。或者有吗?:)

4

1 回答 1

3

您可以使用 CSS 媒体选择器来检测视网膜显示。使用 display 属性,您可以根据设备打开和关闭图像。

我手头没有 Apple Retina 设备可供测试,但我认为这样的事情应该可以工作:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="640" height="480">
  <style type="text/css">
    @media all {
      #test_2x_png {display:none}
    }
    @media (-webkit-min-device-pixel-ratio: 2) {
      #test_png    {display:none;}
      #test_2x_png {display:inline;}
    }
  </style>
  <defs>
    <pattern id="test" patternUnits="userSpaceOnUse"
        x="0" y="0" width="130" height="100"
        viewBox="0 0 130 100" >
          <image xlink:href="test_2x.png" height="100" width="130" y="0" x="0" id="test_2x_png"/>
          <image xlink:href="test.png" height="100" width="130" y="0" x="0" id="test_png"/>
    </pattern> 
  </defs>
  <rect id="rectangle" stroke="rgb(29, 29, 255)"  fill="url(#test)" x="50" y="47" width="320" height="240" />
</svg>
于 2012-12-27T15:59:02.697 回答