到底该用img还是background-image?
在前端页面的实现过程中,我们经常会遇到这个情况:有一个盒子,盒子里面需要放一张图片。这个时候,我们既可以通过添加image标签来实现,也可以通过设置背景图的形式实现,哪种更好呢?
一般情况下,可能就是哪种顺手用哪个,因为都能实现需要的功能,但如果都是这样的话,html也就没必要做两个标签了。下面就来看一下两者的区别:
| 项目 | image | backgroud-image |
|---|---|---|
| 所属 | dom元素、内容类、 | css样式、修饰类、 |
| 图层位置 | 前景 | 背景 |
| 默认初始尺寸 | 不定 | 固定 |
| 是否会产生回流重绘 | 会 | 不会 |
| 图片加载失败 | dom尺寸默认0,点击事件难以响应 | dom背景无,其他点击事件正常 |
| 样式文件加载失败 | 正常显示 | dom消失 |
| 使用场景 | logo、产品图片、广告图片 | 背景图、角标等 |
从上面可以看出来,img更适合作为内容部分渲染到页面里面,即便样式文件加载失败,也要让用户可以看到的,属于必须要的元素,特别适合作为广告宣传、产品展示类的使用。
而background则相对更适合做修饰类的,即便没能正常加载也并不影响页面整体的内容展示和用户交互,属于锦上添花类型的。
但是这两种方式又都存在着表中所列出的一些问题,针对这些问题,可以做如下优化:
1、img标签指定宽高尺寸,避免页面回流重绘。指定alt属性或者默认图片,在图片加载失败的时候备用。
2、logo元素同时使用img标签和background,并指定不同的图片源,比如一个用资源服务器图片,一个用base64编码(合适的话),避免那个元素加载不出来导致宣传效果达不到。
其实说了这些,也还是要看个人的开发习惯和保证产品完整性需要,下回见吧
到底该用img还是background-image?的更多相关文章
- css 中的background:transparent到底是什么意思有什么作用
有时我在看css时,看到有的css属性定义为background:transparent.意思就是背景透明.实际上background默认的颜色就是透明的属性.所以写和不写都是一样的 有段时间没写文章 ...
- PopupWindow 点击外部和返回键无法消失背后的真相(setBackgroundDrawable(Drawable background))
刚接手PopupWindow的时候,我们都可能觉得很简单,因为它确实很简单,不过运气不好的可能就会踩到一个坑: 点击PopupWindow最外层布局以及点击返回键PopupWindow不会消失 新手在 ...
- AFNetworking到底做了什么?(二)
接着上一篇的内容往下讲,如果没看过上一篇内容可以点这: AFNetworking到底做了什么? 之前我们讲到NSUrlSession代理这一块: 代理8: /* task完成之后的回调,成功和失败 ...
- AFNetworking到底做了什么
写在开头: 作为一个iOS开发,也许你不知道NSUrlRequest.不知道NSUrlConnection.也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定 ...
- RadioButton 的background属性表现特征
对于radiaoButton,应该很多人都用过.下面看一个场景 上方时radiogroup,细致观察发现左1,文字开始位置和右1文字开始位置不同,这是为何呢? 查看布局: <RadioB ...
- html5实现饼图和线图-我们到底能走多远系列(34)
我们到底能走多远系列(34) 扯淡: 送给各位一段话: 人生是一个不断做加法的过程 从赤条条无牵无挂的来 到学会荣辱羞耻 礼仪规范 再到赚取世间的名声 财富 地位 ...
- 在项目中 background transiton 带来的"便利"与“坑”
本文就两个例子跟大家分享一下background-image与background-size的渐变(transition)所带来的方便与“深坑” 首选,说说这东西好的地方,有时候在做PC项目的时候,可 ...
- background属性冲突导致的部分浏览器背景图片不显示问题
前几天在项目中遇到了一个让人摸不着头脑的bug,测试说页面显示有点问题并发了截图, 正常的显示状态是这样 首先我自信地用自己的手机检查了一下,没有问题,问清楚后得知是UC浏览器中出现的,UC的内核是u ...
- OutOfMemoryError 到底能不能被捕获?
感觉中,OutOfMemeryError(内存溢出错误) 是jvm抛出的异常,是不能被捕获的. 直到工作中真的遇到OOM异常,而且tomcat服务还一直对外提供服务. 那么问题来了: 1. OOM 到 ...
- Chrome插件开发,美化网页上的文件列表。chrome-extension,background
上一篇文章 通过“content-scripts”的方式向页面注入js和css来美化页面,但是有一个弊端:一旦配置好需要注入的页面,之后如果这个页面地址以后发生变化,或者要新加一些URL进来,那么得修 ...
随机推荐
- idea中maven项目程序包找不到解决办法之一
首先检查maven配置对不对,包括被settings文件以及资源库的位置,maven版本等. 如果不行的话再进行下面的操作: 第一种方案: 在终端terminal中项目目录下,输入“mvn idea: ...
- Java学习--javabean
- SimpleScalar Course Project
https://blog.csdn.net/wahaha_nescafe/article/details/8500186 https://blog.csdn.net/wahaha_nescafe/ar ...
- Tips——RN canvas缩放处理
一.关于canvas缩放 canvas图像缩放处理有两种思路: ctx.scale(),对整个canvas进行重绘,会导致每次缩放都重新加载,影响体验效果 在canvas外包层view,直接对外层的v ...
- 1px边框的渐变
<div class="box">banner</div> .box { width: 100px; height: 50px; line-height: ...
- 关于vue跨域名对接微信授权认证和APP授权认证
这种情况一般也只会出现在前后端分离,跨域名授权的时候吧.耗费了一个前端+一个后台+一个网关,熬夜通宵了两天才整出来一套方法(你们见过凌晨6点的杭州吗,对,我下班的时候天黑了,到家天亮了....),和开 ...
- webapi 后台跳转 后台输出html和script
1.跳转 [HttpGet]public HttpResponseMessage LinkTo(){ HttpResponseMessage resp = new HttpResponseMessag ...
- Vue 框架-08-基础实战 demo
Vue 框架-08-基础实战 demo 前面介绍了有 7 篇了,都是小实例,没有相对完整的应用,虽然有些功能挺实用,但还是有的不常用的,今天记录一篇关于前几篇基础内容的实战 demo,也是对 Vue ...
- LeetCode题解之Peak Index in a MountainArray
1 题目描述 2.问题分析 直接从后向前遍历,找到 A[i] > A[i-1] 即可. 3.代码 int peakIndexInMountainArray(vector<int>&a ...
- git学习——简介、使用(一)
本文是作者参考其他教程学习git的记录,原文:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c01 ...