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
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>
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.
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.
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
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>
Version of background .item
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"/>