我正在构建一个WordPress主题,它有一个选项面板 . 在选项面板中,管理员可以上传将显示在页脚中的图标 .
上传图标时,管理员会将SVG和PNG版本上传到媒体上传器(例如icon.svg和icon.png) .
我在前端显示这个图标,如下所示:
<nav>
<?php if( have_rows('footer_icons', 'option') ): ?>
<ul>
<?php while( have_rows('footer_icons', 'option') ): the_row();
// Vars
$icon = get_sub_field('icon');
?>
<li>
<img src="<?php echo esc_url($icon); ?>" alt="icon" width="60" height="60">
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
</nav>
如果浏览器不支持SVG,有没有办法检测并显示内联png fallback(icon.png)?我知道Modernizr提供SVG检测,但我看不出它会提供这种级别的支持 .
2 回答
我会质疑是否有必要 . 浏览器对img标签中使用SVG的支持在全球范围内超过96% . 资料来源:http://caniuse.com/#feat=svg-img
如果绝对必要,将PNG URL作为数据属性添加到img标记,并将源设置为SVG文件 . 如果不支持SVG图像,则在Modernizr中加载并使用其特征检测将图像的源替换为PNG URL .
示例标记(假设已设置
$png_icon
):进一步阅读:
https://modernizr.com/docs
http://callmenick.com/post/svg-fallback-with-png(例子#4)
由于您确实在
<img>
标记中显示svg而不是问题 Headers 建议的内联,最简单的方法是使用onerror
事件处理程序: