【问题标题】:Responsive twitter bootstrap carousel with multiple elements具有多个元素的响应式 Twitter 引导轮播
【发布时间】:2016-01-15 21:31:36
【问题描述】:

我有一个 twitter 引导轮播,连续 3 个项目。示例是here。我怎样才能让它响应?我想为移动设备显示一个元素。

<div id="myCarousel" class="carousel slide">  
    <div class="carousel-inner">
        <div class="item active">
            <div class="col-xs-4">
                <a href="#"><img src="http://placehold.it/500/bbbbbb/fff&amp;text=1" class="img-responsive"></a>
            </div>
        </div>
        <div class="item">
             <div class="col-xs-4">
                  <a href="#"><img src="http://placehold.it/500/CCCCCC&amp;text=2" class="img-responsive"></a>
             </div>
        </div>
        <div class="item">
            <div class="col-xs-4">
                <a href="#"><img src="http://placehold.it/500/eeeeee&amp;text=3" class="img-responsive"></a>
            </div>
        </div>
        <div class="item">
            <div class="col-xs-4">
                <a href="#"><img src="http://placehold.it/500/f4f4f4&amp;text=4" class="img-responsive"></a>
            </div>
        </div>
        <div class="item">
            <div class="col-xs-4">
                <a href="#"><img src="http://placehold.it/500/fcfcfc/333&amp;text=5" class="img-responsive"></a>
            </div>
        </div>
        <div class="item">
            <div class="col-xs-4">
                <a href="#"><img src="http://placehold.it/500/f477f4/fff&amp;text=6" class="img-responsive"></a>
            </div>
        </div>
    </div>

    <!-- Controls -->
    <a class="left carousel-control" href="#myCarousel" 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="#myCarousel" role="button" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>

.carousel-inner .active.left  { left: -33%;             }
.carousel-inner .active.right { left: 33%;              }
.carousel-inner .next         { left: 33%               }
.carousel-inner .prev         { left: -33%              }
.carousel-control.left        { background-image: none; }
.carousel-control.right       { background-image: none; }
.carousel-inner .item         { background: white;      }

$('#myCarousel').carousel({
    interval: 10000
})

$('.carousel .item').each(function(){
    var next = $(this).next();
    if (!next.length) {
        next = $(this).siblings(':first');
    }
    next.children(':first-child').clone().appendTo($(this));

    if (next.next().length>0) {
        next.next().children(':first-child').clone().appendTo($(this));
    }
    else {
        $(this).siblings(':first').children(':first-child').clone().appendTo($(this));
    }
});

【问题讨论】:

  • @Anil - 这不是因为它只有 1 个桌面项目,而不是我说的 3 个。
  • 1 项同时适用于桌面和移动设备?
  • 我猜你对 OP 投了反对票?如果你看到修改后的答案,我想这就是你要找的。​​span>
  • @paulalexandru 检查我的答案。希望我会有所帮助。每次更改宽度进行测试时记得刷新浏览器!

标签: html css twitter-bootstrap twitter-bootstrap-3 responsive-design


【解决方案1】:

我找到了解决方案。将col-xs-4 更改为col-md-4

然后将javascript代码更改为

$('#myCarousel').carousel({
  interval: 10000
})
if($( window ).width() >= 768){
$('.carousel .item').each(function(){
  var next = $(this).next();
  if (!next.length) {
    next = $(this).siblings(':first');
  }
  next.children(':first-child').clone().appendTo($(this));

  if (next.next().length>0) {
    next.next().children(':first-child').clone().appendTo($(this));
  }
  else {
    $(this).siblings(':first').children(':first-child').clone().appendTo($(this));
  }
});
}

当浏览器宽度大于等于768px时,会连续显示三张图片。当宽度小于 768px 时,只显示 1 张图片。

Link to my fiddle

在移动设备中

在桌面

注意:每次更改宽度后刷新浏览器。

希望对你有帮助

【讨论】:

  • 这个答案的输出基本上是我最初的确切答案。这不是 OP 想要的。
  • @Tarekis 我也编辑了 javascript。请看
  • 我说的是输出而不是代码,我没有指责你抄袭,但你的答案不是 OP 想要的,我最初也误解了它。它也有显示问题,就像我的初始答案一样,项目显示在彼此下方。
  • 他喜欢在桌面上连续显示 3 个项目。和移动设备中的 1 项。但您的代码不能满足他的要求。
  • 是的,我知道这一点,是的,现在确实如此。调整结果页面的大小,您会看到。另外,在您的移动示例中更改为#6,您会看到我的意思是行不通的。
【解决方案2】:

请参阅 Bootstrap grid system 文档,在那里您会找到解决问题所需的规则。

您将第一个column 的类更改为col-xs-12 col-md-4 或类似的东西,将另一个column 的类更改为hidden-xs hidden-sm col-md-4

col-xs-12 将在非常小的屏幕上显示 100% 的项目,而一旦您进入中等屏幕,col-md-4 将使项目占据其行宽的 33.3..%。 hidden-xshidden-sm 将阻止项目显示在 xssm 屏幕上。

您将标记更改为:

<div class="item active">
      <div class="row">
        <div class="col-xs-12 col-md-4"><a href="#"><img src="http://placehold.it/500/bbbbbb/fff&amp;text=1" class="img-responsive"></a></div>
        <div class="hidden-xs hidden-sm col-md-4"><a href="#"><img src="http://placehold.it/500/bbbbbb/fff&amp;text=1" class="img-responsive"></a></div>
        <div class="hidden-xs hidden-sm col-md-4"><a href="#"><img src="http://placehold.it/500/bbbbbb/fff&amp;text=1" class="img-responsive"></a></div>
      </div>    
    </div>

并删除此 CSS:

.carousel-inner .active.left  { left: -33%;             }
.carousel-inner .active.right { left: 33%;              }
.carousel-inner .next         { left: 33%               }
.carousel-inner .prev         { left: -33%              }

您的 Javascript 也会复制您的元素,但由于您需要在列上使用不同的类,因此您需要在需要时对其进行更改。

编辑: 想我只是想出了你真正想要做什么,抱歉之前的误解。

这是JSFiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2014-09-24
    • 2014-03-10
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多