HTML - 请你谈一谈img标签图片和background背景图片的区别

 难度级别:中级及以上                                 提问概率:65%


面试官当然不会问如何使用img标签或者background来加载一张图片,这些知识点都很基础,相信只要从事前端开发一小段时间以后,就可以轻松搞定加载图片的问题。但很多人习惯用img标签,很多人习惯用background背景,那么在加载图片的时候,他们有哪些区别呢,什么情况下该用哪一个呢?

1 对容器的要求

虽然两种方式都能显示图片,但日常开发中,img标签即便在不设置宽高的情况下,依然可以将图片渲染出来,只不过我们为了更完美的布局,为其设置一定的显示区域。而background背景图片更依托于DOM元素,如果元素是行内元素,或者未设置宽高,图片则不能被渲染出来。

另外,img标签的宽高设置可以直接改变图片的显示大小,但background背景属性则需要依赖更多的CSS属性设置。但属性复杂也为我们的网页渲染带来了更多的效果,例如background-size可以设置图片的尺寸,或者相对于自身DOM元素的宽高适应情况;例如background-repeat可以设置图片是否平铺渲染;例如background-position可以设置图片的渲染坐标等,这些功能都是img标签所不具备的,这也使得background这个CSS复合属性具有更加灵活的功能,在网页开发中,更加灵活可用的功能,不正是我们所需要的嘛。

 

2 对页面渲染的影响

img标签属于DOM元素,而background这个CSS属性最终会做为CSS文件,嵌入网页中。我们知道网页的渲染,是DOM树和CSS样式的结合,所以,如果使用img标签来渲染图片的话,很显然,不需要等待CSS的加载,浏览器从上到下解析到img标签的时候,再请求图片即可完成这项任务;但如果是background背景图片的话,则需要先下载CSS文件,然后浏览器解析CSS文件,而后找到对应的图片链接,再请求图片,还要做CSS样式与DOM元素的对接,从而完成这项任务。

这样看来,使用background背景图片的方式,比直接使用img标签渲染图片过程要复杂的多。尤其是遇到弱网情况,使用img标签来加载图片要更有优势。

 

3 不希望用户轻松获取图片

相信大家都有这样的经历,我们在访问网页的时候,遇到自己喜欢的图片,使用img标签渲染的图片,可以用鼠标轻松拖动到桌面,这也就实现轻松实现了图片的下载;但使用background背景渲染的图片,却无法将图片用鼠标拖动到桌面。

这样就可以为我们的网页图片做一种保护手段,来决定是否可以让用户轻松获取图片。但这恐怕只能做为一种针对外行人员的保护手段,因为我们知道,通过F12打开浏览器的控制台,还是可以看到图片链接的。

 

4 对SEO的影响

大家不断对网站进行SEO优化,是希望自己的网站更容易被搜索引擎抓取,从而使自己获得更多的流量。在SEO优化手段中,图片优化也是一个重要环节。而搜索引擎更喜欢抓取静态的网页片段,相比之下,如果你想对网页做图片SEO优化,background背景图片做为一种样式,属于后期动态与DOM树结合起来渲染到网页中的图片,并不能被搜索引擎抓取到。即便是使用Javascript动态为img标签的src属性赋值也不行,搜索引擎更喜欢在网页初始化的时候,img标签与src的链接一起被加载出来。这样看来,在SEO优化层面,img标签会比background背景图片更有优势,同时img标签加载图片的方式也更符合HTML语义化标准。

 

5 样式与数据的区分

在前端开发的世界里,图片既可以做为一种样式,同时也可以被理解为一种数据的展示。当做为样式的时候,更建议使用background背景图片的方式,例如常见的小图标、弹框背景图、按钮背景装饰图、登录页背景图等,这些图片都是为了起到一定的装饰作用,为了锦上添花;而做为数据的时候,更建议使用img标签的方式,例如logo、轮播图、商品封面、广告图片等,这些图片都占有非常重要的地位,用户可以根据这种图片第一眼感知到商家想要表达的意思,所以这种图片更是以一种数据元素出现的,而非装饰元素。

经过以上对比,分析出了img图片和background背景样式图片各自适用的场景,所以并不能一概而论哪种方式更好,更不能在开发中一直单一的使用某一种方式,需要根据不同的场景来综合决定哪种方式更适用。


刷题思考

    这道题还不像iframe那道题,而是从加载图片入手。这属于典型的知识点常用到延伸的题目,面试官一般会先从常用的知识点入手,逐渐延伸性的去考察周边相关的问题,这体现了一名中级及以上级别的开发工程师,在日常开发工作以外,是否有总结和思考的好习惯。


类似考点

    这道题说到了加载图片,其实前端网页之所以绚烂多彩,图片功不可没,所以与图片相关的题目一定要多准备,例如请你说一说,你是如何在网站中使用懒加载的?例如请说一说你所知道的图片格式,分别用于哪种场合更适合等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MFC通用静态库制作与使用

开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…

HarmonyOS 应用开发之通过数据管理服务实现数据共享静默访问

场景介绍 典型跨应用访问数据的用户场景下,数据提供方会存在多次被拉起的情况。 为了降低数据提供方拉起次数,提高访问速度,OpenHarmony提供了一种不拉起数据提供方直接访问数据库的方式,即静默数据访问。 静默数据访问通过数据…

基于Python+Tkinter实现一个贪食蛇小游戏

你是否还记得那个时代,当我们的手机还没有触摸屏,游戏也只有像“贪食蛇”这样的经典款?当时,许多人都沉迷于控制一条小蛇吃食物的乐趣中。而今,让我们利用Python和Tkinter,一起重温那个时代,制作…

程序汪10万接的多平台视频分发项目,模拟人工发视频

本项目来自程序汪背后的私活小团队,开发了一个多平台分发视频项目,给粉丝分享一下解决方案和具体项目分开情况付款情况等等细节,希望给想接私活的朋友一些经验参考 程序汪10万接的多平台视频分发项目,模拟人工发视频 视频版本 在 …

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…

redis发布订阅模式

需要两个终端。 首先我们打开第一个终端,使用SUBSCRIBE命令来订阅一个频道。 打开另一个终端,发布信息使用PUBLISH,后面加上频道的名称和消息的内容 返回去看第一个终端 订阅频道的终端可以有多个。但是订阅频道有一些局限性,比如…

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注:PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

展馆设计中融入数字化和智能化元素

一、多媒体技术的应用 展馆设计公司可以通过应用多媒体技术,为展馆创造一个数字化和互动式的环境。利用投影技术、触摸屏和交互式设备,可以实现展示内容的多样化和互动式展示。通过数字化的展示方式,观众可以更加深入地了解和体验展示内容&am…

【HTML】注册页面制作 案例二

(大家好,今天我们将通过案例实战对之前学习过的HTML标签知识进行复习巩固,大家和我一起来吧,加油!💕) 案例复习 通过综合案例,主要复习: 表格标签,可以让内容…

基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:本文详细介绍基于YOLOv8/v7/v6/v5的危险物品检测技术。主要采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法,进行了细致的性能指标对比分析。博客详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码…

3D打印模型检查清单

创建 3D 打印模型一开始可能会有些令人生畏。 在这篇博文中,我们将介绍设计师应牢记的一些基本技巧,以获得令人惊叹的 3D 打印效果。 遵守此清单将确保你的 3D 模型为 3D 打印做好充分准备。 1、水密/非流形 可打印模型的表面不得有任何孔。 问自己一个…

漂亮哇塞的可视化大屏页面该如何设计?

要提升可视化界面的设计美观度,可以从以下几个方面入手: 使用高质量的图片和素材:使用高质量的图片和素材可以让界面更加美观。可以选择高清晰度的图片和素材,使得整个界面的质感更加高端。突出重点:在界面设计中&…

Vue3:Pinia简介及环境搭建

一、简介 Pinia是Vue3中的状态管理工具,类似与Vue2中的Vuex框架的作用 二、环境搭建 1、安装 npm install pinia2、配置 main.ts import {createApp} from vue import App from ./App.vue // 第一步:引入pinia import {createPinia} from piniacons…

与谷歌“分家”两年后,SandboxAQ推出统一加密管理平台

3月27日,SandboxAQ宣布其AQtive Guard平台现已全面可用(GA),适用于所有行业,以防范人工智能驱动和量子攻击的威胁。前者是在两年前3月从谷歌母公司Alphabet分拆出来的初创公司,并在当时获得了“九位数”的融…

Mybatis——一对多关联映射

一对多关联映射 一对多关联映射有两种方式,都用到了collection元素 以购物网站中用户和订单之间的一对多关系为例 collection集合的嵌套结果映射 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import java.util.List;Data public cla…

Canvas实现简易数字电子时钟(带自定义样式)

前置内容 Canvas实现简易数字电子时钟 Canvas实现数字电子时钟&#xff08;带粒子掉落效果&#xff09; 效果 逻辑代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>粒子时钟-完整版</title&g…

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译&#xff0c;此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码&#xff0c;并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【蓝桥杯第十三届省赛B组】(部分详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

《剑指 Offer》专项突破版 - 面试题 101、102、103 和 104 : 和动态规划相关的背包问题(C++ 实现)

目录 前言 面试题 101 : 分割等和子集 面试题 102 : 加减的目标值 面试题 103 : 最少的硬币数目 方法一 方法二 面试题 104 : 排列的数目 前言 背包问题是一类经典的可以应用动态规划来解决的问题。背包问题的基本描述如下&#xff1a;给定一组物品&#xff0c;每种物品…

策略到成果:六西格玛培训在各行业中的转化与实施

六西格玛培训作为一种管理方法论&#xff0c;已经在多个行业中得到应用&#xff0c;并为这些行业带来了显著的贡献。下面张驰咨询给大家介绍几个主要行业的应用情况&#xff1a; 制造业&#xff1a;在制造业中&#xff0c;六西格玛的应用可以带来显著的质量和成本优势。通过减…