Ответ 1
Ответ для тех, кто хочет взломать масштабируемое преобразование CSS, чтобы применить его к размеру фона: обложка;
- если нет, то прочитайте второй раздел для стандартных способов достижения такого эффекта
<div class="wrap">
<div></div>
<p>hello</p>
</div>
html, body {
height: 100%;
}
div.wrap {
height: 33%;
width: 33%;
overflow: hidden;
position: relative;
}
div.wrap > div {
position: absolute;
height: 100%;
width: 100%;
-moz-transition: all .5s;
-webkit-transition: all .5s;
transition: all .5s;
-moz-transform: scale(1,1);
-webkit-transform: scale(1,1);
transform: scale(1,1);
background-image: url('http://pimg.tradeindia.com/00288122/b/0/Our-Valuable-Client-List-Click-on-Image-.jpg');
-moz-background-size: cover;
-webkit-background-size: cover;
background-size: cover;
z-index: -1;
}
div.wrap:hover > div {
-moz-transform: scale(2,2);
-webkit-transform: scale(2,2);
transform: scale(2,2);
}
Демо (с помощью background-size: cover;
для перехода/увеличения элемента)
Как вы сказали, необходимо изменить размер cover
, поэтому я придумал трюк, о котором я говорил ранее, здесь у меня есть дочерний элемент, вложенный в элемент position: relative;
, где у меня есть дочерний элемент, position: absolute;
с background-image
с background-size
установленным на cover
, а затем на hover
родителя, я увеличиваю элемент с помощью свойства transform: scale(2,2);
.
Кроме того, при работе с этим решением важно, чтобы нам нужно установить z-index
элемента position: absolute;
ниже, чем те элементы, которые вы будете размещать внутри, поэтому он будет действовать как background
Ответ для тех, кто хочет очистить HTML и CSS
Вы не можете анимировать background-size
, если это значение равно cover
, так что вам понадобится px
или %
, либо вы можете использовать тег img
с свойством transform: scale(2,2);
.
Демо 2 (увеличение или уменьшение из центра)
div {
height: 200px;
width: 200px;
background: url('http://pimg.tradeindia.com/00288122/b/0/Our-Valuable-Client-List-Click-on-Image-.jpg');
background-size: 100% 100%;
-moz-transition: all .5s;
-webkit-transition: all .5s;
transition: all .5s;
}
div:hover {
background-size: 150% 150%;
}
Если вы хотите придерживаться background-size: cover;
, вам придется обернуть весь элемент внутри элемента оболочки с фиксированными размерами с помощью overflow: hidden;
, а не масштабировать дочерний элемент на hover
родительского элемента.
Как вы прокомментировали, для примера тега img
вы можете использовать transform: scale(2,2);
для достижения этого, если родительский элемент установлен на overflow: hidden;
div {
height:300px;
width: 300px;
overflow: hidden;
}
div img {
-moz-transition: all .5s;
-webkit-transition: all .5s;
transition: all .5s;
-moz-transform: scale(1,1);
-webkit-transform: scale(1,1);
transform: scale(1,1);
}
div:hover img {
-moz-transform: scale(2,2);
-webkit-transform: scale(2,2);
transform: scale(2,2);
}