Search code examples
vuetify.js

Vuetify: grid layout with five columns


Vuetify uses a 12-point grid system. Since 12 is not divisible by 5, how does one create a grid with 5 columns of the same width? The 5 columns should take all available space.

What's the most "correct" way to do this?

EDIT: I tried to implement John M's comment, but it doesn't fill up all the available horizontal space:

<v-container>
  <v-card color="red">
    <v-layout wrap align-content-space-around text-xs-center>
      <v-flex xs1></v-flex>
      <v-flex xs2><v-card color="blue"><v-card-text class="px-0">1</v-card-text></v-card></v-flex>
      <v-flex xs2><v-card color="blue"><v-card-text class="px-0">2</v-card-text></v-card></v-flex>
      <v-flex xs2><v-card color="blue"><v-card-text class="px-0">3</v-card-text></v-card></v-flex>
      <v-flex xs2><v-card color="blue"><v-card-text class="px-0">4</v-card-text></v-card></v-flex>
      <v-flex xs2><v-card color="blue"><v-card-text class="px-0">5</v-card-text></v-card></v-flex>
      <v-flex xs1></v-flex>
    </v-layout>
  </v-card>
</v-container>

I want the red areas to be gone: enter image description here


Solution

  • I needed a five columns layout too, and I found something that's working for me. I needed the five columns layout for lg screens, so I added these rules in my css:

    https://codepen.io/rekam/pen/JmNPPx

    /* vuetify lg min breakpoint: 1280 - 16     = 1264px */
    /* vuetify lg max breakpoint: 1920 - 16 - 1 = 1903px */
    
    @media (min-width: 1264px) and (max-width: 1903px) {
        .flex.lg5-custom {
            width: 20%;
            max-width: 20%;
            flex-basis: 20%;
        }
    }
    

    You need to specify min and max in media query, because of you don't, the 20% rule will apply for all sizes. And simply use it in your template like this:

    <!-- md4 is just here as an example -->
    <v-layout row wrap>
        <v-flex md4 class="lg5-custom">box 1</v-flex>
        <v-flex md4 class="lg5-custom">box 2</v-flex>
        <v-flex md4 class="lg5-custom">box 3</v-flex>
        <v-flex md4 class="lg5-custom">box 4</v-flex>
        <v-flex md4 class="lg5-custom">box 5</v-flex>
        <v-flex md4 class="lg5-custom">box 6</v-flex>
        <v-flex md4 class="lg5-custom">box 7</v-flex>
    </v-layout>