【问题标题】:How do I make a striped v-data-table in Vuetify?如何在 Vuetify 中制作条纹 v-data-table?
【发布时间】:2019-06-27 18:12:35
【问题描述】:

我有一张桌子

<v-data-table
  :headers="headers"
  :items="bookings"
  class="elevation-1"
  :search="search"
>
  <template slot="items" slot-scope="props">
    <td>{{ props.item.date }}</td>
    <td>{{ props.item.time }}</td>
    <td>{{ props.item.vehicle }}</td>
  </template>
</v-data-table>

在 Vuetify 中制造,一切正常,我只需要将交替行变成不同的颜色。或者将引导程序.table-striped 类提供给表。

【问题讨论】:

    标签: javascript html vue.js vue-component vuetify.js


    【解决方案1】:

    您可以通过使用以下 CSS 规则来实现:

    tbody tr:nth-of-type(odd) {
       background-color: rgba(0, 0, 0, .05);
     }
    

    new Vue({
      el: '#app',
      data() {
        return {
          headers: [{
              text: 'Dessert (100g serving)',
              align: 'left',
              sortable: false,
              value: 'name'
            },
            {
              text: 'Calories',
              value: 'calories'
            },
            {
              text: 'Fat (g)',
              value: 'fat'
            },
            {
              text: 'Carbs (g)',
              value: 'carbs'
            },
            {
              text: 'Protein (g)',
              value: 'protein'
            },
            {
              text: 'Iron (%)',
              value: 'iron'
            }
          ],
          desserts: [{
              name: 'Frozen Yogurt',
              calories: 159,
              fat: 6.0,
              carbs: 24,
              protein: 4.0,
              iron: '1%'
            },
            {
              name: 'Ice cream sandwich',
              calories: 237,
              fat: 9.0,
              carbs: 37,
              protein: 4.3,
              iron: '1%'
            },
            {
              name: 'Eclair',
              calories: 262,
              fat: 16.0,
              carbs: 23,
              protein: 6.0,
              iron: '7%'
            },
            {
              name: 'Cupcake',
              calories: 305,
              fat: 3.7,
              carbs: 67,
              protein: 4.3,
              iron: '8%'
            },
            {
              name: 'Gingerbread',
              calories: 356,
              fat: 16.0,
              carbs: 49,
              protein: 3.9,
              iron: '16%'
            },
            {
              name: 'Jelly bean',
              calories: 375,
              fat: 0.0,
              carbs: 94,
              protein: 0.0,
              iron: '0%'
            },
            {
              name: 'Lollipop',
              calories: 392,
              fat: 0.2,
              carbs: 98,
              protein: 0,
              iron: '2%'
            },
            {
              name: 'Honeycomb',
              calories: 408,
              fat: 3.2,
              carbs: 87,
              protein: 6.5,
              iron: '45%'
            },
            {
              name: 'Donut',
              calories: 452,
              fat: 25.0,
              carbs: 51,
              protein: 4.9,
              iron: '22%'
            },
            {
              name: 'KitKat',
              calories: 518,
              fat: 26.0,
              carbs: 65,
              protein: 7,
              iron: '6%'
            }
          ]
        }
      }
    })
    tbody tr:nth-of-type(odd) {
      background-color: rgba(0, 0, 0, .05);
    }
    <script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@1.4.0/dist/vuetify.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons">
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/vuetify@1.4.0/dist/vuetify.min.css">
    <div id="app">
      <v-app id="inspire">
        <v-data-table :headers="headers" :items="desserts" class="elevation-1">
          <template slot="items" slot-scope="props">
            <td>{{ props.item.name }}</td>
            <td class="text-xs-right">{{ props.item.calories }}</td>
            <td class="text-xs-right">{{ props.item.fat }}</td>
            <td class="text-xs-right">{{ props.item.carbs }}</td>
            <td class="text-xs-right">{{ props.item.protein }}</td>
            <td class="text-xs-right">{{ props.item.iron }}</td>
          </template>
        </v-data-table>
      </v-app>
    </div>

    【讨论】:

    • 如果你把它放在脚本标签中。确保删除 scoped
    • @bhaskar 你有什么解释为什么scope 在这种情况下不起作用?
    • 那是因为v-table是从Vuetify导入的组件(全局导入)。因此,“作用域”会阻止将类应用于导入的组件。 @Duy Tran
    • 如何让移动版的表格变成条纹?
    • @TriMueriSandes 我认为你需要类似tr td:nth-of-type(odd) { background-color: rgba(0, 0, 0, .05); }
    【解决方案2】:

    扩展 Boussadjra Brahim 的答案。 这是一些用于全局样式化页眉和页脚的css

    <style>
      tbody tr:nth-of-type(even) {
        background-color: rgba(236, 237, 237);
      }
    
      tbody tr:nth-of-type(odd) {
        background-color: rgb(250 ,250, 250);
      }
    
      .v-data-table-header {
        background-color: rgba(182, 183, 187);
        color: white;
      }
    
      .v-data-footer {
        background-color: rgb(250 ,250, 250);
      }
    
      .theme--light.v-data-table thead tr th {
        color: white;
      }
    </style>
    

    【讨论】:

      【解决方案3】:

      为了实现深色和浅色主题的条纹,我这样做:

      <style>
      .theme--light.v-data-table tbody tr:nth-of-type(even) {
          background-color: rgba(0, 0, 0, .03);
      }
      .theme--dark.v-data-table tbody tr:nth-of-type(even) {
          background-color: rgba(0, 0, 0, .5);
      }
      </style>
      

      【讨论】:

        【解决方案4】:

        如果您有一个可扩展的表格,我会遇到一些麻烦。 这是因为按照 vuetify 文档中的示例,结果表也会为扩展内容创建一行,我认为这是隐藏的。

        Anyhu 这是我最终的风格:

        tr:nth-of-type(4n+3) {
         background-color: rgba(0, 0, 0, .05);
        }
        

        每第四行,偏移量为 3,所以你不包括标题。

        【讨论】:

          【解决方案5】:

          v-data-table class="elevation-1" 中,我将class 属性更改为class="table-striped elevation-1",它对我来说很好。

          【讨论】:

          • 这不起作用,因为没有名为table-striped的类
          • 引用 OP,看来他们正在使用 Bootstrap(不是很清楚,但我假设),这意味着 table-striped 将存在并在这种情况下工作。但如果你明确地单独使用 Vuetify,它就行不通了。
          猜你喜欢
          • 1970-01-01
          • 2020-02-26
          • 2019-11-10
          • 2020-12-13
          • 2019-11-19
          • 1970-01-01
          • 1970-01-01
          • 2021-07-12
          • 2018-01-21
          相关资源
          最近更新 更多