响应图像

2021-06-12 14:35:53

您应该已经知道HTML的基础知识以及如何将静态图像添加到网页。

了解如何使用SRCSet和<图片&gt等功能。在网站上实现响应图像解决方案的元素。

让'检查典型的情景。典型的网站可能包含标题下方的标题图像和一些内容图像。标题图像可能会跨越标题的整个宽度,并且内容图像将适合内容列内的某处。在这里'&一个简单的例子:

这适用于宽屏设备,例如笔记本电脑或桌面(您可以看到示例Live并查找GitHub上的源代码。)我们赢得了' T在本课程中讨论了CSS,除非如此:

身体内容已设置为1200像素的最大宽度 - 在高于该宽度的视口中,身体保持在1200px并在可用空间中居中。在低于该宽度的视口中,身体将保持在视口宽度的100%。

已经设置了标题图像,使其中心始终保持在标题的中心,无论标题是否设置为何种宽度。如果在较窄的屏幕上被观看了网站,则仍然可以看到图像中心(人)中的重要细节,并且多余的丢失在任何一方。这是200px高。

已经设置了内容图像,使得如果主体元素变得小于图像,则图像开始缩小,使得它们总是留在身体内,而不是溢出它。

但是,当您在狭窄的屏幕设备上查看网站时出现问题。下面的标题看起来正常,但它开始占据了移动设备的大量屏幕高度。并且在这种大小,很难看到第一个内容图像中的人。

改进是显示图像的图像的裁剪版本,该图像显示在狭窄屏幕上观看站点时显示图像的重要细节。可以为媒体宽度屏幕设备显示第二裁剪图像,如片剂。这通常被称为艺术方向问题。

此外,如果在移动屏幕上查看,则无需在页面上嵌入如此大的图像。并相反,当显示大于其原始尺寸时,小型光栅图像开始看起来颗粒状(光栅图像是宽的一组像素,并且当我们看着矢量图形时,我们看到的一定数量的像素数。这被称为分辨率切换问题。

相反,不需要在屏幕上显示大图像明显小于它的尺寸。这样做可以浪费带宽;特别是,移动用户不会通过下载用于桌面的大型图像来浪费带宽,当一个小型图像为他们的设备做。理想情况下,您将有多种可用的分辨率,并根据访问网站上数据的设备提供适当的大小。

为了使事物更复杂,一些设备具有高分辨率屏幕,需要更大的图像,它可能期望显示出很好。这基本上是相同的问题,但在略有不同的背景下。

您可能认为传染媒介图像将解决这些问题,并且他们在一定程度上做到了 - 它们在文件大小和比例中很小,并且您应该尽可能使用它们。但是,它们aren' t适用于所有图像类型。矢量图像非常适合简单的图形,模式,接口元素等,但它开始获得非常复杂的,以创建基于向量的图像,其中包含您和#39的详细信息。一张照片。栅格图像格式(如JPEG)更适合我们在上面示例中看到的图像类型。

这种问题没有存在,当网络首次存在时,在90年代早期 - 后退,那么唯一的设备浏览Web是桌面和笔记本电脑,所以浏览器工程师和规范作家没有' t甚至认为实施解决方案。最近实施了响应的图像技术来解决上面的问题,通过让您提供多个图像文件,无论是相同的还是包含不同数量的像素(分辨率切换),或适用于不同的空间分配的不同图像(技术方向) )。

注意:本文中讨论的新功能 - SRCSet /尺寸/<图片> - 全部支持现代桌面和移动浏览器的发布版本(包括Microsoft' SEDED浏览器,虽然不是Internet Explorer。)

在本节中,我们' ll看看上面说明的两个问题,并展示如何使用HTML'响应图像特征来解决它们。您应该注意到,我们将关注HTML< IMG> s为此部分,如上面示例的内容区域所示 - 站点标题中的图像仅用于装饰,因此使用CSS背景图像实现。 CSS可以说是与HTML的响应性设计有更好的工具,我们' LL谈论未来的CSS模块中的工具。

那么,我们想用解决方案切换解决的问题是什么?我们想展示相同的图像内容,根据设备略大或更小 - 这是我们在示例中具有第二个内容图像的情况。标准< img>元素传统上只允许您将浏览器指向单个源文件:

但是,我们可以使用两个新的属性 - SRCSet和大小 - 提供几个附加源图像以及提示来帮助浏览器挑选正确的源图像。您可以在Github上的响应中看到此示例。(另请参阅源代码):

SRCSet和尺寸属性看起来很复杂,但它们'如果您如上所示格式化它们,则无法理解,在每行上具有不同部分的属性值的不同部分。每个值包含逗号分隔的列表,这些列表的每个部分由三个子部分组成。让'■现在贯穿每个人的内容:

SRCSet定义了一组图像,我们将允许浏览器选择,以及每个图像的大小。每组图像信息由逗号与前一个图像信息分开。对于每个人,我们写道:

图像' s的内在宽度(480W) - 注意,这将使用W单位,而不是您可能期望的PX。这是图像' s实际尺寸,可以通过检查计算机上的图像文件(例如,在Mac上,您可以在Finder中选择图像,然后按CMD + I键调出信息屏幕)。

大小定义了一组媒体条件(例如屏幕宽度)并指示当某些媒体条件为真时最好选择的图像大小 - 这些是我们迄今讨论的提示。在这种情况下,在每次逗号之前写:

媒体条件((max-widey:600px)) - 您' ll在CSS主题中了解有关这些的更多信息,但现在让' s只是说媒体条件描述了屏幕可以的状态在这种情况下,我们正在说"当视口宽度为600像素或更少"

当媒体条件为真时,图像将填充图像的宽度(480px)

注意:对于插槽宽度,您可以提供相对于视口(VW)的绝对长度(PX,EM)或长度,但不是百分比。您可能已经注意到最后一个插槽宽度没有媒体条件(这是默认情况下选择的默认值为True)。浏览器在第一个匹配条件后忽略所有内容,因此请小心您订购媒体条件。

在尺寸列表中制定哪种媒体条件是第一个是真实的。

加载具有与插槽相同大小的SRCSet列表中引用的图像,或者如果有一个,则' t一个,第一图像大于所选插槽大小。

而且它'此时,如果具有视口宽度为480px的支持浏览器加载页面,则(max-width:600px)媒体条件将为真,因此浏览器选择480px插槽。 ELVA-FAIRY-480W.jpg将被加载,因为其固有宽度(480W)最接近插槽大小。 800px图片在磁盘上为128KB,而480px版本仅为63KB - 保存65KB。现在,想象一下,如果这是一个有很多图片的页面。使用此技术可以节省移动用户很多带宽。

注意:当使用桌面浏览器测试时,如果浏览器无法在当' vere将其窗口设置为最小的宽度时加载较窄的图像,请查看视口是什么(您可以通过进入近似浏览器' s javascript控制台和键入document.querySelector(' html#39;)。ClientWidth)。不同的浏览器的最小尺寸与它们' ll让您减少窗口宽度,并且它们可能比您宽'使用移动浏览器测试它时,您可以使用Firefox' s的工具,即:调试页面,以检查使用桌面开发人员工具在移动上加载的页面。要查看加载了哪些图像,您可以使用Firefox DevTools' s网络监视器标签。

Don' t支持这些功能的旧浏览器只会忽略它们。相反,这些浏览器将继续加载SRC属性中引用的图像作为正常。

注意:在< head>在上面链接的示例中,你' ll找到线< meta name =" viewport"内容="宽度=设备宽度"&gt ;:这强制移动浏览器采用它们的真实视口宽度加载网页(一些移动浏览器介绍它们的视口宽度,而是在更大的视口宽度加载页面然后缩小加载的页面,对响应图像或设计并不是很有用)。

如果您'重新支持多个显示分辨率,但每个人都在屏幕上以相同的实际尺寸看到图像,可以允许浏览器通过使用X描述符的SRCSet选择适当的分辨率映像,没有大小 - a有点简单的语法!您可以在srcset-solatutions中找到它的示例.html(另请参阅源代码):

在该示例中,将以下CSS应用于图像,使得屏幕上的320像素的宽度(也称为CSS像素):

在这种情况下,不需要大小 - 浏览器求出显示器的解决方案是它显示的,并且服务于SRCSet中引用的最合适的图像。因此,如果访问页面的设备具有标准/低分辨率显示,则使用表示每个CSS像素的一个设备像素,将加载ELVA-FAIRY-320W.jpg图像(暗示1倍,因此您不需要'需要要包括它。)如果设备具有每个CSS像素的两个设备像素的高分辨率,则将加载ELVA-FAIRY-640W.jpg图像。 640px图像为93KB,而320px图像仅为39KB。

为了回顾,艺术方向问题涉及想要更改显示的图像以适应不同的图像显示大小。例如,网页包括在桌面浏览器上观看时,使用中间的人拍摄大景观。在移动浏览器上查看时,相同的图像缩小,使图像中的人非常小而难以看。在移动设备上显示一个较小的肖像图像可能会更好,这会放弃在人身上。 <图片>元素允许我们仅实现这种解决方案。

返回我们的原始响应.html示例,我们有一个糟糕需要艺术方向的图像:

让' s用<图片>!像<视频>和<音频>,<图片>元素是包含多个<源&gt的包装器;为浏览器提供不同来源的元素从中选择,然后是全文< img>元素。响应中的代码如下所示:

<来源>元素包括包含媒体条件的媒体属性 - 与第一个SRCSet示例一样,这些条件是决定显示的图像的测试 - 将显示返回true的第一个返回的测试。在这种情况下,如果视口宽度为799px宽或更短,则第一个源>元素' S图像将显示。如果视口宽度为800px或更多,则它' ll是第二个。

SRCSet属性包含要显示图像的路径。就像我们用< img&gt所看到的那样;以上,<来源>可以使用多个映像引用的SRCSet属性以及大小属性。因此,您可以通过<图片和gt提供多个图像。元素,但随后还提供多个分辨率。实际上,你可能会赢得'想经常做这种事情。

在所有情况下,必须提供< img>元素,具有src和alt,右前< / picture>否则不会出现图像。这提供了默认情况下,当媒体条件返回true none时元素。

此代码允许我们在宽屏和窄屏幕显示屏上显示合适的图像,如下所示:

注意:您应该仅在艺术方向方案中使用媒体属性;当您使用媒体时,Don' t还提供大小属性内的媒体条件。

当浏览器开始加载页面时,它开始下载(预加载)在主解析器开始加载和解释页面' s css和javascript之前的任何图像。该机制通常用于减少页面加载时间,但对响应图像并不有用 - 因此需要实现SRCSet等解决方案。例如,您可以加载' t< img>元素,然后用JavaScript检测视口宽度,然后如果需要,然后将源图像动态地将源图像改变为较小的源图像。然后,原始图像已经加载,并且您也可以加载小图像,这在响应图像术语中甚至更差。

新的图像格式如WPP和AVIF可以同时保持低文件大小和高质量。这些格式现在具有相对广泛的浏览器支持,但很少"历史深度"

<图片>让我们继续迎合旧浏览器。您可以在类型属性中提供MIME类型,因此浏览器可以立即拒绝不受支持的文件类型:

在一个<来源>元素,您只能参考类型中声明的类型的图像。

对于这个积极的学习,我们'重新期待你勇敢,独自走去......大多是。我们希望您使用<图片>和使用SRCSet的分辨率切换示例来实现自己的合适艺术定向屏幕/宽屏镜头。

写一些简单的HTML来包含代码(如果您喜欢,请使用not-rencorly.html作为起点)。

找到一个漂亮的宽屏景观图像,其中包含某种细节。使用图形编辑器创建一个Web大小的版本,然后裁剪它以显示一个细节缩小的较小部分,并创建第二个图像(约480px宽对此)。

使用SRCSet / Size创建分辨率切换器示例,用于以不同的分辨率的相同尺寸图像,或在不同视口宽度下的不同图像大小。

你' ve达到了本文的末尾,但你还记得最重要的信息吗?您可以找到详细的评估,该评估在模块末尾测试这些技能;请参阅Mozilla Splash页面。

这是一个响应图像的包装 - 我们希望您喜欢使用这些新技术。作为回顾,我们在这里讨论了两个不同的问题:

艺术方向:您要为不同布局提供裁剪图像的问题 - 例如,显示桌面布局的完整场景的风景图像,以及显示主对象的纵向图像放大了移动布局。您可以使用<图片和gt来解决这个问题。元素。

分辨率切换:您希望为狭窄的屏幕设备提供较小的图像文件的问题,因为它们不需要桌面显示,并且还可以选择为高密度/低密度提供不同的分辨率图像屏幕。您可以使用矢量图形(SVG图像)和具有尺寸属性的SRCSet来解决此问题。

这也绘制了整个多媒体和嵌入模块的关闭!在继续前进之前现在唯一要做的是尝试我们的多媒体评估,并了解您的方式。玩得开心!