Используется свойство css transition
В примере выглядит так:
transition: all 0.85s ease;
- то есть все свойства блока, к примеру цвет фона (all) меняются плавно в течении 0,85 секунд с нарастанием вначале и убыванием в конце скорости изменения (ease).
Если использовать для фото товаров то вначале нужно как нибудь узнать цвет фона фото (к примеру заранее на сервере с помошью php, либо сразу на клиенте с помащью javascript), и потом менять цвет фона блока (с помощью javascript), а плавность изменения обеспечит css.
Несколько иначе сделал:
1. Слой заливается под углом с помощью border (поддержка IE8)
2. По hover родительского блока меняем толщину border до вдвоебольшей чем размер родительского блока
3. Анимация возможна с помощью transition или animate, но ни то, ни другое не поддерживается в IE8
Пример: codepen.io/anon/pen/DpCfk