Карусель Owl v2, ширина элемента рассчитана неверно, если карусель скрыта за содержимым Tab

Я построил 2 отзывчивых Owl-carousel-v2 на странице, которые выглядят идеально. После того, как я поместил их во вкладки, первая карусель работает, но та, что за панелью вкладок, потеряла свою ширину элемента, и я не смог заставить ее работать. Если у меня есть все элементы с определенной шириной, то все элементы будут перечислены вертикально.

Вот моя демонстрационная ручка: http://codepen.io/bard/pen/NxqyQy/

Я думаю, проблема в том, что ширина элемента вычисляется при загрузке страницы.

Как это решить?

HTML:

<ul class="nav nav-tabs">
                    <li class="active"><a data-toggle="tab" href="#track1">Track1</a></li>
                    <li><a data-toggle="tab" href="#track2">Track2</a></li>
                </ul>
                <div class="panel tab-content">
                    <div id="track1" class="panel-body tab-pane fade in active">
    <div class="container-fluid tracker">
        <div class="wrapper-with-margin">
            <div id="owl-demo" class="owl-carousel">
                <div class="item" style="">1</div>
                <div class="item" style="">2</div>
                <div class="item" style="">3</div>
                <div class="item" style="">4</div>
                <div class="item" style="">5</div>
                <div class="item" style="">6</div>
                <div class="item" style="">7</div>
                <div class="item" style="">8</div>
                <div class="item" style="">9</div>
            </div>
        </div>
    </div>
                    </div>
                    <div id="track2" class="panel-body tab-pane fade">
    <div class="container-fluid tracker">
        <div class="wrapper-with-margin">
            <div id="owl-demo2" class="owl-carousel">
                <div class="item" style="">9</div>
                <div class="item" style="">8</div>
                <div class="item" style="">7</div>
                <div class="item" style="">6</div>
                <div class="item" style="">5</div>
                <div class="item" style="">4</div>
                <div class="item" style="">3</div>
                <div class="item" style="">2</div>
                <div class="item" style="">1</div>
            </div>
        </div>
    </div>
                    </div>
                </div>

2 ответа

Вы можете обойти это с некоторыми CSS. Карусель совы изменяет размеры элементов в зависимости от ширины контейнера при инициализации. Так как этот div скрыт, нет ссылки на ширину, и это вызывает кучу. Вы можете исправить это с помощью CSS следующим образом:

    .tab-content>.tab-pane {
    display: block;
    width: 100%;
    height: 0;
    padding: 0;
}

.active .tab-content>.tab-pane {
   height: auto;
   padding: 15px;
}

Обновленная ручка: http://codepen.io/anon/pen/vLNNem

Вы также можете изменить свой javascript, чтобы инициализировать вторую карусель после того, как пользователь щелкнул по второй вкладке, но я, вероятно, просто сделаю это CSS-способом.

Проблема в том, что вкладки переключают 'display: none' / 'display: block', а карусель не знает новой ширины содержимого активированной вкладки, поэтому она выглядит свернутой;

Чтобы исправить это, вы можете просто использовать другой подход для скрытия / отображения вкладок, например, как это в CSS, а затем переключать эти классы в jQuery:

.tab-hidden {
visibility: hidden;
height: 0;
overflow: hidden;
opacity: 0;
transition: all 0.5s ease;
}

.tab-visible {
visibility: visible;
height: auto;
overflow: visible;
opacity: 1;
transition: all 0.5s ease;
}

Вы можете проверить рабочий код здесь: http://codepen.io/slyka85/pen/MbpXxp

Другие вопросы по тегам