javascript - 在小屏幕上隐藏/显示图像
问题描述
我在前端使用 Angular material-2,我想为桌面和移动屏幕显示不同的图像
我的代码如下所示
<div class="banner">
<img [src]="images.desktopBanner"/>
<img [src]="images.mobileBanner"/>
</div>
我想在大型设备上显示 desktopBanner 图像,在小屏幕上显示 mobileBanner。
注意:使用媒体查询标记 display:none 不是最好的解决方案,因为这可能不会同时显示两个图像,但如果您检查网络调用,它仍然会下载两个图像。
解决方案
我建议你阅读这两篇文章:
这些文章的核心解释了<picture>
和的用例<img srcset="...">
。
本质上,如果您尝试以不同的质量级别显示相同的图像,这是一个响应性用例,您应该使用<img srcset="...">
:
<img
src="swing-400.jpg"
sizes="(max-width: 30em) 100vw, (max-width: 50em) 50vw, calc(33vw - 100px)"
srcset="swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w"
alt="Kettlebell Swing" />
如果您想展示非常不同的图像,您可能会谈论艺术指导,在这种情况下,这<picture>
是有道理的,因为:
为什么我们不能用 size/srcset 做艺术指导?
按照设计,sizes/srcset 语法考虑了视口的宽度以及屏幕的 DPR。将艺术指导添加到相同的语法中意味着 Web 开发人员必须在标记中明确指定所有 DPR 和视口宽度组合。
这会使 Web 开发人员的工作变得更加困难,并且会使语法更加难以掌握并且更加冗长。
所以语法类似于:
<picture>
<source media="(min-width: 45em)" srcset="large.jpg">
<source media="(min-width: 32em)" srcset="med.jpg">
<img src="small.jpg" alt="The president giving an award.">
</picture>
这两种解决方案都有很好的支持:除了 IE 之外的所有东西,以及一种回退到常规、非花哨渲染的方法。
推荐阅读
- java - 如何使用具有两列文本作为特征的 apache spark ML 训练逻辑回归?
- java - java无法从文件中读取一行
- python - Python while 循环与 !=0
- apache-kafka - 如何从kafka的主题中创建具有大量JSON字段的KSQL Stream?
- javascript - ...state 究竟做了什么?
- python - 对 2D numpy 数组进行切片、索引和迭代
- aws-fargate - aws fargate 和网络成本
- python - Matlab 相当于 Python Panda 的 dtypes
- php - 这是 PHP 中的一个不好的做法吗?
- r - 为实验的模拟试验创建 R 循环