Bootstrap carousel with fixed height: center image horizontally or vertically based on image dimensions

前端 未结 4 1890
借酒劲吻你
借酒劲吻你 2021-02-07 15:05

I have a bootstrap carousel with a fixed height. Here is the CSS:

.carousel-custom .carousel-outer {
  position: relative;
}


@media(min-width: 992px){
    .car         


        
相关标签:
4条回答
  • 2021-02-07 15:49

    simply use image on absolute if your slider height is fixed

    <div id="carousel-example-generic" class="carousel slide" 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>
        <li data-target="#carousel-example-generic" data-slide-to="2"></li>
      </ol>
    
      <!-- Wrapper for slides -->
      <div class="carousel-inner" role="listbox">
        <div class="item active">
          <div class="middle">
            <img src="http://placehold.it/1920x500">
          </div>
        </div>
        <div class="item">
          <div class="middle">
            <img src="http://placehold.it/1920x300">
          </div>
        </div>
        <div class="item">
          <div class="middle">
            <img src="http://placehold.it/600x900">
          </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>
    

    css

    .carousel {
      width: 500px;  /*test width*/
      height: 300px; /*what ever height */
    }
    
    .middle {
      position: relative;
      height: 300px; /*what ever height */
    }
    
    .middle img {
      max-width: 100%;
      max-height: 100%; /*what ever height */
      margin: auto;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
    }
    

    see fiddle

    0 讨论(0)
  • 2021-02-07 15:53

    Since the .item elements are relative positioned you could just position the img elements absolutely. Giving the .item elements a fixed height, will help to vertically and horizontally align the images inside.

    I'm sure there are lots of different ways to do this, here is one example. Hope it helps.

    @import url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css');
    
    body {
      background-color: black;
    }
    
    .carousel-inner > .item {
      height: 100vh;
    }
    
    .carousel-inner > .item > img {
      position: absolute;
      top: 50%;
      left: 50%;
      -webkit-transform: translate(-50%, -50%);
      -ms-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
      max-height: 800px;
      width: auto;
    }
    
    .carousel-control.left,
    .carousel-control.right {
      background-image: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    
    <div class="container">
    
      <div id="carousel-example-generic" class="carousel slide" 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>
          <li data-target="#carousel-example-generic" data-slide-to="2"></li>
        </ol>
    
        <!-- inner -->
        <div class="carousel-inner" role="listbox">
          <div class="item active">
            <img src="http://placehold.it/1200x600/2c3e50/000" alt="">
          </div>
          <div class="item">
            <img src="http://placehold.it/600x1200/d35400/000" alt="">
          </div>
          <div class="item">
            <img src="http://placehold.it/600x600/c0392b/000" alt="">
          </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>
    
    </div>

    0 讨论(0)
  • 2021-02-07 16:00

    If you try to achieve this in bootstrap carousel, you will end up with black bars in top and bottom...I was stuck with similar problem and ended up using "flickity" js library..it works lot better than tryig to achieve this on something not meant for this....

    0 讨论(0)
  • 2021-02-07 16:10

    Alright, I've been fiddling around for a while now. Ended up with the result below. Hope it helps and answers your question (at least for a small part).

    <head>
        <title>Bootstrap Carousel</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
        <style>
        html,
        body {
            height: 100%;
        }
    
        .carousel,
        .item,
        .active {
            height: 100%;
        }
    
        .carousel-inner {
            height: 100%;
        }
    
        /* Background images are set within the HTML using inline CSS, not here */
    
        .fill {
            width: 100%;
            height: 100%;
            background-position: center;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            background-size: cover;
            -o-background-size: cover;
        }
    
        footer {
            margin: 50px 0;
        } 
    
        .tester {
            height: 100%;
        }
        </style>
    </head>
    <body>
        <div class="tester">
        <!-- Full Page Image Background Carousel Header -->
        <header id="myCarousel" class="carousel slide">
            <!-- Indicators -->
            <ol class="carousel-indicators">
                <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
                <li data-target="#myCarousel" data-slide-to="1"></li>
                <li data-target="#myCarousel" data-slide-to="2"></li>
            </ol>
            <!-- Wrapper for Slides -->
            <div class="carousel-inner">
                <div class="item active">
                    <!-- Set the first background image using inline CSS below. -->
                    <div class="fill" style="background-image:url('http://res.cloudinary.com/dltbqhact/image/upload/v1459268139/jinallzupvfazqqr67nd.png');"></div>
                    <div class="carousel-caption">
                        <h2>Caption 1</h2>
                    </div>
                </div>
                <div class="item">
                    <!-- Set the second background image using inline CSS below. -->
                    <div class="fill" style="background-image:url('http://res.cloudinary.com/dltbqhact/image/upload/v1459268146/k1yov5hpur8mgsb9r15p.png');"></div>
                    <div class="carousel-caption">
                        <h2>Caption 2</h2>
                    </div>
                </div>
                <div class="item">
                    <!-- Set the third background image using inline CSS below. -->
                    <div class="fill" style="background-image:url('http://res.cloudinary.com/dltbqhact/image/upload/v1459268157/lqfandhmutdkppjrl932.png');"></div>
                    <div class="carousel-caption">
                        <h2>Caption 3</h2>
                    </div>
                </div>
            </div>
            <a class="left carousel-control" href="#myCarousel" data-slide="prev">
                <span class="icon-prev"></span>
            </a>
            <a class="right carousel-control" href="#myCarousel" data-slide="next">
                <span class="icon-next"></span>
            </a>
        </header>
        <script>
        $('.carousel').carousel({
            interval: 5000 //changes the speed
        })
        </script>
        </div>
    </body>
    

    Again, hope it helps!

    0 讨论(0)
提交回复
热议问题