Reputation: 3611
I'm styling a Bootstrap 4 carousel, and I need the carousel indicators to go into the top left corner. But I also need them to be vertically aligned with the navigation above it, that's wrapped in a Bootstrap class .container.
Since I know my explanation is horrible, here's an image showing you exactly what I mean:
If I use position absolute, and add top: 0, left: 0 (or another number), the positioning moves depending on the screen size and it doesn't match the navigation.
Here's the outline of my code:
.carousel-indicators {
top: 10px;
left: 0;
right: auto;
}
.carousel-indicators li {
width: 20px;
height: 20px;
border-radius: 100%;
}
.carousel-indicators li:not(:last-child) {
margin-right: 20px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<div class="container">
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
</div>
<div id="carousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="3"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="First slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Second slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Third slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Fourth slide">
</div>
</div>
</div>
How can I achieve this? What's the best approach?
Thank you!
Upvotes: 3
Views: 9722
Reputation: 1080
Just override justify-content and margin of carousel-indicator then add padding as below.Also wrap indicators inside container and make it as position:relative by adding predefined class position-relative to it.
.my-slider .carousel-indicators {
top: 10px;
justify-content:flex-start;
margin:0;
padding-left:15px;
padding-right:15px;
}
.carousel-indicators li {
width: 20px;
height: 20px;
border-radius: 100%;
}
.carousel-indicators li:not(:last-child) {
margin-right: 20px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<div class="container">
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
</div>
<div id="carousel" class="my-slider carousel slide" data-ride="carousel">
<div class="container position-relative">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="3"></li>
</ol>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="First slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Second slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Third slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://via.placeholder.com/800x300" alt="Fourth slide">
</div>
</div>
</div>
Upvotes: 6