Stretch and fill image in Bootstrap carousel

前端 未结 14 1308
情歌与酒
情歌与酒 2021-01-11 13:11

I am using bootstrap carousal and having some problem with image height and width. Even though I define it in the img attribute it still displays a

相关标签:
14条回答
  • 2021-01-11 13:59

    The carousel will grow to fit whatever the parent is by default, which in your case is .col-md-6 and .col-sm-6. If you want the carousel to be 300x300, style the carousel class/id or whatever to be the dimensions you want.

    Then after that, bootstrap applies height: auto; to images in the carousel, which will override the height attribute you've specified in the HTML. 2 ways you can address that - either make the height (and for consistency sake, width, too) an inline style on the img tag if you want to keep it in the HTML, or apply the height to carousel images in your CSS file.

    body {
        margin: 10px;
    }
    .carousel, .carousel img {
      width: 300px;
    }
    .carousel img {
      height: 300px!important;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css" rel="stylesheet"/>
    <link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
    <div class="col-md-6 col-sm-6">
      <div id="myCarousel" class="carousel slide">
        <div class="carousel-inner">
          <div class="item active">
            <img src="http://placehold.it/400x400">
          </div>
          <div class="item">
            <img src="http://placehold.it/350x450">
          </div>
          <div class="item">
            <img src="http://placehold.it/350x350">
          </div>
        </div>
        <!-- Controls -->
        <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>
      </div>
    </div>

    0 讨论(0)
  • 2021-01-11 14:00

    Make your image take up 100% of the container size. using height:100% and width:100%.

    Then restrict the size by setting values of the container to desired size.

    .item{
      height:300px;
      width:350px;
    }
    .item img{
      width:100%;
      height:100%;
    }
    

    I hope this helps.

    0 讨论(0)
  • 2021-01-11 14:00

    if it's okay for you to use simple javaScript, here is the updated fiddle https://jsfiddle.net/a1x1dnaa/2/

    what i have done is, used the image as background and removed the <img> tag.

    jQuery(function(){
      var items = $('.item');
      items.each(function() {
        var item = $(this);
        img = item.find("img");
        img.each(function() {
            var thisImg = $(this);
            url = thisImg.attr('src');
            thisImg.parent().attr('style', 'background-image:url('+url+')');
            thisImg.remove();
        });
      });
    });
    

    then you can use some styles to make the image fill the div

    .item {
      -webkit-background-size: cover;
      background-size: cover;
      background-repeat: no-repeat;
      background-position: 50% 50%;
      height: 200px; //you can use the height as you need 
    }
    

    this should work for you.

    if you don't want to use javaScript, you can simply use the image as inline-style

    <div class="item" style="background-image: url(http://placehold.it/400x400)"></div>
    

    and use the same CSS as above.

    0 讨论(0)
  • 2021-01-11 14:01

    You can do that with the following styles:

    .carousel-inner .item{
      width: 600px; /* Any width you want */
      height: 500px; /* Any width you want */
    }
    .carousel-inner .item img{
      min-width: 100%;
      min-height: 100%;
    }
    

    By setting min-* to the image attributes, we're making sure we have at least 100% of both width and height.

    Updated JSFiddle

    0 讨论(0)
  • 2021-01-11 14:02

    img tag using "object-fit: cover" property

    .carousel {
        height: 300px;
    }
    
    .carousel-inner {
        height: 100%;
    }            
    
    .item {
        width: 100%;
        height: 100%;                
    }
    
    .item img {
        object-fit: cover;
    /*
        object-fit: fill;
        object-fit: none;
        object-fit: contain;
        object-fit: scale-down;
    */
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css" />
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
            
    <div class="col-md-6 col-sm-6">
    
        <div id="myCarousel" class="carousel slide" data-ride="carousel">
    
            <!-- 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" >
                  <img src="http://placehold.it/650x450/aaa&text=Item 1" style="width: 100%; height: 100%" />            
                </div>
    
                <div class="item" >
                  <img src="http://placehold.it/350x350/aaa&text=Item 2" style="width: 100%; height: 100%" />            
                </div>
    
                <div class="item" >
                  <img src="http://placehold.it/350x350/aaa&text=Item 3" style="width: 100%; height: 100%" />            
                </div>
    
            </div>
    
            <!-- Left and right controls -->
            <a class="left carousel-control" href="#myCarousel" data-slide="prev">
                <span class="glyphicon glyphicon-chevron-left"></span>
                <span class="sr-only">Previous</span>
            </a>
            <a class="right carousel-control" href="#myCarousel" data-slide="next">
                <span class="glyphicon glyphicon-chevron-right"></span>
                <span class="sr-only">Next</span>
            </a>
    
        </div>
    
    </div>

    Codepen

  • Editor
  • Full view
  • Version of background .item

0 讨论(0)
  • 2021-01-11 14:07

    Try removing the styling from the img tag:

    <!--from-->
    
    <img src="http://placehold.it/350x350/aaa&text=Item 3" height="300" width="300" />
    <!--to-->
    <img src="http://placehold.it/350x350/aaa&text=Item 3"/>

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