Retros
Retros

Reputation: 3611

Bootstrap 4 Carousel Indicators positioning

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:

enter image description here

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

Answers (1)

Pushparaj
Pushparaj

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

Related Questions