前几天在项目中遇到了一个让人摸不着头脑的bug,测试说页面显示有点问题并发了截图,

正常的显示状态是这样

  

首先我自信地用自己的手机检查了一下,没有问题,问清楚后得知是UC浏览器中出现的,UC的内核是u3,基于webkit开发的,平时并没有用过,应该是在细节处理上加了一些优化功能。

说回问题,第一眼看觉得可能是不同尺寸屏幕导致某个元素高度超出了,结果并不是这样。找了一会儿,终于发现是那一块的背景图片没有显示。图片并没有报404,也没有被其他属性覆盖, 而且上下文中的背景图都能正常显示,唯独这个不显示。

描述一下这个图片吧,这是一个高度1px的图片,两端透明带阴影效果,中间是白色背景的图片。

设置的属性是

background: url(../images/detail_middle.png) top repeat-y;

background-size: 100%;

(不知道经验丰富的人看到这里能不能发现问题 …… )

背景占满屏幕,垂直方向repeat 在我看来属性没什么问题 为什么图片就是不显示呢? 图片放在其他元素上可以显示,浏览器已经禁止了缓存,检查没有冲突属性,background-color可以正常生效……

召唤度娘!

由于是只存在于UC中的兼容问题,所以首要怀疑对象肯定是这种乱七八糟的浏览器了。

查了查UC有没有什么独特的渲染机制,无果。

再精确点,查查UC对图片加载,尤其是background相关属性有没有什么“特叔服务”,查到了一个可能的原因。

一些浏览器有广告过滤功能,在渲染页面时会自动将一些可能是广告的元素剔除掉,我猜那张图片有可能是由于这个原因没被显示出来。但是无论是标签的class,id还是图片的名字,都不包含广告意味的字眼,换了一些名字 仍然不能纠正问题,不知道怎么改了,线索好像断了。

此时我意识到了一件事,我该回家休息了~

运气好的话明天可能它自己就好了也说不定呢。

回去的路上想了想,感觉不是广告筛除的原因,因为同样的元素加上这张背景图都可以显示。 那么到底是什么原因导致的这个问题?上一个下一个元素显示都正常,只有这个有问题, 那应该仔细看看它们都有哪些区别就好了。

按着这个思路,第二天很快就发现了问题的根源。

在将background-size:100%改为contain后,问题解决了。

愉快地更新代码,并且测试通过后,我开始考虑引发问题的原因。 现在我并不知道为什么这么改就没有问题了。

首先区分一下background-size:100%,contain和cover这三者间的区别:

cover:图片填满整个容器,不变形;

contain:图片在不超出容器的情况下放大到最大,不变形;

100%:图片宽高设为容器的宽高的100%,可能会变形。

在我看来,在这个场景中,contain和100%的效果应该是一样的,但是问题出在100%上。

background-size是CSS3新增的属性,除了提供的cover和contain两个属性值外,还可以通过传递两个参数 随意设置宽度和高度,当只传递一个参数的时候,第二个参数为默认值,即auto。

而我想当然地以为background-size:100% 就等同于 background-size:100% 100% 了。

后来我又试了下,写成 background-size:100% 100%确实也是没问题的,而且如果这样写也就不再需要repeat-y了。

所以,问题就出在这里,在将background-size的纵坐标值设为auto的同时,将background-repeat设为repeat-y, 在UC浏览器中会出现背景图片无法显示的情况(大部分浏览器中还是不会有这种问题的),而造成这个问题的原因我就不再追查了,也许这种写法本身就并不规范,UC在处理这种代码的时候兼容性并没有考虑到。以后还是不要出现这种写法就好。

总结:

1,UC浏览器中background-repeat的repeat属性不要与background-size的auto属性同时运用,可能会无法显示背景图案;

2,background-size只传一个值时,另一个值为默认的auto,并不像background-position等属性一样一个值可以当两个值用;

3,如果只是记录解决方法的话只要上两条总结就够了,这篇随笔更主要的是记录了我解决并理解问题的思路和过程,希望能对以后的我或者更多的小伙伴们起到帮助的作用。

background属性冲突导致的部分浏览器背景图片不显示问题的更多相关文章

  1. extjs中新建窗体时,给窗体添加背景图片不显示问题之一

    1.在extjs中新建窗体时,给窗体添加背景图片不显示,例如下面的代码. 不显示的原因:因为设置了  layout: 'fit', Ext.create('Ext.Window', { title: ...

  2. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

  3. vue打包后CSS中引用的背景图片不显示问题

    vue项目中,在css样式中引用了一张背景图片,开发环境下是可以正常显示,build之后背景图片不显示. 解决方法: 找到build/utils.js文件 修改成为如下所示内容:  添加红框中的内容即 ...

  4. Vue项目打包发布后CSS中的背景图片不显示

    相信有很多同学在学习vue的刚开始都遇到过项目打包发布后发现CSS中的背景图片不显示,具体如何解决只需要更改bind的配置即可 修改 build/utils.js 中的 generateLoaders ...

  5. ie8 background背景图片不显示问题

    在chrome,FF可以显示,但是在ie8背景图片显示不出来 css改为如下可以正常显示: background: url(../images/goods.png) no-repeat !import ...

  6. 有关background 背景图片不能显示

    首先有两个概念 绝对路径,从根目录为起点到你所在的目录: 相对路径,从一个目录为起点到你所在的目录. 例如:              ┍ A文件夹           C -|            ...

  7. (转)HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    http://blog.csdn.net/oscar92420aaa/article/details/51304067 CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中 ...

  8. HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中,背景图片的定位方法有3种: 1)关键字:background-position: top left; 2)像素:bac ...

  9. Chrome浏览器记住密码后input框黄色背景且背景图片不显示的问题

    Chrome浏览器记住密码后再进入登录页后,输入框背景颜色变为黄色,字体颜色变成#000黑色,且添加的背景图片也那不显示了,进入审查元素后,发现浏览器默认给输入框添加了样式,并且无法通过importa ...

随机推荐

  1. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

  2. 【洛谷p1162】填涂颜色

    (今天yy出奇的不活泼,认真的吓人) [传送门] 算法标签: 思路啊qwq: part1: 想法是先暴搜出每一行的1,取最前方一个1和最后方一个1,然后中间的0填上色,80分,因为没有考虑到“0001 ...

  3. FreeMarker与Thymeleaf

    FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 ...

  4. 『Python』为什么调用函数会令引用计数+2

    一.问题描述 Python中的垃圾回收是以引用计数为主,分代收集为辅,引用计数的缺陷是循环引用的问题.在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. sys.g ...

  5. 【分享】JS如何为复制的Web文本添加其他信息

    看到了两篇关于这题的讨论,简单的记录一下!o(* ̄▽ ̄*)ブ 1.  stackoverflow , How to add extra info to copied web text 2.  黑客派, ...

  6. 微信公众号开发加密解密异常java.security.InvalidKeyException:illegal Key Size

    完美解决: http://blog.csdn.net/u013628152/article/details/46785173

  7. @Component, @Repository, @Service的区别

    注解 含义 @Component 最普通的组件,可以被注入到spring容器进行管理 @Repository 作用于持久层 @Service 作用于业务逻辑层 @Controller 作用于表现层(s ...

  8. 封装一个redis操作类来操作hash格式

    最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...

  9. 面向对象之反射 与__str__等内置函数

    一  反射 1.面向对象中的反射:通过字符串的形式操作对象的相关属性,python中一切事物都是属性(都可以使用反射) 四个可以实现自省<反射>的函数:hasattr /  getattr ...

  10. python 时间段的随机日期输出

    生成随机的日期字符串,用于插入数据库. 通过时间元组设定一个时间段,开始和结尾时间转换成时间戳. 时间戳中随机取一个,再生成时间元组,再把时间元组格式化输出为字符串 python2代码如下 impor ...