样式化Bootstrap轮播指示器

11

我试图使默认的Bootstrap轮播指示器变成非常细的黄线,固定在底部,如下所示。

我已经将它们放置在页面底部,但似乎无法将它们更改为矩形或更改其颜色。

HTML

<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>
    <li data-target="#myCarousel" data-slide-to="3"></li>
</ol>

CSS

.carousel-indicators {
    margin: 0px;
    height: 0px;
}

.carousel-indicators ol {
    width: 100%;
}

.carousel-indicators li {
    height: 3px !important;
    border-radius: 0px !important;
    width: 25%;
}

有几件事情:首先,您的第二个规则不会被评估-您正在针对.carousel-indicators类元素内部的ol,但是ol就是该元素。如果您只想将width:100%应用于同一元素,则可以将其移至上面的样式规则中。其次-我尝试将您的.carousel-indicators li规则粘贴到Bootstrap网站上进行测试,它确实将指示器压缩成了细长的矩形-因此,如果它对您不起作用,则可能未应用规则或被其他未在此处包含的代码覆盖。 - Alexander Nied
这可能会有所帮助。http://askseeker.com/blogs/change-the-style-of-bootstrap-carousel/ - smzapp
4个回答

17

这样做可以吗?请注意,因为我只是将宽度设置为33%,所以宽度不是完全准确的。

.item img {
  width: 100%;
  height: auto
}

.carousel {
  position: relative;
  width: 200px;
  height: 100px;
}

ol.carousel-indicators {
  position: absolute;
  bottom: 0;
  margin: 0;
  left: 0;
  right: 0;
  width: auto;
}

ol.carousel-indicators li,
ol.carousel-indicators li.active {
  float: left;
  width: 33%;
  height: 10px;
  margin: 0;
  border-radius: 0;
  border: 0;
  background: transparent;
}

ol.carousel-indicators li.active {
  background: yellow;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div id="carousel" class="carousel slide" data-ride="carousel">
  <ol class="carousel-indicators">
    <li data-target="#carousel" data-slide-to="0" class="active"></li>
    <li data-target="#carousel" data-slide-to="1"></li>
    <li data-target="#carousel" data-slide-to="2"></li>
  </ol>
  <div class="carousel-inner" role="listbox">
    <div class="item active">
      <img src="http://placehold.it/200x100" alt="Slide 1">
      <div class="carousel-caption">
        Slide 1
      </div>
    </div>
    <div class="item">
      <img src="http://placehold.it/200x100" alt="Slide 2">
      <div class="carousel-caption">
        Slide 2
      </div>
    </div>
    <div class="item">
      <img src="http://placehold.it/200x100" alt="Slide 3">
      <div class="carousel-caption">
        Slide 3
      </div>
    </div>
  </div>
  <a class="left carousel-control" href="#carousel" 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" role="button" data-slide="next">
    <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


谢谢,我只需要做一些调整并更改一些名称,它就立即起作用了。我想我只是被所有的<ol> <li>标签和哪些样式控制了什么标签弄糊涂了。 - cosmichero2025
一个不错的改进是根据指标的总数来调整指标的大小,而不是假定为三个。 - Aaron Hudon

4

很棒的CSS!我使用它来创建半白色的球形指示器,以及黄色的活动指示器。

ol.carousel-indicators {
     position: absolute;
     bottom: 5px;
     margin: 0;
     left: 0;
     right: 0;
     width: auto;
}

ol.carousel-indicators li, ol.carousel-indicators li.active {
     width: 1rem;
     height: 1rem;
     margin: 0;
     border-radius: 50%;
     border: 0;
     background: transparent;
}

ol.carousel-indicators li {
     background: rgba(255,255,255,0.39);
     margin-left: .5rem;
     margin-right: .5rem;
}

ol.carousel-indicators li.active {
     background: yellow;
}

1
我刚刚为自己编写了类似的代码,我认为它会更有帮助。 通过使用Flex布局,您可以类似地拉伸指示器,而不必担心它们的宽度 flex-grow:1; 可以完成这个任务。

https://codepen.io/ophiuch/pen/Jzowbo

.carousel  /*slider */
{
 position: relative;
}
.carousel .carousel-indicators /* indicator wrapper*/
{
 position: absolute;
 bottom: 0;
 left:0px;
 width: 100%;
   margin: 0;
   left: 0;
  right: 0;
  width: 100%;
  display: flex; /* this is for indicators  */
}
#headcarousel_container .carousel-indicators li /* indicators*/
{
 flex-grow: 1;  /* make all indicator li similarly stretched */
 height: 40px;
 border-radius: 2px; 
}

#headcarousel_container .carousel-indicators li.active
{
 background-color:rgba(251,222,87,0.5) ;/* changes indicators color when it is active*/ 
}
.carousel .carousel-inner .item img
{
 width: 100%;
 height: 100vh;
 object-fit: cover; 
}
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Carousel</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <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>
</head>
<body>
    <!--slider -->
   <div  class="container-fluid" id="headcarousel_container" style="padding: 0;">
    <div id="headcarouselid" class="carousel slide" data-ride="carousel">
     <!-- indicators -->
     <ul class="carousel-indicators">
      <li class="active" data-target="#headcarouselid" data-slide-to="0"></li>
      <li class="" data-target="#headcarouselid" data-slide-to="1"></li>
      <li class="" data-target="#headcarouselid" data-slide-to="2"></li>
      <li class="" data-target="#headcarouselid" data-slide-to="3"></li>
      <li class="" data-target="#headcarouselid" data-slide-to="4"></li>
     </ul>
     <!-- Wrapper for slides -->
     <div class="carousel-inner">
      <div class="item active">
       <img src="https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg" title="slidepicture" alt="slidepicture">
      </div>
      <div class="item">
       <img src="https://cdn.pixabay.com/photo/2014/07/28/20/39/landscape-404072_960_720.jpg" title="slidepicture" alt="slidepicture">
      </div>
      <div class="item">
       <img src="https://cdn.pixabay.com/photo/2018/08/23/07/35/thunderstorm-3625405_960_720.jpg" title="slidepicture" alt="slidepicture">
      </div>
      <div class="item">
       <img src="https://cdn.pixabay.com/photo/2017/09/08/20/29/chess-2730034_960_720.jpg" title="slidepicture" alt="slidepicture">
      </div>
      <div class="item">
       <img src="https://cdn.pixabay.com/photo/2018/05/30/15/31/rustic-3441673_960_720.jpg" title="slidepicture" alt="slidepicture">
      </div>      
     </div>
     <!-- Left and right controls -->
     <a class="carousel-control left" href="#headcarouselid" data-slide="prev">
      <span class="glyphicon glyphicon-chevron-left"></span>
     </a>
     <a class="carousel-control right" href="#headcarouselid" data-slide="next">
      <span class="glyphicon glyphicon-chevron-right"></span>
     </a>      
    </div>
   </div>

</body>
</html>


0
这段代码更改了库react-bootstrapprev和next轮播图标控件:
& span.carousel-control-prev-icon, & span.carousel-control-next-icon{
        background-color: black;
    }

是的,只有背景。图标本身是一个xml图像,所以找不到改变颜色的方法。:/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接