使Bootstrap 3选项卡响应

Chr*_*ina 26 jquery twitter-bootstrap twitter-bootstrap-3

目前,在Bootstrap 3中设置选项卡时,选项卡不响应.

这个:

在此输入图像描述

变成这样:

在此输入图像描述

CSS.修复它的外观很容易,只需在最大宽度处移除浮子等.但是,内容与选项卡脱节,因此一堆选项卡将像标签一样工作,但在较小的视口上,您可能会看到内容的变化,也可能看不到内容的变化.


这是制作标签式导航的基本html:

      <!--begin tabs going in wide content -->
       <ul class="nav nav-tabs" id="maincontent" role="tablist">
          <li class="active"><a href="#home" role="tab" data-toggle="tab">Home</a></li>
          <li><a href="#profile" role="tab" data-toggle="tab">Profile</a></li>
          <li class="dropdown">
             <a href="#" id="myTabDrop1" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
             <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1">
                <li><a href="#dropdown1" tabindex="-1" role="tab" data-toggle="tab">@fat</a></li>
                <li><a href="#dropdown2" tabindex="-1" role="tab" data-toggle="tab">@mdo</a></li>
             </ul>
          </li>
       </ul><!--/.nav-tabs.content-tabs -->


       <div class="tab-content">

          <div class="tab-pane fade in active" id="home">
             <p>Home Content : ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="profile">
             <p>Profile Content : ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="dropdown1">
             <p>Dropdown1 - ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="dropdown2">
             <p>Dropdown 2 - ...</p>
          </div><!--/.tab-pane -->

       </div><!--/.tab-content -->
Run Code Online (Sandbox Code Playgroud)

如何将Tabs转换为Accordion或Collapse,以便它对视口友好?

Lee*_*Lee 30

Slack有一种很酷的方式可以在一些管理页面上使标签小视口友好.我用bootstrap做了类似的东西.这是一个标签→下拉列表.

演示:http://jsbin.com/nowuyi/1

这是大视口的样子: 作为标签

以下是它在小视口上的折叠方式:

崩溃的下拉列表

以下是它在小视口上展开的方式:

打开下拉列表

HTML与默认引导选项卡完全相同.

有一个小的JS片段,需要jquery(并在DOM中插入两个span元素):

$.fn.responsiveTabs = function() {
  this.addClass('responsive-tabs');
  this.append($('<span class="glyphicon glyphicon-triangle-bottom"></span>'));
  this.append($('<span class="glyphicon glyphicon-triangle-top"></span>'));

  this.on('click', 'li.active > a, span.glyphicon', function() {
    this.toggleClass('open');
  }.bind(this));

  this.on('click', 'li:not(.active) > a', function() {
    this.removeClass('open');
  }.bind(this));
};

$('.nav.nav-tabs').responsiveTabs();
Run Code Online (Sandbox Code Playgroud)

然后有很多css(更少):

@xs: 768px;


.responsive-tabs.nav-tabs {
  position: relative;
  z-index: 10;
  height: 42px;
  overflow: visible;
  border-bottom: none;

  @media(min-width: @xs) {
    border-bottom: 1px solid #ddd;
  }

  span.glyphicon {
    position: absolute;
    top: 14px;
    right: 22px;
    &.glyphicon-triangle-top {
      display: none;
    }
    @media(min-width: @xs) {
      display: none;
    }
  }

  > li {
    display: none;
    float: none;
    text-align: center;

    &:last-of-type > a {
      margin-right: 0;
    }

    > a {
      margin-right: 0;
      background: #fff;
      border: 1px solid #DDDDDD;

      @media(min-width: @xs) {
        margin-right: 4px;
      }
    }

    &.active {
      display: block;
      a {
        @media(min-width: @xs) {
          border-bottom-color: transparent; 
        }
        border: 1px solid #DDDDDD;
        border-radius: 2px;
      }
    }

    @media(min-width: @xs) {
      display: block;
      float: left;
    }

  }

  &.open {

    span.glyphicon {
      &.glyphicon-triangle-top {
        display: block;
        @media(min-width: @xs) {
          display: none;
        }
      }
      &.glyphicon-triangle-bottom {
        display: none;
      }
    }

    > li {
      display: block;

      a {
        border-radius: 0;
      }

      &:first-of-type a {
        border-radius: 2px 2px 0 0;
      }
      &:last-of-type a {
        border-radius: 0 0 2px 2px;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 不适用于bootstrap 4,我正在尝试适应它 (2认同)

Chr*_*ina 29

Bootstrap选项卡没有开箱即用的响应.响应,IMO,是一种风格变化,变化的功能是自适应的.有一些插件可以将Bootstrap 3选项卡转换为Collapse组件.最好的和最新的是:https://github.com/flatlogic/bootstrap-tabcollapse.

这是实现它的一种方法:

演示:http://jsbin.com/zibani/1/

编辑:http://jsbin.com/zibani/1/edit

这会将内容转换为折叠组件:

在此输入图像描述

依赖关系:

  1. Bootstrap 3.2 css或更高,但仍在3系列中
  2. Bootstrap 3.2 jQuery或更高版本但仍在3系列中
  3. 兼容版本的bootstrap-tabcollapse.js

HTML - 与添加类名的问题相同:

       <ul class="nav nav-tabs content-tabs" id="maincontent" role="tablist">
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$(document).ready(function() {

    // DEPENDENCY: https://github.com/flatlogic/bootstrap-tabcollapse
    $('.content-tabs').tabCollapse();

    // initialize tab function
    $('.nav-tabs a').click(function(e) {
        e.preventDefault();
        $(this).tab('show');
    });

});
Run Code Online (Sandbox Code Playgroud)

CSS - 胖手指和活动状态的可选项:

.panel-heading {
    padding: 0
}
.panel-heading a {
    display: block;
    padding: 20px 10px;
}
.panel-heading a.collapsed {
    background: #fff
}
.panel-heading a {
    background: #f7f7f7;
    border-radius: 5px;
}
.panel-heading a:after {
    content: '-'
}
.panel-heading a.collapsed:after {
    content: '+'
}
.nav.nav-tabs li a,
.nav.nav-tabs li.active > a:hover,
.nav.nav-tabs li.active > a:active,
.nav.nav-tabs li.active > a:focus {
    border-bottom-width: 0px;
    outline: none;
}
.nav.nav-tabs li a {
    padding-top: 20px;
    padding-bottom: 20px;
}
.tab-pane {
    background: #fff;
    padding: 10px;
    border: 1px solid #ddd;
    margin-top: -1px;
}
Run Code Online (Sandbox Code Playgroud)

  • 不确定为什么你拒绝我的编辑.您发布的两个链接已损坏.这是一个工作演示:http://jsfiddle.net/obliviga/gpavt9h0/ (7认同)
  • 演示链接和编辑链接在原始帖子中不起作用,但@ ralph-david-abernathy演示按预期工作! (3认同)

hay*_*lem 12

响应式Bootstrap选项卡

有一个新的:http://hayatbiralem.com/blog/2015/05/15/responsive-bootstrap-tabs/

此外,还有Codepen示例:http://codepen.io/hayatbiralem/pen/KpzjOL

没有需要的插件.它只使用了一点css和jquery.

这是一个示例选项卡标记:

<ul class="nav nav-tabs nav-tabs-responsive">
    <li class="active">
        <a href="#tab1" data-toggle="tab">
            <span class="text">Tab 1</span>
        </a>
    </li>
    <li class="next">
        <a href="#tab2" data-toggle="tab">
            <span class="text">Tab 2</span>
        </a>
    </li>
    <li>
        <a href="#tab3" data-toggle="tab">
            <span class="text">Tab 3</span>
        </a>
    </li>
    ...
</ul>
Run Code Online (Sandbox Code Playgroud)

..和jQuery代码也在这里:

(function($) {

  'use strict';

  $(document).on('show.bs.tab', '.nav-tabs-responsive [data-toggle="tab"]', function(e) {
    var $target = $(e.target);
    var $tabs = $target.closest('.nav-tabs-responsive');
    var $current = $target.closest('li');
    var $parent = $current.closest('li.dropdown');
        $current = $parent.length > 0 ? $parent : $current;
    var $next = $current.next();
    var $prev = $current.prev();
    var updateDropdownMenu = function($el, position){
      $el
        .find('.dropdown-menu')
        .removeClass('pull-xs-left pull-xs-center pull-xs-right')
        .addClass( 'pull-xs-' + position );
    };

    $tabs.find('>li').removeClass('next prev');
    $prev.addClass('prev');
    $next.addClass('next');

    updateDropdownMenu( $prev, 'left' );
    updateDropdownMenu( $current, 'center' );
    updateDropdownMenu( $next, 'right' );
  });

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

  • 很好,但是如果标题是顺序的,例如Day,Week,Month等,这种实现只有意义(从用户体验的角度来看).否则,如果标题是任意的,用户将会丢失. (2认同)

Fed*_*zio 11

我更喜欢基于水平滚动的css方案,比如android上的标签.这是我的解决方案,只需使用类nav-tabs响应:

<div class="nav-tabs-responsive">
  <ul class="nav nav-tabs" role="tablist">
    <li>...</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

还有两条css线:

.nav-tabs { min-width: 600px; }
.nav-tabs-responsive { overflow: auto; }
Run Code Online (Sandbox Code Playgroud)

600px是您将响应的重点(您可以使用引导变量设置它)

  • 在视觉上,不是最好的解决方案,但它工作得体,它可以几乎立即集成到任何网页. (4认同)

小智 5

纯 CSS 仅用于导航选项卡,对于小屏幕非常简单:

@media (max-width: 767px) {
     .nav-tabs {
         min-width: 100%;
         display: inline-grid;
     }
}
Run Code Online (Sandbox Code Playgroud)