【问题标题】:Making v-treeview the same height as a row in a flexbox使 v-treeview 与 flexbox 中的行具有相同的高度
【发布时间】:2020-11-13 10:36:43
【问题描述】:

我在https://codepen.io/james-hudson3010/pen/gOPEbvx 有一个 CodePen

我目前看到的是:

我想知道我需要改变什么,所以红色区域被黄色区域覆盖......黄色区域是 v-treeview 组件的区域。红色区域只有比左栏的内容短时才会出现。

我尝试将各种高度设置为 100%,但我遗漏了一些东西。

HTML:

<div id="app">
  <v-app id="inspire">
    <v-container class="green lighten-5" fluid>
      <v-row no-gutters dense style="flex-wrap: nowrap" class="align-stretch primary lighten-3">
          <v-col class="flex-grow-0 flex-shrink-0" style="flex-basis: 20em;">
              <v-card flat class="green lighten-3" style="height: 100%;">
                
                  Some Column Context<br>
                  Some Column Context<br>
                  Some Column Context<br>
                  Some Column Context<br>
                  Some Column Context<br>
                  Some Column Context<br>
                  Some Column Context<br>                
                
              </v-card>
          </v-col>
          <v-col class="flex-grow-2" style="background-color: red;">

            <v-tabs
                v-model="tab"
                background-color="primary lighten-3"
                style="height: 100%"
            >                

                <v-tab
                    v-for="tabName in tabNames"
                    :key="tabName.id"
                    :href="`#${tabName}`"
                >

                    {{ tabName }}
                  
                </v-tab>

                <v-tab-item
                    v-for="tabName in tabNames"
                    :key="tabName.id"
                    :value="`${tabName}`"
                    class="yellow lighten-4"
                    style="height: 100%"                            
                >

                    <v-container fluid style="height: 100%">
                        <v-row dense col no-gutters class = "rowborder">
                            <v-col cols = "12">
                                <v-treeview dense activatable :items="childrenForTab">
                                    <template v-slot:label="{ item }">
                                        <span class="treeItem">{{ item.name }}</span>
                                    </template>
                                </v-treeview>
                            </v-col>
                        </v-row>
                    </v-container>

                </v-tab-item>           

            </v-tabs>             
            
          </v-col>
      </v-row>
    </v-container>
  </v-app>
</div>

JavaScript:

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  
  data() 
  {
    return {
      tabNames: [ 'a', 'b' ],
      tab: null,     
    }
  },
  
  computed: 
  {
    childrenForTab()
    {
      if ( this.tab == 'a' )
      {
        return [
          { name: '1' },
          { name: '2' },
          { name: '3' },
          { name: '4' }         
        ]    
      }
      else
      {
        return [
          { name: '1' },
          { name: '2' }      
        ]           
      }
    }
  }
  
})

【问题讨论】:

    标签: html css vue.js flexbox vuetify.js


    【解决方案1】:

    只需在你的 CSS 中添加这个:

    .v-tabs {
      height: 100%;
      display: flex;
      flex-direction: column;
    }
    
    .v-window.v-item-group {
      flex-grow: 1;
    }
    
    .v-window__container {
      height: 100%;
    }
    

    【讨论】:

    • 我很好奇。诸如此类的解决方案是推荐的做法,还是被认为有些骇人听闻?
    • 我的下一个问题是......如果有两个可见的 组件并且一个希望这种样式只适用于一个而不适用于另一个,这可能吗?我尝试在 上设置一个 id="myID" 并执行 #myID.v-tabs {},但我不清楚如何指定 v-tabs 的子级并将所需的样式应用于它们明确的。
    • 为每个 v-tabs 添加一个 id (id="a"),它对应于您在 tabNames 中指定的选项卡的名称。 gyazo.com/f22b70c8462057e5bfc7712aaecdb6fe
    • 太棒了。虽然这确实回答了这个问题,但当我尝试应用于常规 vue 应用程序时,似乎 .v-window.v-item-group 和 .v-window__container 的样式被踩踏并且没有被应用。
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2015-02-20
    • 2020-09-21
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多