it-swarm.com.ru

CSS3 фоновое изображение перехода

Я пытаюсь создать эффект постепенного исчезновения, используя CSS-переход. Но я не могу заставить это работать с фоновым изображением ...

CSS:

.title a {
    display: block;
    width: 340px;
    height: 338px;
    color: black;
    background: transparent;
    /* TRANSITION */
    -webkit-transition: background 1s;
    -moz-transition: background 1s;
    -o-transition: background 1s;
    transition: background 1s;
}

.title a:hover {
    background: transparent;
    background: url(https://lh3.googleusercontent.com/-p1nr1fkWKUo/T0zUp5CLO3I/AAAAAAAAAWg/jDiQ0cUBuKA/s800/red-pattern.png) repeat;
    /* TRANSITION */
    -webkit-transition: background 1s;
    -moz-transition: background 1s;
    -o-transition: background 1s;
    transition: background 1s;
}​

Посмотрите: http://jsfiddle.net/AK3La/

90
Nick Zani

Вы можете перейти background-image. Используйте CSS ниже для элемента img:

-webkit-transition: background-image 0.2s ease-in-out;
transition: background-image 0.2s ease-in-out;

Это изначально поддерживается Chrome, Opera и Safari. Firefox еще не реализовал это ( bugzil.la ). Не уверен насчет IE.

87
Hengjie

Решение (которое я нашел сам) - это трюк ниндзя, я могу предложить вам два способа:

сначала вам нужно создать «контейнер» для <img>, он будет одновременно содержать состояния normal и hover:

<div class="images-container">
    <img src="http://lorempixel.com/400/200/animals/9/">
    <img src="http://lorempixel.com/400/200/animals/10/">
</div>
  • с CSS3 селекторами http://jsfiddle.net/eD2zL/1/ (если вы используете это, «нормальное» состояние будет первым потомком вашего контейнера или изменит порядок nth-child())

  • CSS2 решение http://jsfiddle.net/eD2zL/2/ (различия лишь в нескольких селекторах)

По сути, вам нужно скрыть «нормальное» состояние и показать их «зависание», когда вы наводите его

и это все, я надеюсь, что кто-нибудь найдет это полезным.

34
Ruffo

Я нашел решение, которое сработало для меня ...

Если у вас есть элемент списка (или div), содержащий только ссылку, и, скажем, это для социальных ссылок на вашей странице в Facebook, Twitter и т.д. и вы используете изображение Sprite, вы можете сделать это:

<li id="facebook"><a href="facebook.com"></a></li>

Сделайте фон "li" изображением вашей кнопки

#facebook {
   width:30px;
   height:30px;
   background:url(images/social) no-repeat 0px 0px;
}

Затем сделайте фоновое изображение ссылки в состоянии наведения кнопки. Также добавьте к этому атрибут opacity и установите его равным 0.

#facebook a {
   display:inline-block;
   background:url(images/social) no-repeat 0px -30px;
   opacity:0;
}

Теперь все, что вам нужно, это «непрозрачность» под «a: hover» и установите это значение равным 1.

#facebook a:hover {
   opacity:1;
}

Добавьте атрибуты перехода непрозрачности для каждого браузера в «a» и «a: hover», чтобы окончательный CSS выглядел примерно так:

#facebook {
   width:30px;
   height:30px;
   background:url(images/social) no-repeat 0px 0px;
}
#facebook a {
   display:inline-block;
   background:url(images/social) no-repeat 0px -30px;
   opacity:0;
   -webkit-transition: opacity 200ms linear;
   -moz-transition: opacity 200ms linear;
   -o-transition: opacity 200ms linear;
   -ms-transition: opacity 200ms linear;
   transition: opacity 200ms linear;
}
#facebook a:hover {
   opacity:1;
   -webkit-transition: opacity 200ms linear;
   -moz-transition: opacity 200ms linear;
   -o-transition: opacity 200ms linear;
   -ms-transition: opacity 200ms linear;
   transition: opacity 200ms linear;
}

Если я правильно объяснил, что у вас должна быть кнопка исчезающего фонового изображения, надеюсь, это поможет, по крайней мере!

14
Austin Parrish Thomas

К сожалению, вы не можете использовать переход на background-image, смотрите список анимируемых свойств w3c .

Вы можете сделать некоторые трюки с background-position.

10
Olwaro

Вы можете использовать псевдоэлемент, чтобы получить желаемый эффект, как я сделал в этом Fiddle .

CSS:

.title a {
    display: block;
    width: 340px;
    height: 338px;
    color: black;
    position: relative;
}
.title a:after {
    background: url(https://lh3.googleusercontent.com/-p1nr1fkWKUo/T0zUp5CLO3I/AAAAAAAAAWg/jDiQ0cUBuKA/s800/red-pattern.png) repeat;
    content: "";
    opacity: 0;
    width: inherit;
    height: inherit;
    position: absolute;
    top: 0;
    left: 0;
    /* TRANSISITION */
    transition: opacity 1s ease-in-out;
    -webkit-transition: opacity 1s ease-in-out;
    -moz-transition: opacity 1s ease-in-out;
    -o-transition: opacity 1s ease-in-out;
}
.title a:hover:after{   
    opacity: 1;
}

HTML:

<div class="title">
    <a href="#">HYPERLINK</a>
</div>
10
MaxCloutier

Если вы можете использовать jQuery, вы можете попробовать BgSwitcher plugin для переключения фонового изображения с эффектами, это очень просто в использовании.

Например :

$('.bgSwitch').bgswitcher({
        images: ["style/img/bg0.jpg","style/img/bg1.jpg","style/img/bg2.jpg"],
        effect: "fade",
        interval: 10000
});

И добавьте свой собственный эффект, см. добавление типов эффектов

9
MaxDhn

Если анимация opacity не поддерживается, вы также можете анимировать background-size.

Например, я использовал этот CSS для установки backgound-image с задержкой.

.before {
  background-size: 0;
}

.after {
  transition: background 0.1s step-end;
  background-image: $path-to-image;
  background-size: 20px 20px;
}
3
shock_one

Салам, этот ответ работает только в Chrome, потому что IE и FF поддерживают цветовой переход. 

Нет необходимости делать ваши элементы HTML opacity:0, потому что иногда они содержат текст, и нет необходимости удваивать ваши элементы !.

Вопрос со ссылкой на пример в jsfiddle потребовал небольшого изменения: поместить пустое изображение в .title a, например, background:url(link to an empty image);, так же, как вы вставляете его в .title a:hover, но сделайте его пустым изображением, и код будет работать.

.title a {
display: block;
width: 340px;
height: 338px;
color: black;
background: url(https://upload.wikimedia.org/wikipedia/commons/5/59/Empty.png) repeat;
/* TRANSISITION */
transition: background 1s;
-webkit-transition: background 1s;
-moz-transition: background 1s;
-o-transition: background 1s;
  }
  .title a:hover{   background: transparent;
   background: url(https://lh3.googleusercontent.com/-p1nr1fkWKUo/T0zUp5CLO3I/AAAAAAAAAWg/jDiQ0cUBuKA/s800/red-pattern.png) repeat;
/* TRANSISITION */
transition: background 1s;
-webkit-transition: background 1s;
-moz-transition: background 1s;
-o-transition: background 1s;
}

Проверьте это https://jsfiddle.net/Tobasi/vv8q9hum/

1
mohammed Suleiman

Попробуйте, заставит фоновую анимацию работать в сети, но гибридное мобильное приложение Не работает

@-webkit-keyframes breath {
 0%   {  background-size: 110% auto; }
 50%  {  background-size: 140% auto; }
 100% {  background-size: 110% auto; }      
}
body {
   -webkit-animation: breath 15s linear infinite;
   background-image: url(images/login.png);
    background-size: cover;
}
1
Hesham Nasser

Учитывая, что фоновые изображения нельзя анимировать, Я создал небольшой микшер SCSS, позволяющий переходить между 2 различными фоновыми изображениями с помощью псевдоселекторов before и after. Они находятся на разных слоях z-index. Тот, что впереди, начинается с непрозрачности 0 и становится видимым при наведении. 

Вы можете использовать тот же подход для создания анимации с линейными градиентами тоже.

сКС

@mixin bkg-img-transition( $bkg1, $bkg2, $transTime:0.5s ){  
  position: relative;  
  z-index: 100; 
  &:before, &:after {
    background-size: cover;  
    content: '';    
    display: block;
    height: 100%;
    position: absolute;
    top: 0; left: 0;    
    width: 100%;    
    transition: opacity $transTime;
  }
  &:before {    
    z-index: -101;
    background-image: url("#{$bkg1}");    
  }
  &:after {    
    z-index: -100;
    opacity: 0;
    background-image: url("#{$bkg2}");    
  }
  &:hover {
     &:after{
       opacity: 1; 
     }
  }  
}

Теперь вы можете просто использовать его с

@include bkg-img-transition("https://picsum.photos/300/300/?random","https://picsum.photos/g/300/300");

Вы можете проверить это здесь: https://jsfiddle.net/pablosgpacheco/01rmg0qL/

0
Pablo S G Pacheco

С вдохновляющим постом Криса здесь:

https://css-tricks.com/different-transitions-for-hover-on-hover-off/

Мне удалось придумать это:

#banner
{
    display:block;
    width:100%;
    background-repeat:no-repeat;
    background-position:center bottom;
    background-image:url(../images/image1.jpg);
    /* HOVER OFF */
    @include transition(background-image 0.5s ease-in-out); 

    &:hover
    {
        background-image:url(../images/image2.jpg);
        /* HOVER ON */
        @include transition(background-image 0.5s ease-in-out); 
    }
}
0
Carol McKay