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

news2024/11/27 4:32:18

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


类似考点

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stream使用

stream流式计算 在Java1.8之前还没有stream流式算法的时候&#xff0c;我们要是在一个放有多个User对象的list集合中&#xff0c;将每个User对象的主键ID取出&#xff0c;组合成一个新的集合&#xff0c;首先想到的肯定是遍历&#xff0c;如下&#xff1a; List<Long> u…

游戏引擎中的物理系统

一、物理对象与形状 1.1 对象 Actor 一般来说&#xff0c;游戏中的对象&#xff08;Actor&#xff09;分为以下四类&#xff1a; 静态对象 Static Actor动态对象 Dynamic Actor ---- 可能受到力/扭矩/冲量的影响检测器 TriggerKinematic Actor 运动学对象 ---- 忽略物理法则…

go: go.mod file not found in current directory or any parent directory.如何解决?

这个错误表明你正在执行 go get 命令&#xff0c;但是当前目录或任何父目录中都找不到 go.mod 文件。这可能是因为你的项目还没有使用 Go Modules 进行管理。 要解决这个问题&#xff0c;有几种方法&#xff1a; go mod init <module-name> 其中 <module-name>…

【力扣】11. 盛最多水的容器

11. 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&…

Python | Leetcode Python题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; def reverse_better(self, x: int) -> int:y, res abs(x), 0# 则其数值范围为 [−2^31, 2^31 − 1]boundry (1<<31) -1 if x>0 else 1<<31while y ! 0:res res*10 y%10if res > boundry :return 0y //10return re…

数字化赋能农业:数字乡村促进农业现代化

随着信息技术的迅猛发展&#xff0c;数字化浪潮正以前所未有的速度席卷各行各业&#xff0c;农业领域也不例外。数字乡村战略作为推动农业现代化的重要手段&#xff0c;通过数字化技术的深度应用&#xff0c;为农业生产带来了革命性的变革。本文旨在探讨数字化如何赋能农业&…

用于HUD平视显示器的控制芯片:S2D13V40

一款利用汽车抬头显示技术用于HUD平视显示器的控制芯片:S2D13V40。HUD的全称是Head Up Display&#xff0c;即平视显示器&#xff0c;以前应用于军用飞机上&#xff0c;旨在降低飞行员需要低头查看仪表的频率。起初&#xff0c;HUD通过光学原理&#xff0c;将驾驶相关的信息投射…

隐私计算实训营第七讲-隐语SCQL的架构详细拆解

隐私计算实训营第七讲-隐语SCQL的架构详细拆解 文章目录 隐私计算实训营第七讲-隐语SCQL的架构详细拆解1.SCQL Overview1.1 多方数据分析场景1.2 多方数据分析技术路线1.2.1 TEE SQL方案1.2.2 MPC SQL方案 1.3 Secure Collaborative Query Language(SCQL)1.3.1 SCQL 系统组件1.…

C++ 2024-4-2 作业

1.模板类实现顺序栈 #include <iostream> #define MAX 8 using namespace std; template<typename T> class stack {T data[MAX];int top; public:stack():top(-1){}bool empty_stack();bool full_stack();void push_stack(T data);void pop_stack();void show();…

用于AGV物流机器人的爱普生陀螺仪传感器XV7000系列

适用于AGV物流机器人的爱普生陀螺仪传感器XV7000系列:XV7001BB&#xff0c;XV7011BB。以前我们都知道XV7001BB&#xff0c;XV7011BB适用于扫地机器人&#xff0c;其实对于AGV物流机器人来说&#xff0c;XV7000系列生陀螺仪传感器也是其中重要一环。AGV机器人又叫做AGV搬运机器人…

刷题DAY41 | LeetCode 343-整数拆分 96-不同的二叉搜索树

343 整数拆分&#xff08;medium&#xff09; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 思路&#xff1a;动态规划 动规五部曲&#xff0c;分析…

Penpad Season 2 质押突破350ETH,还有望获Scroll生态空投

Scroll 是被 Vitalik Buterin 给予高度评价的 zk Rollup Layer2 项目&#xff0c;也一直是市场长期关注的重点。自 10 月 17 日宣布主网上线后&#xff0c;Scroll 的热度节节攀升&#xff0c;目前其 TVL 达到 1.5 亿美元&#xff0c;是众多 Layer2 生态中 TVL 数据增长最快的生…

九河云:在AWS上实现跨region VPC互联

如何跨region实现不同VPC之间的对等链接&#xff1f;九河云为您介绍AWS跨region连接方案。 说明&#xff1a;VPC-A位于弗吉尼亚region&#xff0c;VPC-B位于俄勒冈region 本文将在同一账户的弗吉尼亚和俄勒冈VPC中各启用一台EC2&#xff08;本文已提前创建好VPC、EC2等资源&am…

非线性SVM模型

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个非线性SVM模型程序,最后打印5个条件分别的影响力。 示例一 在非线性支持向量机&#xff08;SVM&#xff09;模型中…

OpenCV 4.9基本绘图

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV使用通用内部函数对代码进行矢量化 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​目标 在本教程中&#xff0c;您将学习如何&am…

【云呐】固定资产盘点报告表怎么填

报告表以表述清晰为主,避免繁琐,重要数据及问题使用表格形式展示。通过签字对报告负责认同度。内容应全面反映本次盘点,提供参考依据。一、标题 包含单位名称、报告期间等基本信息二、前言 概括本次盘点的目的和任务签署三、盘点范围与时间 明确盘点的固定资产项目和时…

代码签名证书OV跟EV的区别

代码签名证书中的OV和EV分别代表“Organization Validation”&#xff08;组织验证&#xff09;和“Extended Validation”&#xff08;增强验证&#xff09;。这两种类型的代码签名证书均用于对软件或应用程序进行数字签名&#xff0c;确保用户下载的代码来自于经过验证的真实…

git源码泄露

Git 源码泄露 开发人员会使用 git 进行版本控制&#xff0c;对站点自动部署。但如果配置不当&#xff0c;可能会将 .git 文件夹直接部署到线上环境&#xff0c;这就引起了 git 泄露漏洞&#xff0c;我们可以利用这个漏洞直接获得网页源码。 确定是否存在泄漏 &#xff08;1&…

开发必备8套工具都有哪些你知道嘛?

经过多年的使用&#xff0c;收集。我发现大部分的人员都在使用上面的某一种工具来开发。 认识了解上面开发环境工具&#xff0c;有利于你更快的写出高效的代码。没有看错上面是全部的8套 我把他们捆绑在一起。目的就是为了更好的让大家。学习。不管你是java的。.net语言的。p…

目标检测、识别和语义分割的标注工具安装

计算机视觉 图像分类&#xff08;目标检测&#xff09;&#xff1a;一张图像中是否含某种物体物体定位&#xff08;目标检测与目标识别&#xff09;&#xff1a;确定目标位置和所属类别。语义分割&#xff08;目标分割和目标分类&#xff09;&#xff1a;对图像进行像素级分类…