Карусель Bootstrap не работает с изображениями. Нужна помощь, чтобы понять, почему

Я пытаюсь изменить переход в своей карусели от скольжения слева направо к исчезновению и исчезновению. Я нашел несколько ресурсов, включая некоторые ответы здесь, на SO, но ни один из них не работает для меня, и я не совсем понимаю, что мне не хватает. Пока единственное различие, которое я вижу между своим и примерами, которые я видел, заключается в том, что я включаю изображения в свою карусель и подписи. После реализации кода, который я нашел в приведенном здесь ответе: Bootstrap carousel-fade больше не работает с maxcdn 3.3.bootstrap.min.css

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

HTML

    <!-- start -->
<div id="carousel-example-generic" class="carousel slide carousel-fade" data-ride="carousel" >
  <!-- Indicators -->
  <ol class="carousel-indicators">
    <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
    <li data-target="#carousel-example-generic" data-slide-to="1"></li>

  </ol>

  <!-- Wrapper for slides -->
  <div class="carousel-inner" role="listbox" >
    <div class="item active">
      <img src="images/nightscape3.png" alt="...">
      <div class="carousel-caption">
         <div class="about-name-div">
            <h1 >thin text<span>BOLD TEXT</span></h1>
            <p class="lead">THIS IS SOME TEXT</p>
         </div>
        <a class="btn btn-default" href="#about" role="button" id="aboutButton">LEARN MORE ABOUT US</a>
      </div>
    </div>
    <div class="item">
      <img src="images/tech.jpg" alt="...">
      <div class="carousel-caption">
      </div>
    </div>
  </div>

  <!-- Controls -->
  <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
    <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
    <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>   
</div>
<!-- end -->

CSS

.carousel-fade .carousel-inner .item {
  opacity: 0;
  transition-property: opacity;
}

.carousel-fade .carousel-inner .active {
  opacity: 1;
}

.carousel-fade .carousel-inner .active.left,
.carousel-fade .carousel-inner .active.right {
  left: 0;
  opacity: 0;
  z-index: 1;
}

.carousel-fade .carousel-inner .next.left,
.carousel-fade .carousel-inner .prev.right {
  opacity: 1;
}

.carousel-fade .carousel-control {
  z-index: 2;
}

/*
WHAT IS NEW IN 3.3: "Added transforms to improve carousel performance in modern browsers."
now override the 3.3 new styles for modern browsers & apply opacity
*/
@media all and (transform-3d), (-webkit-transform-3d) {
    .carousel-fade .carousel-inner > .item.next,
    .carousel-fade .carousel-inner > .item.active.right {
      opacity: 0;
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
    }
    .carousel-fade .carousel-inner > .item.prev,
    .carousel-fade .carousel-inner > .item.active.left {
      opacity: 0;
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
    }
    .carousel-fade .carousel-inner > .item.next.left,
    .carousel-fade .carousel-inner > .item.prev.right,
    .carousel-fade .carousel-inner > .item.active {
      opacity: 1;
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
    }
}

person coderasd    schedule 23.12.2014    source источник


Ответы (1)


Я думаю, что вы также должны принять во внимание position (left) ваших .item. Я также добавил дополнительный класс (.anim) к <div class="carousel-inner" role="listbox" > вместо оболочки с классом .carousel.

Затем вы сможете использовать код CSS, как показано ниже:

@-webkit-keyframes fadeIn {
0% {opacity: 0;}
100% {opacity: 1;}
}
@keyframes fadeIn {
0% {opacity: 0;}
100% {opacity: 1;}
}

@-webkit-keyframes fadeOut {
  0% {opacity: 1;}
  100% {opacity: 0;}
}

@keyframes fadeOut {
  0% {opacity: 1;}
  100% {opacity: 0;}
}

.carousel-inner.anim > .item {
  left: 0;
}

.carousel-inner.anim > .next,
.carousel-inner.anim > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner.anim > .next.left {

  -webkit-backface-visibility: visible;
          backface-visibility: visible;
  -webkit-animation-name: fadeIn;
          animation-name: fadeIn;
  -webkit-animation-duration:0.6s;
          animation-duration:0.6s;


}
.carousel-inner.anim > .prev.right {
  -webkit-animation-name: fadeIn;
          animation-name: fadeIn;
  -webkit-animation-duration:0.6s;
          animation-duration:0.6s;


}
.carousel-inner.anim > .active.left {
    -webkit-animation-name: fadeOut;
          animation-name: fadeOut;
  -webkit-animation-duration:0.6s;
          animation-duration:0.6s;


}
.carousel-inner.anim > .active.right {
        -webkit-animation-name: fadeOut;
          animation-name: fadeOut;
  -webkit-animation-duration:0.6s;
          animation-duration:0.6s;

}

Вышеупомянутое работает для v3.2. Демонстрация: http://www.bootply.com/7scRiubjja

Начиная с версии 3.3 код Less/CSS для карусели был изменен. Переходы и трансформация заключены в @media all and (transform-3d), (-webkit-transform-3d) {}

Чтобы использовать вышеуказанное для v3.3+, вы должны переписать свой код с помощью вышеуказанного медиа-запроса или сбросить исходный код. Исходный код можно сбросить с помощью следующего кода CSS:

.carousel-inner > .item {
  -webkit-transition: none;
          transition: none;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: none;
            transition: none;
    -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
    -webkit-perspective: 1000;
            perspective: 1000;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
    left: 0;
  }
}

Демонстрация: http://www.bootply.com/PHBjOgJlIt

На основе ответа, данного здесь Bootstrap carousel-fade больше не работает с maxcdn 3.3.bootstrap.min.css, вы также можете сбросить его с помощью:

.carousel-inner.anim > .item {
  left: 0;
  -webkit-transform: translate3d(0, 0, 0) !important;
          transform: translate3d(0, 0, 0) !important;
}
person Bass Jobsen    schedule 24.12.2014