30

Animating the background-size property doesn't seem to be working in Chrome or Safari.

div {
    width: 161px;
    height: 149px;
    background: url(http://3.bp.blogspot.com/_HGPPifzMEZU/Rw4ujF12G3I/AAAAAAAAAWI/bc1ppSb6eKA/s320/estrelas_09.gif) no-repeat center center;
    background-size: 50% 50%;
    transition: background-size 2s ease-in;
    -moz-transition: background-size 2s ease-in;
    -web-kit-transition: background-size 2s ease-in
}
div:hover {
    background-size: 100% 100%
}
<div>
hey
</div>

http://jsfiddle.net/ubcka/14/

TylerH
  • 20,799
  • 66
  • 75
  • 101
HandiworkNYC.com
  • 10,914
  • 25
  • 92
  • 154

7 Answers7

23

It's not widely supported. See a complete list of CSS properties that support transition here. I would have a different approach. Wrap your element with background-color you wanted to do transition to, and do a scale transition for your element.

<div class="your-wrapper">
  <div class="your-div">

  </div>   
</div>

also make sure to add proper styling

.your-wrapper {
   overflow:hidden
}
.your-div {
   transition: transform 0.5s; 
   -webkit-transition: -webkit-transform 0.5s
}
.your-wrapper:hover .your-div{
   transform: scale(1.5); -webkit-transform: scale(1.5);
}

This should do.

thednp
  • 4,401
  • 4
  • 33
  • 45
  • hey, funny, and youre right. it works in webkit, though. – commonpike Dec 14 '14 at 17:09
  • 1
    Actually, that specification doesn't seem to be up to date. background-size does support animation, at least in Firefox. More detail: http://stackoverflow.com/a/23386830/1816603 – Jose Gómez May 12 '16 at 03:14
  • Well, my solution is cross-browser, at least with any modern browser HTML5, IE9+. – thednp May 12 '16 at 12:54
23

You should check the browser version and whether it supports both background-size and transition. If the former, but not the latter use:

transition: background-size 2s ease-in;
-moz-transition: background-size 2s ease-in;
-ms-transition: background-size 2s ease-in;
-o-transition: background-size 2s ease-in;
-webkit-transition: background-size 2s ease-in;
Brett Pontarelli
  • 1,718
  • 15
  • 29
17

you need to set the background-size on the div otherwise it dosn't have a set size to animate from.

.div { 
 background-size: 100%; //set the original size!!!!!!!!!!!!
-webkit-transition: background-size 2s ease-in;
transition: background-size 2s ease-in;
}

.div:hover { 
 background-size: 110%; 
}
Jess
  • 171
  • 1
  • 2
  • 2
    Yes this is true. Even setting `background-size: cover` on the div won't work. It must be a numerical value – Yashas Apr 29 '20 at 04:07
8

You just need to change:

-web-kit-transition: background-size 2s ease-in;

to:

-webkit-transition: background-size 2s ease-in;
Greg
  • 756
  • 8
  • 16
3

Change -web-kit- to -webkit-.

Also, you should write original CSS property after properties with a vendor-prefix (it's very important). Otherwise, if browser has implemented that CSS3 property (like transition), then original property will be replaced by property with vendor-prefix — and that is not good.

WRONG order:

transition: ...;
-webkit-transition: ...;

RIGHT order:

-webkit-transition: ...;
transition: ...;
Creamov
  • 181
  • 7
-1

I know this is a old question, but using "all" works fine for me.

-webkit-transition: all 1s;
transition: all 1s;
K. Bert
  • 144
  • 1
  • 1
  • 7
  • Well this was a browser support issue, not about the syntax, even though your answer should work, it's not really specific enough – Paul Ghiran Nov 02 '17 at 18:48
  • 2
    I know that is not specific at all but it's an alternative that never let me down . – K. Bert Nov 02 '17 at 18:55
-1

You can also just change all the transition declarations to read like this (it's not the background but the background-size that is changing:

transition: background-size .4s ease-in-out;
Angel Politis
  • 10,955
  • 14
  • 48
  • 66
fordareh
  • 2,923
  • 2
  • 26
  • 39