Bootstrap 轮播图图片高度

4
我在使用Bootstrap v4 图片轮播时遇到了一些问题。当我缩小浏览器宽度时,图片的高度保持不变,但是图片的宽度变小,导致图片在高度上被拉伸得很严重。
我已经查看了Stack Overflow上的类似帖子,并尝试了评论中提到的所有方法,但仍然无法解决问题。因此,我决定在这里发布一个新的帖子来求助。
这是一个codepen链接:https://codepen.io/anon/pen/owNyyx,但是如果您不想访问codepen,我也将代码粘贴在下面。
<div id="carouselExampleIndicators" 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>
  </ol>
  <div class="carousel-inner" role="listbox">
    <div class="carousel-item active">
      <img class="d-block img-fluid" src="images/image1.png" alt="First slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>Random Title for image1</h3>
        <p>Random description1</p>
      </div>
    </div>
    <div class="carousel-item">
      <img class="d-block img-fluid" src="images/image2.png" alt="Second slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>Random title for image2</h3>
        <p>Random description2</p>
      </div>
    </div>
    <div class="carousel-item">
      <img class="d-block img-fluid" src="images/image3.png" alt="Third slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>Random title for image3</h3>
        <p>Random description3</p>
      </div>
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

您可以编写一个窗口调整大小事件,根据图像的纵横比和窗口当前宽度设置高度属性。我曾在我的一个项目中这样做过。 - DASH
你是指在CSS中使用@media规则吗?还是使用一些JavaScript事件? - Tim Levinsson
你可以使用 @media,但你需要编写很多 CSS。如果你想要最好的结果,使用 window.onresize = function(event) {}; 如果你使用 jQuery,则使用 $(window).resize(function(){//这里是你的代码}); - DASH
好的,谢谢。我会尝试的。 - Tim Levinsson
我已经有一份代码准备好了,但现在我无法访问它。我会在我获得访问权限后尽快发布。 - DASH
1个回答

4
这是因为img的父元素,.carousel-itemdisplay: flex,而img是一个flex-child,所以它通过父元素上默认的 align-items: stretch 进行 "stretch"。
有许多方法可以解决这个问题。最简单的方法可能是给 align-items 一个非 stretch 的值。
或者,如果您不想应用自定义CSS并保持更改在标记中,可以将每个 img 包装在像 divfigure 这样的块级元素中,或者其他适合您网站的元素中。

.carousel-item {
  align-items: flex-start;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<div id="carouselExampleIndicators" 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>
  </ol>
  <div class="carousel-inner" role="listbox">
    <div class="carousel-item active">
      <img class="d-block img-fluid" src="http://lorempixel.com/1900/500" alt="First slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>Cheap prizes for hairstyling</h3>
        <p>Good prizes to style your hair</p>
      </div>
    </div>
    <div class="carousel-item">
      <img class="d-block img-fluid" src="http://lorempixel.com/1900/500/cats/2" alt="Second slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>3 Years of experience as Hairstylist</h3>
        <p>Awesome results !</p>
      </div>
    </div>
    <div class="carousel-item">
      <img class="d-block img-fluid" src="http://lorempixel.com/1900/500/cats/3" alt="Third slide">
      <div class="carousel-caption d-none d-md-block">
        <h3>Some random caption text</h3>
        <p>Some random description</p>
      </div>
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>


@TimLevinsson 不用谢。我花了一分钟才弄明白!好问题,我认为这对未来的人们会很有用,因为Bootstrap文档中的轮播组件将img作为.carousel-item的子元素。所以我认为这对大家来说会是一个经常遇到的问题。 - Michael Coker

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