当前位置: 首页 > Web前端 > HTML

web 图像技术:前端引入图片的各种方式及其优缺点

时间:2023-04-02 20:44:47 HTML

网页图片技术:前端引入图片的各种方式及其优缺点已经收录在网站上,并且整理了更多往期好评文章,也整理了很多我的文档和教程资料.欢迎来到星和完美。面试时可参考考点复习。我希望我们能在一起。前端开发人员在构建网站时需要做出的决定之一是如何引入图像。它可以是标签,或通过CSS背景属性,或SVG。选择正确的一个很重要,对性能和可访问性有很大影响。在本文中,我们将了解引入图像的各种方法,以及每种方法的优缺点,以及何时以及为何使用它们。HTML元素在最简单的情况下,img元素必须包含src属性:在页面加载时设置宽度和高度属性,它们发生在页面图像加载时一些布局变化。为了避免这种情况,我们可以为它设置width和height属性:有用。让我们用图例来阐明这个概念:我们看到右边的图片虽然还没有加载,但仍然预留了空间?那是因为设置了宽度和高度。通过CSS隐藏图片可以使用CSS隐藏图片。但是,它仍会加载到页面中。所以这样做的时候要小心。如果应该隐藏图像,则可能是出于装饰目的。img{display:none;}同样,上面的代码不会阻止浏览器加载图像,即使它在视觉上是隐藏的。原因是被认为是一个替换元素,所以我们无法控制它加载的内容。大家都说简历里没项目可写,所以给大家找了一个项目,还给了一个【搭建教程】。Accessibility通过将alt属性设置为有意义的描述来发布AccessibleHTML图像,这对屏幕阅读器用户非常有帮助。但是,如果不需要alt描述,请不要删除它,如果这样做,图像src将被读出,这对可访问性非常不利。不仅如此,如果图像由于某种原因没有加载,并且它有一个清晰的alt,它将显示为后备。也通过图例来演示。假设我们有以下图像:当src无效,图片未加载时。第一个没有alt属性,而第二个有一个空的alt属性,它们在视觉上看起来是这样的:没有alt的图像仍然保留其空间,这令人困惑并且不利于访问。另一个带有空alt的图像会折叠成一个小点,因为它有边框。但是当alt属性有值时,它看起来像这样:这不是一个很好的反馈吗?此外,当图像源失败时,您可以向它们添加伪元素。响应式图像的美妙之处在于它可以缩放以针对特定视口尺寸缩放照片的多个版本。我们有两种不同的方法来生成一组响应式图片:1.srcset属性这个很简单。对我来说,srcset可以根据屏幕宽度显示多种图像尺寸,这不是一个完美的解决方案。它让浏览器选择合适的图像,而我们对此无能为力。2.图片标签另一种选择是使用元素。我更喜欢这种方式,因为它更容易预测。示例源代码:https://codepen.io/shadeed/pe...Resizingimages对于,我们还可以使用一组很好的特性object-fit和object-position。它们控制的大小和位置,就像CSS背景图像一样。object-fit值有:fill、contain、cover、none、scale-down。例如:img{object-fit:cover;物体位置:50%50%;}CSS背景图像当使用CSS背景显示图像时,它需要一个具有内容或特定宽度或高度的元素。一般来说,背景图像的主要用途应该是装饰目的。如何使用CSS背景图片首先,我们需要一个元素//htmlSomecontent

//css.element{background:url('cool.jpg');}多个背景来使用CSS背景图片的好处是可以设置多个背景。考虑以下示例:.element{background:url('cool-1.jpg'),url('cool-2.jpg');}隐藏图像如果未使用CSS图像设置,我们可以在特定视口中隐藏和显示图像,它不会被下载。这是使用的额外好处。在上面的示例中,我们有一个背景图像,它仅在视口宽度大于700px时显示。可访问性问题如果使用不当,背景图像会影响可访问性。例如,将其用于文章主题,这对于文章来说是必不可少的。 非开发人员无法下载普通人都知道,如果要保存图像,只需左键单击并选择保存即可。CSS 背景图像不是这种情况,我们必须检查元素并在DevTools中打开url中的链接,然后才能下载添加了CSS的图像。伪元素伪元素可以与CSS背景图像一起使用,例如在图像顶部显示叠加层。对于这是不可能的,直到我们为叠加层添加一个单独的元素。SVGSVG被认为是图像,它最大的作用是缩放而不影响质量。此外,借助SVG,我们可以嵌入JPG、PNG或SVG图像。请参阅下面的HTML:你注意到prepareAspectRatio了吗?它所做的是允许图像占据SVG的整个宽度和高度,而不会被拉伸或压缩。当的宽度较大时,它将填充其父级(SVG)的宽度而不拉伸。这与CSS中的object-fit:cover或background-size:cover非常相似。辅助功能问题关于SVG辅助功能,这让我想起了元素。例如,我们可以这样添加:<svgwidth="200"height="200"><title>一张蓝莓芝士蛋糕的照片我们也可以使用element一张蓝莓芝士蛋糕的照片关于图像的有意义的描述非开发者无法下载嵌入在SVG中的图像必须首先检查并复制图像的URL。但是,如果我们想阻止用户下载特定图像,这可能是一件好事。用例英雄部分在构建英雄部分时,有时我们需要标题下方的图像和其他内容。见下图:一些要求:背景图像可以动态更换图像有叠加层,使阅读更容易图像有三种尺寸:小、中、大。每一个都用于特定的视口。在我们找到解决方案之前,让我们问问自己这个背景的性质。以下是一些入门问题:为用户保留此图像是否重要,还是可以跳过?我们需要在所有视口尺寸上使用它吗?它是静态的还是动态变化的?解决方案1通过使用多个CSS背景,我们可以将一个背景作为叠加层,另一个作为实际图像。考虑以下CSS:背景-重复:不重复;background-size:100%,cover;}虽然此解决方案有效,但可以使用JavaScript动态更改背景图像。见下图:;">这里添加了一个内联样式。虽然这行得通,但它看起来很丑而且不实用。也许我们可以使用CSS变量?让我们探索一下。现在,我们可以轻松更新--bg-url动态改变背面的变量,这比内联的东西好一百万倍。总结:该方案只适用于图片不重要的情况。这种方案只适用于一些静态网站,因为图片不是从后台拉出来的。案例源码:https://codepen.io/shadeed/pe...大家都说简历不是写Project,我帮你找项目,还会给你一个【搭建教程】。解决方案2解决方案是使用img标签:使用

在CSS中,我们需要将图片绝对定位在内容下方,同时我们还需要使用一个伪元素作为覆盖..hero{位置:相对;}.heroimg{位置:绝对;左:0;顶部:0;z-指数:-1;宽度:100%;高度:100%;:之后{内容:“”;位置:绝对;左:0;顶部:0;z-指数:-1;宽度:100%;高度:100%;背景:rgba(0,0,0,0.4);这个解决方案的美妙之处在于可以轻松更改图像的src属性。此外,如果图像很重要,它会更有用。此外,我喜欢使用HTML的一个特性是能够在未加载图像时添加回退。后备至少保持内容的可读性。.heroimg{/*其他样式*/background:#2962ff;}当图片源路径错误时,背景颜色是一个备选方面。示例源码:https://codepen.io/shadeed/pe...WebsiteLogoWebsiteLogo非常重要,因为它可以将网站与其他网站区分开来。要嵌入徽标,我们有一些选项:*->png,jpg,orsvg内联SVG背景图像接下来,让我们看看哪种方式更合适。具有大量细节的徽标当徽标具有许多细节或形状时,将其用作嵌入式SVG可能没有好处。我推荐使用,图像类型可以是png、jpg或svg。需要动画的简单徽标我们有一个由形状和文本组成的简单徽标。悬停时形状和文本需要改变颜色。怎么做?对我来说最好的解决方案是使用嵌入式SVG。HTMLRectCSS.logorect,.logotext{transition:0.3sease-out;}.logo:hoverrect,.logo:hovertext{fill:#4a7def;}示例源代码:https://codepen.io/shadeed/pe...ResponseLogo这让我想起了SmashingMagazine的logo。我喜欢它如何从一个小图标变成一个完整的标志。请参见下面的模型:完美的解决方案是使用元素,您可以在其中添加两个版本的徽标。看起来像这样:在CSS中,我们需要将视口的宽度更改为等于或大于1350px。.logo{显示:内联块;宽度:45px;}@media(最小宽度:1350px){.logo{宽度:180px;}}这是简单明了的解决方案。示例源代码:https://codepen.io/shadeed/pe...带有渐变的徽标当徽标具有渐变时,从Illustrator或Sketch等设计应用程序导出它的过程可能并不完美,有时会中断。使用SVG,我们可以轻松地为我们的徽标添加渐变。我添加了并将其用作文本填充。Rect示例源代码:https://codepen.io/shadeed/pe...用户头像对于用户头像,它们有多种形状,但最常见的是矩形或圆形。在此用例中,介绍了一个对您有用的重要技巧。首先,让我们看看下面的模型。请注意,我们有一个完美的头像,它是100%清晰的。但是,当用户上传半白头像或非常浅的头像时,这种设计效果不佳。请注意,在上面的模型中,除非您真正关注它,否则您并不清楚其中是否有一个圆圈。这是个问题。为了解决这个问题,我们应该在头像内部添加一个边框,以防图像太亮而看不清。我们有几种选择元素
元素
vs.CSSbackgroundSVG哪个最好?让我们探索一下。对于HTML,您的第一个想法可能是添加边框,对吧?让我们探讨一下。.avatar{border:2pxsolid#f2f2f2;}我们的目标是让内边框和图片融为一体,不太实用。现在
元素的问题是要添加内边框我们不能使用box-shadow因为它不适用于图像。解决方案是用
包裹头像并添加一个专用于内边框的元素。HTML
/div>CSS.avatar-wrapper{位置:相对;宽度:150px;height:150px;}.avatar-border{position:absolute;左:0;顶部:0;宽度:100%;高度:100%;-半径:50%;border:2pxsolidrgba(0,0,0,0.1);通过在
上使用不透明度为10%的黑色边框,我们可以确保边框与暗图像融合,并且仅当图像仅在较亮的条件下可见。看下面的模型:示例地址:https://codepen.io/shadeed/pe...Using
withCSSbackground如果我要使用
来显示头像,这可能意味着图像是装饰性的。我记得一个用例,其中随机头像散布在整个页面中。]HTML
CSS.avatar{background:var(--img-url)center/cover;宽度:150px;高度:150px;边界半径:50%;box-shadow:inset0002pxrgba(#000,0.1);}示例地址:https://codepen.io/shadeed/pe...useSVG对我来说这是最有趣的解决方案。我在检查Facebook的新设计时注意到了它。首先分析一下,它包含以下内容:用于将图像切割成圆形(circle)的遮罩(mask)应用遮罩的groupimagehaspreserveAspectRatio="xMidYMid"used对于内边界圆的圆{stroke-width:2;行程:rgba(0、0、0、0.1);fill:none;}示例地址:https://codepen.io/shadeed/pe。..代码部署后,无法实时获知可能存在的bug。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://developers.google.com...交流文章每周更新。可以微信搜索“大千世界”阅读即时更新(比博文早一两篇)。这篇文章在GitHubhttps://github.com/qq449245884/xiaozhi已经收录,整理了很多我的文档。欢迎加星和改进。面试可以参考考点。也关注公众号,后台可以看到福利,你懂的。