问:img和background-image区别是啥

4,868 阅读3分钟

背景

大家知道,我们想要显示一张图片,通常会用2种方法

  • img标签
  • 给div设置background-image

那么这两种方式的共同点在哪呢?他们又有什么区别呢?

img

属于html标签,基本用法如下:

<img src="./img/add.png"/>

Img标签不能添加文本内容,但是,它有一个alt属性。

  1. 当图片较大或网速较慢导致图像加载失败时,alt可以给我们一个提示
  2. 对于使用阅读器浏览网页的人来说,alt属性有助于辅助阅读
  3. alt属性有利于SEO
  4. 若图像显示区域大小固定,图像和预留空间宽高需要一致,否则图像可能会被拉伸/压缩

background-image

background-image是CSS属性,用于设置元素背景图片,基本用法如下所示

background-image: url('../../assets/images/palletCarding/xxxx.png')

区别

加载时机

img 比 background-image 先加载,因为img属于DOM元素,而渲染过程会先解析 DOM 树,再解析CSS文件

因此重要元素,如logo建议使用img, background-image 更适合作为 banner 轮播图、广告图。因为 banner 通常都是广告,可以晚点加载,避免占用带宽过多造成阻塞

图像渲染

我们在demo中添加了img标签和background-image,使用同一张图片显示

由图可知,img 即使不手动设置宽高,也会按照图片的原有宽高渲染出来

而background背景图依托于DOM元素,不能撑开元素,若不给div设置宽高,图片就不会渲染

image.png 此外,img的宽高设置可以直接改变图片显示大小,我们给img加上宽高试试

image.png background-image 可以配合背景图片相关属性,实现各种效果,比如雪碧图、平铺瓷砖等,这是 img 元素做不到的。

雪碧图是一种将多张图片拼接在一起的技术,可以减少网页加载时间

如下所示,现在我们用 background-position 属性指定背景图像的初始位置,从左边缘向左100px,从上边缘向下移动100px,这样就可以显示出雪碧图中的特定部分

image.png

SEO

SEO(Search Engine Optimization),利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。

搜索引擎更喜欢在网页初始化的时候,img标签与src的链接一起被加载出来。在SEO优化层面,img标签会比background背景图片更有优势

语义化

语义化:合理HTML标记以及其特有的属性去格式化文档内容,使得机器更容易理解数据和信息

显而易见,因为img是HTML标签,语义明确

图片保存

在浏览器中

  1. img 元素默认可以鼠标右键保存图片。但 background-image 不行。
  2. img标签渲染的图片,可以用鼠标轻松拖动到桌面实现下载

写在最后

我们需要区分不同场景选择合适的方式去渲染图像

  1. 一般来说,重要的图像或者需要优先加载的图片我们最好用 ;优先级次之的图片采用background
  2. img标签有利于SEO,img标签语义化明确
  3. img有利于图像保存