Сделать Bootstrap 3 вкладки отзывчивым
В настоящее время, когда вы настраиваете вкладки в Bootstrap 3, вкладки не реагируют.
Это:
![enter image description here]()
Включение в это:
![enter image description here]()
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 -->
Как вы вставляете вкладки в Аккордеон или Коллапс, чтобы он был дружелюбен к виду?
Ответы
Ответ 1
Закладки Bootstrap не реагируют из коробки. Отзывчивый, ИМО, это изменение стиля, изменение функций - адаптивное. Есть несколько плагинов, чтобы включить вкладки Bootstrap 3 в компонент Collapse. Самый лучший и самый обновленный: https://github.com/flatlogic/bootstrap-tabcollapse.
Здесь один из способов его реализации:
Это превращает содержимое в компонент коллапса:
![enter image description here]()
Зависимости:
- Bootstrap 3.2 css или выше, но все еще в серии 3
- Bootstrap 3.2 jQuery или выше, но все еще в серии 3
- Совместимая версия bootstrap-tabcollapse.js
HTML - то же самое, что и вопрос с добавлением имени класса:
<ul class="nav nav-tabs content-tabs" id="maincontent" role="tablist">
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');
});
});
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;
}
Ответ 2
Slack имеет классный способ сделать вкладки с небольшим видом на некоторые из своих страниц администратора. Я сделал что-то подобное, используя бутстрап. Это своего рода вкладки → выпадающий список.
Демо: http://jsbin.com/nowuyi/1
Вот как это выглядит в большом окне просмотра:
![as tabs]()
Здесь он выглядит свернутым в небольшом окне просмотра:
![свернутое падение]()
Вот как он выглядит в небольшом окне просмотра:
![раскрывать раскрывающийся список]()
HTML точно такой же, как вкладки начальной загрузки по умолчанию.
Существует небольшой фрагмент JS, для которого требуется jquery (и вставляет два элемента span в DOM):
$.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();
И тогда есть много 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;
}
}
}
}
Ответ 3
![enter image description here]()
Есть новый: 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>
.. и коды 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);
Ответ 4
Я предпочитаю только схему css, основанную на горизонтальном прокрутке, например вкладки на Android. Это мое решение, просто оберните класс nav-tabs-отзывчивым:
<div class="nav-tabs-responsive">
<ul class="nav nav-tabs" role="tablist">
<li>...</li>
</ul>
</div>
И две строки css:
.nav-tabs { min-width: 600px; }
.nav-tabs-responsive { overflow: auto; }
600px - это точка, над которой вы будете реагировать (вы можете установить ее с помощью переменных начальной загрузки)
Ответ 5
Чистый CSS только для навигационных вкладок, очень просто для маленьких экранов:
@media (max-width: 767px) {
.nav-tabs {
min-width: 100%;
display: inline-grid;
}
}
Ответ 6
Решение всего за 3 строки:
@media only screen and (max-width: 479px) {
.nav-tabs > li {
width: 100%;
}
}
... но вы должны принять идею вкладок, которые переносятся на большее количество строк в других измерениях.
Конечно, вы можете получить горизонтальную область прокрутки с white-space: nowrap
уловка, но полосы прокрутки на рабочих столах выглядят некрасиво, поэтому вам приходится писать код js, и все становится совсем не тривиальным!