本文就两个例子跟大家分享一下background-image与background-size的渐变(transition)所带来的方便与“深坑”

首选,说说这东西好的地方,有时候在做PC项目的时候,可能会碰到这种需求:要求鼠标移入一个ICON或者一张图片的时候要求显示另外一张图片,并且带有渐变的效果。

那么对于类似于我这种经验不是特别成熟的前端来说,肯定会想找到经理说,大哥可不可以把它改成色块,绝对可以完成任务。因为很简单啊,映像中颜色的渐变还是很容易实现的,当然啦,日子不可能像你梦想的那样好过,“必须按需求实现”。

然后我就想着1、要切换图片,2、要渐变效果。如果是以前的话,我肯定是弄两个不同的标签咯,然后hover的时候分别fadeIn,fadeOut,  对!这个很容易实现嘛对吧,但是我觉得呢,做WEB前端应该需要坚持:能用CSS解决的,绝不用JS。为什么呢?因为···(自己百度去)

言归正传,只用CSS实现上面两个要求

我就想着要渐变,那就肯定是CSS3的transition了,但是图片能不能渐变,我还真的不知道,当时我就试着玩一下,

左边三个泡泡,默认的状态,背景啥的都写的很清楚了,现在把hover需要做的写进去(其实也没啥,不就是换个背景图片么,哎),

截图当然解释不了渐变的效果,你们可以自己试着玩儿,反正(background-image)背景图片也可以渐变就对啦.(可参考我的项目http://mysidechina.com/)

下面说说同样的东西把我坑了一下午的例子

简单点儿说吧,首先,可能你的页面上有这么一个元素需要有渐变,这里我就不管是width还是height还是top,left了,无所谓,因为你任性的写了个 “all” ,混蛋!!!谁让你写“all”的,就是这个坏了事儿,你可能兴高采烈的觉得我的这部分效果都有了,渐变的效果也很完美。然后,然后,然后,你可能碰到了一个新的需求,比如所,我们要求图片根据屏幕做自适应,那么这里我们肯定是根据窗口的比例和图片的比例进行计算然后确定到底是background-size:100% auto;还是background:auto 100%;  相信同胞们在项目中肯定碰到这样的需求吧,那么问题来了,我发现在更改了background-size这个属性的时候,页面上背景图片的位置并没有立马改变,而是过了几秒钟才变,尼玛···明明没问题啊,难道是JS的计算时间过长?当然啦,这个肯定而是考虑的可能性之一。

在经过排除其它的原因之后,发现了上面那个玩意儿,然后就瞬间顿悟了,这里有一个“all”和“transition-delay”拉了我的后腿,意思就是说,这里的all也包括了我们要修改的background-size,在延后2.5S之后才开始执行!!并且还有3秒钟的渐变,我了个天,这种中间就整整5.5秒了,不解释,赶紧赶紧赶紧把transition改了

乖乖的把"all"改成了"transform"。OK!问题真的解决了。

所以说啊,我们写CSS的时候也要养成好的习惯,那么针对这个渐变来说呢,就是:你需要什么属性有渐变那就写上什么,而不要动不动就给个"all",鬼知道你后面会不会在这个上面才坑啊,也有可能同事改你的代码的时候一直碰到BUG却不知道是这个原因影响的呢,所以“下手”慎重!

在项目中 background transiton 带来的"便利"与“坑”的更多相关文章

  1. 项目分享一:在项目中使用 IScroll 所碰到的那些坑

    最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://git ...

  2. react项目中引用amap(高德地图)坑

    最近在写一个react项目,用到了需要定位的需求,于是乎自己决定用高德地图(AMap),但是react官方文档的案列很少,大多都是原生JS的方法. 在调用amap的 Geocoder Api 时,一直 ...

  3. 查询时间倒退一天-项目中惊现神秘BUG-JsonFormat使用采坑记

    一.问题由来 前一天下午正在写代码的时候,领导突然走过来跟我说,让我去看一个神秘的BUG,说是在数据库中查询时的一个日期 返回到页面后,查询时间倒退了一天.一听到这个BUG,我就感觉很奇怪,还有这样的 ...

  4. 控制反转和spring在项目中可以带来的好处

    Spring实例化Bean的三种方式分别是: 1,xml配置使用bean的类构造器 <bean id="personService" class="cn.servi ...

  5. vue项目中打包background背景路径问题

    项目中图片都放在src/img文件夹,img和background-image引用都用相对路径,即../../这种形式 在打包build的设置路径assetsPublicPath: ‘./‘,然后那些 ...

  6. 转:C++项目中的extern "C" {}

    引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __c ...

  7. C++项目中的extern "C" {}

    from:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html C++项目中的extern "C" {} 20 ...

  8. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)

    在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...

  9. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理

    在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...

随机推荐

  1. c++ 设计模式6 (Decorator 装饰模式)

    4. “单一职责”类模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式代表: Decorato ...

  2. tachyon 命令行接口

    Usage: tachyon COMMAND where COMMAND is one of: format [-s] 格式化Format Tachyon (如果指定 -s 参数,表示在 underf ...

  3. 开发一个支持多用户在线的FTP程序

    要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 允许用户查看当前目 ...

  4. NserviceBus简介

    NServiceBus 简介 为面向业务服务合作而设计的NServiceBus不像WCF一样是RPC技术的替代者.成功的SOA和领域模型(DDD)项目使用了一些混合的技术和方法,不仅仅是使用NServ ...

  5. u163是什么故障 佳能MX328 u163是什么意思?墨水打完了,我加了墨水后还是显示U163(请检查墨水-彩色)警告灯亮

    U163:墨水已用完.请更换墨盒,然后关闭“扫描单元”(“机盖”).如果打印正在进行并希望继续打印,请在不取出墨盒的情况下按 [Stop] (停止) 按钮至少 5 秒. 然后可以在墨水用完的情况下继续 ...

  6. 基于http协议的api接口对于客户端的身份认证方式以及安全措施

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...

  7. amoeba实现MySQL读写分离

    amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...

  8. Linux后台运行

    关于linux后台 ctrl + z jobs -l fg %jobnumber 后台调前台 bg %jobnumber 后台暂停--后台运行 kill pid ps -aux | grep &quo ...

  9. Java操作XML的工具类

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  10. PHP中正则替换函数preg_replace用法笔记

    今天应老板的需求,需要将不是我们的页面修改一个链接,用js+iframe应该也能实现,但是我想尝试一下php实现方法. 首先你得先把别人的页面download到你的php中,实现方法可以用curl, ...