前端开发人员在构建网站时需要做的一个决定是引入图片的方式。它可以是标签,或者是通过CSSbackground属性,还可以使用SVG
在本文中,我们会学习引入图像的各种方式,以及每种方式的优点和缺点,以及何时使用和为什么使用它们。
最简单的情况下,img元素必须包含src属性:
我们看到到右侧图片即使尚未加载仍保留了空间?那是因为设置了宽度和高度。
图像可以用CSS隐藏。但是,它仍将加载在页面中。因此,在执行此操作时请小心。如果一个图像应该被隐藏,那么它可能是出于装饰的目的。
img{display:none;}复制代码同样,上面的方法也不能阻止浏览器加载图像,即使它在视觉上是隐藏的。原因是被认为是一个被替换的元素,所以我们无法控制它所加载的内容。
通过将alt属性设置为有意义的描述,用来访问HTML图像,这对于屏幕阅读器用户非常有帮助。
然而,如果一个alt描述是不需要的,请不要删除它,如果你这样做,图像src将被读出,这对可访问性非常不利。
不仅如此,如果图像因为某种原因没有加载,并且它有一个清晰的alt,它将作为一个回退显示。同样通过图例来演示一下。
假设我们有以下图片:
没有alt的图片仍然保留了它的空间,这很混乱,而且不利于访问。而另一个alt为空的图片,会折叠起来看起来像一个小点,这里因为它有边框。
但是,当alt属性有值,它看起来是这样的:
这不是一个很好的反馈吗此外,当图像源失败时,可以向它们添加伪元素。
的优点在于可以针对特定视口大小将其扩展为具有多个版本的照片。我们有两种不同的方式来生成一组响应式图像:
1.srcset属性
2.picture标签
对于,我们还可以使用的一组很好的特性object-fit和object-position。它们可以控制
的大小和定位,就像CSS背景图像。
object-fit值有:fill,contain,cover,none,scale-down。例如:
img{object-fit:cover;object-position:50%50%;}复制代码CSS背景图片使用CSS背景显示图像时,它需要一个具有内容或特定宽度或高度的元素。通常,背景图像的主要用途应该是用于装饰目的。
首先,我们需要一个元素
//html
.element{background:url('cool-1.jpg'),url('cool-2.jpg');}复制代码隐藏图像我们可以在特定视口中隐藏和显示图像,如果未使用CSS设置图片,则不会下载该图片。与使用相比,这是一个额外的好处。
在上面的示例中,我们有一个背景图像,仅在视口宽度大于700px时显示。
####非开发人员无法下载
普通人知道,如果要保存图像,只需单击鼠标左键,然后选择保存即可。CSS背景图片并非如此,我们必须先检查元素,然后在DevTools中的url中打开链接,然后才能下载随CSS添加的图像。
可以将伪元素与CSS背景图像一起使用,例如在图像顶部显示覆盖图。对于这是不可能的,直到我们为叠加层添加单独的元素。
SVG被认为是一种图像,它最大的功能是在不影响质量的情况下进行缩放。此外,使用SVG,我们可以嵌入JPG、PNG或SVG图像。参见下面的HTML:
当
这非常类似于CSS中的object-fit:cover或background-size:cover。
关于SVG的可访问性,这使我想起了
在构建herosection时,有时我们需要在标题和其他内容下方的图像。参见下图:
一些要求:
在开始解决方案之前,让我们先问问自己这种背景的性质。这是一些入门问题:
通过使用多个CSS背景,我们可以将一个背景作为叠加层,将另一个背景作为实际图像。请看下面的CSS:
.hero{background-image:linear-gradient(rgba(0,0,0,0.4),rgba(0,0,0,0.4)),var('landscape.jpg');background-repeat:no-repeat;background-size:100%,cover;}复制代码虽然此解决方案有效,但可以使用JavaScript动态更改背景图片。见下面:
也许我们可以使用CSS变量?让我们来探索一下。
小结:
该方案是可以使用一个img标签:
.hero{position:relative;}.heroimg{position:absolute;left:0;top:0;z-index:-1;width:100%;height:100%;object-fit:cover;}.hero:after{content:"";position:absolute;left:0;top:0;z-index:-1;width:100%;height:100%;background:rgba(0,0,0,0.4);}复制代码此解决方案的优点在于,可以轻松更改图片的src属性。同样,如果图像很重要,它将会更加有用。
另外,我喜欢使用HTML的功能是能够在未加载图片的情况下添加回退。回退至少可以使内容保持可读性。
网站Logo是很重要的,因为它可以将网站与其他网站区分开。要嵌入徽标,我们有一些选择:
*->png,jpg,orsvg
接下来,我们来看看哪种方式更合适。
当徽标具有许多细节或形状时,将其用作嵌入式SVG可能没有好处。我建议使用,图像类型可以是png,jpg或svg。
我们有一个简单的logo,其中包含形状和文字。悬停时,形状和文本需要更改颜色。怎么做?对我来说最好的解决方案是使用嵌入式SVG。
HTML
这让我想起了SmashingMagazine的logo。我喜欢它从一个小图标变成一个完整的徽标。参见下面的模型:
完美的解决方案是使用
.logo{display:inline-block;width:45px;}@media(min-width:1350px){.logo{width:180px;}}复制代码这是简单而直接的解决方案。
当logo具有渐变时,从Illustrator或Sketch等设计应用程序将其导出的过程可能并不完美,有时会中断。
使用SVG,我们可以轻松地为logo添加渐变。我添加了
对于用户头像,它们具有很多形状,但最常见的是矩形或圆形。在此用例中,会介绍一个对你有用的重要技巧。
首先,让我们看下面的模型。请注意,我们有一个完美的化身,并且100%清晰。
但是,当用户上传半白色头像或非常浅的头像时,这个设计就不太好了。
请注意,在上面的模型中,除非真正专注看,否则尚不清楚其中是否有一个圆圈。这是一个问题。为了解决这个问题,我们应该在头像内添加边框,以防图像太亮看不清除。
我们有几个选择
哪一个最好?我们来探索探索。
你可能首先想到的是添加一个边框,对吧让我们来探讨一下这个问题。
现在的问题是,要添加内部边框,我们不能使用box-shadow,因为它无法在图像上使用。解决方案用