Twitter Bootstrap carousel different height images cause bouncing arrows

后端 未结 14 976
刺人心
刺人心 2020-12-07 16:11

I\'ve been using Bootstrap\'s carousel class and it has been straightforward so far, however one problem I\'ve had is that images of different heights cause the arrows to bo

相关标签:
14条回答
  • 2020-12-07 16:48

    Note that the jQuery solutions that normalize height on here may break with IE.

    After some testing (with Bootstrap 3) it looks like IE doesn't bother resizing images unless they're actually being rendered. If you make the window smaller, the image of the active item gets resized but the background images preserve their height, so the "tallest" height stays the same.

    In my case we were only rendering images on these items, and the images were only ever a few pixels off. So I opted to style all of the images with the height of the active image. Everything else gets resized to fit the height, so keep that in mind if your aspect ratios vary a lot.

        function carouselNormalization() {
            var items = $('.carousel .item');
    
            if (items.length) {
                function normalizeHeights() {
                    let activeImageHeight = items.filter('.active').find('img').height();
                    items.each(function() {
                        $(this).find('img').css('height',  activeImageHeight + 'px');
                    });
                };
                normalizeHeights();
    
                $(window).on('resize orientationchange', function() {
                    items.each(function() {
                        $(this).find('img').removeAttr('style');
                    });
                    normalizeHeights();
                });
            }
        }
        $(window).on('load', carouselNormalization);
    
    0 讨论(0)
  • 2020-12-07 16:51

    More recently I am testing this CSS source for the Bootstrap carousel

    The height set to 380 should be set equal to the biggest/tallest image being displayed...

    Please Vote up/down this answer based on usability testing with the following CSS thanks.

    /* CUSTOMIZE THE CAROUSEL
    -------------------------------------------------- */
    
    /* Carousel base class */
    .carousel {
      max-height: 100%;
      max-height: 380px;
      margin-bottom: 60px;
      height:auto;
    }
    /* Since positioning the image, we need to help out the caption */
    .carousel-caption {
      z-index: 10;
        background: rgba(0, 0, 0, 0.45);
    }
    
    /* Declare heights because of positioning of img element */
    .carousel .item {
      max-height: 100%;
      max-height: 380px;
      background-color: #777;
    }
    .carousel-inner > .item > img {
     /*  position: absolute;*/
      top: 0;
      left: 0;
      min-width: 40%;
      max-width: 100%;
      max-height: 380px;
      width: auto;
      margin-right:auto;
      margin-left:auto;
      height:auto;
    
    }
    
    0 讨论(0)
  • 2020-12-07 16:53

    You can use this lines in the css file:

    ul[rn-carousel] {
     > li {
     position: relative;
     margin-left: -100%;
    
     &:first-child {
       margin-left: 0;
       }
      }
    }
    
    0 讨论(0)
  • 2020-12-07 16:55

    Try with this jQuery code that normalize Bootstrap carousel slide heights

    function carouselNormalization() {
      var items = $('#carousel-example-generic .item'), //grab all slides
        heights = [], //create empty array to store height values
        tallest; //create variable to make note of the tallest slide
    
      if (items.length) {
        function normalizeHeights() {
          items.each(function() { //add heights to array
            heights.push($(this).height());
          });
          tallest = Math.max.apply(null, heights); //cache largest value
          items.each(function() {
            $(this).css('min-height', tallest + 'px');
          });
        };
        normalizeHeights();
    
        $(window).on('resize orientationchange', function() {
          tallest = 0, heights.length = 0; //reset vars
          items.each(function() {
            $(this).css('min-height', '0'); //reset min-height
          });
          normalizeHeights(); //run it again 
        });
      }
    }
    
    /**
     * Wait until all the assets have been loaded so a maximum height 
     * can be calculated correctly.
     */
    window.onload = function() {
      carouselNormalization();
    }

    0 讨论(0)
  • 2020-12-07 16:57

    If you want to have this work with images of any height and without fixing the height, just do this:

    $('#myCarousel').on("slide.bs.carousel", function(){
         $(".carousel-control",this).css('top',($(".active img",this).height()*0.46)+'px');
         $(this).off("slide.bs.carousel");
    });
    
    0 讨论(0)
  • 2020-12-07 16:59

    In case someone is feverishly googling to solve the bouncing images carousel thing, this helped me:

    .fusion-carousel .fusion-carousel-item img {
        width: auto;
        height: 146px;
        max-height: 146px;
        object-fit: contain;
    }
    
    0 讨论(0)
提交回复
热议问题