2015-04-29 6 views
0

Я пробовал следующий сценарий, который мне нужен, чтобы анимировать фоновое изображение, как заполнение снизу вверх, при наведении моего div. В то время как моя анимация не похожа на заполнение снизу, а наоборот - скольжение снизу вверх. Может ли кто-нибудь предложить мне правильный способ, как я могу достичь своего результата. Я в порядке с анимацией jQuery, а также анимацией ключевого кадра css3.Как анимировать высоту фонового изображения

Ниже мой код с скрипкой

.bg { 
 
    background: url("https://9887c7297bf844d024e4cccb28a722f62dbe3d73.googledrive.com/host/0B6jEeghp1bpxfkszMFVRcDZBdGF4d012d0hjaS0xWTRvRkh6SDNEUFhUb2pETzlSYWZtbzA/work_home.png") no-repeat center; 
 
    height: 250px; 
 
    position: relative; 
 
} 
 
span { 
 
    background: url(https://9887c7297bf844d024e4cccb28a722f62dbe3d73.googledrive.com/host/0B6jEeghp1bpxfkszMFVRcDZBdGF4d012d0hjaS0xWTRvRkh6SDNEUFhUb2pETzlSYWZtbzA/work_home_animate.png) no-repeat top 32px center; 
 
    bottom: 0px; 
 
    height: 0; 
 
    transition: height 0.5s; 
 
    position: absolute; 
 
    right: 0; 
 
    left: 0; 
 
} 
 
.bg:hover span { 
 
    height: 184px; 
 
}
<div class="bg"><span></span> 
 
</div>

Fiddle Link

+2

вы могли бы найти [это] (http://stackoverflow.com/a/28282532/3436942) полезно – jbutler483

+0

@ jbutler483 я попытался сверху вниз и то делать хорошо, но когда я попытался снизу вверх то где Iam сталкиваются с проблемой. :( – Benjamin

+0

Вы можете использовать четыре изображения, например, слои –

ответ

5

установка background-position быть снизу будет полезно:

.bg { 
 
    background: url("https://9887c7297bf844d024e4cccb28a722f62dbe3d73.googledrive.com/host/0B6jEeghp1bpxfkszMFVRcDZBdGF4d012d0hjaS0xWTRvRkh6SDNEUFhUb2pETzlSYWZtbzA/work_home.png") no-repeat center; 
 
    height: 250px; 
 
    position: relative; 
 
} 
 

 
span { 
 
    background: url(https://9887c7297bf844d024e4cccb28a722f62dbe3d73.googledrive.com/host/0B6jEeghp1bpxfkszMFVRcDZBdGF4d012d0hjaS0xWTRvRkh6SDNEUFhUb2pETzlSYWZtbzA/work_home_animate.png) no-repeat; 
 
    bottom: 0px; 
 
    height: 0; 
 
    position: absolute; 
 
    right: 0; 
 
    left: 0; 
 
    transition: height .5s; 
 

 
    background-position: center bottom; 
 
} 
 

 
.bg:hover span { 
 
    height: 152px; 
 
}
<div class="bg"><span></span></div>

+0

Thats был настоящим умным ответом, но когда я прокручиваю из-за фиксированной позиции, мой контент застрял в том же положении. – Benjamin

+0

@Benjamin: Обновлено. Я обнаружил, что указывать только размер фонового изображения мог бы работать очень хорошо. –

+0

Вы спасатель жизни, который действительно то, что я хотел, должен вам. – Benjamin

1

Вы можете сделать это следующим образом. Коричневый div «скользит» снизу вверх. Надеюсь, это то, что вам нужно.

Вы должны использовать свой background images вместо цветов, конечно.

function onClick(){ 
 
    document.getElementById("second").style.height = "0px"; 
 
}
div{ 
 
    position: absolute; 
 
    height: 50px; 
 
    width: 50px; 
 
} 
 

 
#first{ 
 
    background-color: brown; 
 
} 
 

 
#second{ 
 
    background-color: beige; 
 
    transition: height 1s; 
 
}
<div id="first"></div> 
 
<div id="second" onclick="onClick()"></div>

+0

Я попытался с вашим примером, но это не помогло мне, вы можете просто обновить ссылку на скрипку с изображениями, которые у меня есть. – Benjamin

+0

@Benjamin извините, но ваш JSFiddle немного запутан. Вы сделали много статей CSS, которые не считаются лучшими. Если вы измените «background-color» на «background-image» (конечно, вы также должны указать URL-адреса), в моем примере вы должны точно иметь то, что хотите. – OddDev

1

Хотя это не является точной копией, вы можете использовать псевдо-элементы, чтобы создать это, устраняя необходимость для изображения на всех:

.square, 
 
.mini-square { 
 
    height: 250px; 
 
    width: 250px; 
 
    background: lightgray; 
 
    position: relative; 
 
} 
 
.square:before { 
 
    content: ""; 
 
    position: absolute; 
 
    border-left: 50px solid white; 
 
    border-right: 50px solid white; 
 
    height: 150px; 
 
    bottom: 0; 
 
    left: 0; 
 
    width: 150px; 
 
    z-index: 8; 
 
} 
 
.square:after { 
 
    content: ""; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    border: 125px solid white; 
 
    border-top: none; 
 
    border-bottom-color: transparent; 
 
    width: 0; 
 
    z-index: 8; 
 
} 
 
span { 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
    height: 0; 
 
    width: 100%; 
 
    background: blue; 
 
    transition: all 0.6s; 
 
} 
 
.square:hover span { 
 
    height: 100%; 
 
} 
 
.mini-square { 
 
    height: 140px; 
 
    width: 110px; 
 
    z-index: 10; 
 
    position: absolute; 
 
    bottom: 20px; 
 
    left: 70px; 
 
    background: tomato; 
 
} 
 

 
.mini-square:after { 
 
    content: ""; 
 
    position: absolute; 
 
    top: -70px; 
 
    left: -20px; 
 
    border: 75px solid transparent; 
 
    border-top: none; 
 
    border-bottom-color: tomato; 
 
    width: 0; 
 
    z-index: 8;
<div class="square"> 
 
    <span></span> 
 
    <div class="mini-square"> 
 
    </div> 
 
</div>

+0

Это то, что я ожидал, но вместо этого используя псевдоэлементы, вы можете реализовать с фоновыми изображениями, потому что я должен использовать один и тот же сценарий для разных изображений с другой формой, поэтому, если это общий для всех, я действительно благодарен вам. – Benjamin

+0

@Benjamin: Ваша реализация изображения всегда будет вызывать проблемы, главным образом из-за того, как они сгенерированы. Такая функциональность (псевдо элементы и т. Д.) Может быть адаптирована к различным формам. Если нет, то SVG будет ответом. – jbutler483

+0

Да, я согласен с вами и благодарю за те усилия, которые вы сделали. – Benjamin

0

Вот мой метод с использованием CSS3 преобразования:

.box{ 
 
    width: 300px; 
 
    float: left; 
 
} 
 
.bg { 
 
    background: url(https://raw.githubusercontent.com/xgqfrms-GitHub/webgeeker/gh-pages/CSS3/bg-images-animation/bg1.png) no-repeat center; 
 
    height: 250px; 
 
    width: 100%; 
 
    position: relative; 
 
    overflow: hidden; 
 
    border: 1px solid red; 
 
} 
 
span { 
 
    background: url("https://raw.githubusercontent.com/xgqfrms-GitHub/webgeeker/gh-pages/CSS3/bg-images-animation/bg2.png") no-repeat; 
 
    height: 150px; 
 
    bottom: -150px; 
 
    right: 0; 
 
    left: 0; 
 
    position: absolute; 
 
    /*background-position: center bottom;*/ 
 
} 
 
.bg:hover span { 
 
    transform: translateY(-150px); 
 
    transition: all .5s ease 0s; 
 
}
<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>background-image-scroll</title> 
 
</head> 
 
<body> 
 
    <div class="box"> 
 
     <div class="bg"> 
 
      <span></span> 
 
     </div> 
 
    </div> 
 
</body> 
 
</html>
demo.gif: enter image description here Вы можете посетить следующую ссылку, чтобы увидеть разные в отличие от демонстрации: http://webgeeker.xyz/CSS3/bg-images-animation/

Смежные вопросы