Как установить заголовок вкладки сверху с помощью bootstrap-vue

#tabs #bootstrap-vue

#вкладки #bootstrap-vue

Вопрос:

В настоящее время я использую bootstrap-vue для создания страницы с несколькими вкладками. Это код в двух словах

 <div id="app">
  <template>
    <div>
      <b-tabs content-class="mt-3 ml-3">
        <b-tab title="Settings">
          <div class="col-md-4">
            <h2>Hello</h2>
          </div>
        <b-tab>
        <b-tab title="Question">
          <div class="col-md-4">
            <h2>World</h2>
          </div>
        <b-tab>
      </b-tabs>
    </div>
  </template>
</div>
 

Как мне сделать заголовок вкладки липким на месте, чтобы всякий раз, когда я прокручиваю вкладку, вкладки всегда были сверху? Спасибо большое

Ответ №1:

Вы можете использовать sticky-top класс, добавив nav-wrapper-class="sticky-top" в <b-tabs> . Это сделает навигацию sticky и будет прокручиваться вместе со страницей.

В зависимости от ваших настроек вам может потребоваться добавить цвет фона для навигации, чтобы не видеть содержимое вкладки под навигацией, поскольку по умолчанию она прозрачна. Вот почему я использую bg-light в примере.

 new Vue({
  el: '#app'
}) 
 <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-vue/2.21.2/bootstrap-vue.min.css" />

<script src="//cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-vue/2.21.2/bootstrap-vue.min.js"></script>



<div id="app" class="p-5">
  <b-card no-body>
    <b-tabs content-class="mt-3 ml-3" nav-wrapper-class="sticky-top bg-light" card>
      <b-tab title="Settings">
        <div class="col-md-4">
          <h2 v-for="i in 15">Hello</h2>
        </div>
      </b-tab>
      <b-tab title="Question">
        <div class="col-md-4">
          <h2>World</h2>
        </div>
      </b-tab>
    </b-tabs>
  </b-card>

  <br v-for="i in 25" />
</div> 

В качестве альтернативы, вы могли бы вместо этого добавить полосу прокрутки (при необходимости) к содержимому вкладок.
Это означает, что навигация остается в поле зрения.

 new Vue({
  el: '#app'
}) 
 .custom-class {
  max-height: 300px;
  overflow-y: auto;
} 
 <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-vue/2.21.2/bootstrap-vue.min.css" />

<script src="//cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-vue/2.21.2/bootstrap-vue.min.js"></script>



<div id="app" class="p-5">
  <b-card no-body>
    <b-tabs content-class="pt-3 pl-3 custom-class" card>
      <b-tab title="Settings">
        <div class="col-md-4">
          <h2 v-for="i in 15">Hello</h2>
        </div>
      </b-tab>
      <b-tab title="Question">
        <div class="col-md-4">
          <h2>World</h2>
        </div>
      </b-tab>
    </b-tabs>
  </b-card>
</div>