web 图像技术:前端引入图片的各种方式及其优缺点
时间:2023-04-02 20:44:47
HTML
//css.element{background:url('cool.jpg');}多个背景来使用CSS背景图片的好处是可以设置多个背景。考虑以下示例:.element{background:url('cool-1.jpg'),url('cool-2.jpg');}隐藏图像如果未使用CSS图像设置,我们可以在特定视口中隐藏和显示图像,它不会被下载。这是使用
![]()
的额外好处。在上面的示例中,我们有一个背景图像,它仅在视口宽度大于700px时显示。可访问性问题如果使用不当,背景图像会影响可访问性。例如,将其用于文章主题,这对于文章来说是必不可少的。 非开发人员无法下载普通人都知道,如果要保存图像,只需左键单击并选择保存即可。CSS 背景图像不是这种情况,我们必须检查元素并在DevTools中打开url中的链接,然后才能下载添加了CSS的图像。伪元素伪元素可以与CSS背景图像一起使用,例如在图像顶部显示叠加层。对于
![]()
这是不可能的,直到我们为叠加层添加一个单独的元素。SVG
SVG被认为是图像,它最大的作用是缩放而不影响质量。此外,借助SVG,我们可以嵌入JPG、PNG或SVG图像。请参阅下面的HTML:你注意到prepareAspectRatio了吗?它所做的是允许图像占据SVG的整个宽度和高度,而不会被拉伸或压缩。当的宽度较大时,它将填充其父级(SVG)的宽度而不拉伸。这与CSS中的object-fit:cover或background-size:cover非常相似。辅助功能问题关于SVG辅助功能,这让我想起了元素。例如,我们可以这样添加:一张蓝莓芝士蛋糕的照片我们也可以使用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因为它不适用于图像。解决方案是用
/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已经收录,整理了很多我的文档。欢迎加星和改进。面试可以参考考点。也关注公众号,后台可以看到福利,你懂的。