网格列

希望您以前已经阅读过 Flexbox 介绍 理论,让我们更深入地了解网络系统中的 Flex 列(column)。

为父容器添加 .column 类后开启一个 Flex 列,为每个子元素添加一个 .col-* 类来瓜分父容器的高度,若每个子元素都使用不带数字的 .col 类则所有子元素都等高,它们会平分父容器的高度。(此段不属于官方文档,下面是英文原文)

Utilize breakpoint-specific row classes for equal-height rows. Add any number of unit-less classes for each breakpoint you need and every row will be the same height.(翻译不通)

等高 (Equal-height)

例如,以下是两个网格布局,它们适用于屏幕宽度在 xs 到 xl 之间的设备上。



<template>
  <div class="q-pa-md">

    <div class="column" style="height: 150px">
      <div class="col">
        1 of 2
      </div>
      <div class="col">
        1 of 2
      </div>
    </div>

    <div class="column" style="height: 150px">
      <div class="col">
        1 of 3
      </div>
      <div class="col">
        1 of 3
      </div>
      <div class="col">
        1 of 3
      </div>
    </div>

  </div>
</template>

1 of 2
1 of 2
1 of 3
1 of 3
1 of 3

设置一行高度

Flexbox 网格行的自动布局还意味着您可以设置其中一行的高度,其他行的高度将自动调整。 您可以使用预定义的网格类(如下所示)或内联高度。 请注意,无论中间行的高度如何改变,其他行都会跟着调整大小。



<template>
  <div class="q-pa-md">

    <div class="column" style="height: 150px">
      <div class="col">
        .col
      </div>
      <div class="col-5">
        .col-5
      </div>
      <div class="col">
        .col
      </div>
    </div>

    <div class="column" style="height: 250px">
      <div class="col">
        .col
      </div>
      <div class="col-8">
        .col-8
      </div>
      <div class="col">
        .col
      </div>
    </div>

  </div>
</template>

.col
.col-5
.col
.col
.col-8
.col

可变高度内容

使用 col-{breakpoint}-auto 类,行可以根据其内容的自然宽度调整自身大小。 这对于单行内容(如输入、数字等)非常方便(请参阅此页面上的最后一个示例)。 结合水平对齐类,这对于在视口宽度变化时行大小不均匀的居中布局非常有用。



<template>
  <div class="q-pa-md">

    <div class="column justify-center" style="height: 250px">
      <div class="col col-md-4">
        .col .col-md-4
      </div>
      <div class="col-auto">
        .col-auto (Variable height content)
      </div>
      <div class="col col-md-4">
        .col .col-md-4
      </div>
    </div>

    <div class="column" style="height: 250px">
      <div class="col">
        .col
      </div>
      <div class="col-auto">
        .col-auto (Variable height content)
      </div>
      <div class="col col-md-3">
        .col .col-md-3
      </div>
    </div>

  </div>
</template>

.col .col-md-4
.col-auto (Variable height content)
.col .col-md-4
.col
.col-auto (Variable height content)
.col .col-md-3

响应式类

网格系统拥有五个预定义的断点类,用于构建复杂的响应式布局。它们分别对应超小型、小型、中型、大型和超大型屏幕设备。您可以使用它们在不同的设备上适配合适的列大小。

断点列表

对于从最小的设备到最大的设备都相同的网格,请使用 .col.col-* 类。 需要特别大的列时,请为 col 类指定数字;否则,请坚持使用 .col



<template>
  <div class="q-pa-md">

    <div class="column" style="height: 150px">
      <div class="col">.col</div>
      <div class="col">.col</div>
      <div class="col">.col</div>
      <div class="col">.col</div>
    </div>

    <div class="column" style="height: 150px">
      <div class="col-8">.col-8</div>
      <div class="col-4">.col-4</div>
    </div>

  </div>
</template>

.col
.col
.col
.col
.col-8
.col-4

混合匹配

不想让您的列简单地堆叠在某些网格层中吗? 根据需要为每个层使用不同类的组合。 请参阅下面的示例,以更好地了解所有工作原理。



<template>
  <div class="q-pa-md">
    <!-- Stack the columns on mobile by making one full-width and the other half-width -->
    <div class="column" style="height: 150px">
      <div class="col col-md-8">.col .col-md-8</div>
      <div class="col-6 col-md-4">.col-6 .col-md-4</div>
    </div>

    <!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
    <div class="column" style="height: 150px">
      <div class="col-4 col-md-6">.col-4 .col-md-6</div>
      <div class="col-4 col-md-6">.col-4 .col-md-6</div>
      <div class="col-4 col-md-6">.col-4 .col-md-6</div>
    </div>

    <!-- Columns are always 50% wide, on mobile and desktop -->
    <div class="column" style="height: 150px">
      <div class="col-6">.col-6</div>
      <div class="col-6">.col-6</div>
    </div>
  </div>
</template>

.col .col-md-8
.col-6 .col-md-4
.col-4 .col-md-6
.col-4 .col-md-6
.col-4 .col-md-6
.col-6
.col-6

对齐

使用 flexbox 对齐工具可控制垂直和水平方向的对齐方式。



<template>
  <div class="q-pa-md doc-container">
    <q-badge>items-start</q-badge>
    <div class="column items-start" style="height: 150px">
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
    </div>

    <q-badge>items-center</q-badge>
    <div class="column items-center" style="height: 150px">
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
    </div>

    <q-badge>items-end</q-badge>
    <div class="column items-end" style="height: 150px">
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
      <div class="col">
        One of three rows
      </div>
    </div>

    <q-badge>self-*</q-badge>
    <div class="column" style="height: 150px">
      <div class="col self-start">
        .self-start
      </div>
      <div class="col self-center">
        .self-center
      </div>
      <div class="col self-end">
        .self-end
      </div>
    </div>
  </div>
</template>

items-start
One of three rows
One of three rows
One of three rows
items-center
One of three rows
One of three rows
One of three rows
items-end
One of three rows
One of three rows
One of three rows
self-*
.self-start
.self-center
.self-end


<template>
  <div class="q-pa-md doc-container">
    <q-badge>justify-start</q-badge>
    <div class="column justify-start" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>

    <q-badge>justify-center</q-badge>
    <div class="column justify-center" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>

    <q-badge>justify-end</q-badge>
    <div class="column justify-end" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>

    <q-badge>justify-around</q-badge>
    <div class="column justify-around" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>

    <q-badge>justify-between</q-badge>
    <div class="column justify-between" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>

    <q-badge>justify-evenly</q-badge>
    <div class="column justify-evenly" style="height: 150px">
      <div class="col-4">
        One of two rows
      </div>
      <div class="col-4">
        One of two rows
      </div>
    </div>
  </div>
</template>

justify-start
One of two rows
One of two rows
justify-center
One of two rows
One of two rows
justify-end
One of two rows
One of two rows
justify-around
One of two rows
One of two rows
justify-between
One of two rows
One of two rows
justify-evenly
One of two rows
One of two rows

提示

有一个更方便的 CSS 类: flex-center 。它等于items-center + justify-center。使用时需要搭配 flexrow 或者 column使用。

换行

如果在一行中放置超过 12 列,则每组额外的列将作为一个单元换行到新行上。



<template>
  <div class="q-pa-md">
    <div class="column" style="height: 300px; max-height: 100%">
      <div class="col-9">.col-9</div>
      <div class="col-5">
        .col-5
        <br>Since 9 + 5 = 14 &gt; 12, this 5-row-wide div
        <br>gets wrapped onto a new line as one
        <br>contiguous unit.
      </div>
      <div class="col-6">
        .col-6
        <br>Subsequent rows
        <br>continue along the
        <br>new line.
      </div>
    </div>

    <div class="column" style="height: 150px">
      <div class="col-3 col-sm-6">.col-3 .col-sm-6</div>
      <div class="col-3 col-sm-6">.col-3 .col-sm-6</div>

      <div class="col-3 col-sm-6">.col-3 .col-sm-6</div>
      <div class="col-3 col-sm-6">.col-3 .col-sm-6</div>
    </div>
  </div>
</template>

.col-9
.col-5
Since 9 + 5 = 14 > 12, this 5-row-wide div
gets wrapped onto a new line as one
contiguous unit.
.col-6
Subsequent rows
continue along the
new line.
.col-3 .col-sm-6
.col-3 .col-sm-6
.col-3 .col-sm-6
.col-3 .col-sm-6

排序



<template>
  <div class="q-pa-md">

    <div class="column reverse" style="height: 150px">
      <div class="col">
        First, but last
      </div>
      <div class="col">
        Second, unchanged
      </div>
      <div class="col">
        Third, but first
      </div>
    </div>

  </div>
</template>

First, but last
Second, unchanged
Third, but first


<template>
  <div class="q-pa-md">

    <div class="column" style="height: 190px">
      <div class="col order-none">
        First, but unordered
        <br>(.order-none)
      </div>
      <div class="col order-last">
        Second, but last
        <br>(.order-last)
      </div>
      <div class="col order-first">
        Third, but first
        <br>(.order-first)
      </div>
    </div>

  </div>
</template>

First, but unordered
(.order-none)
Second, but last
(.order-last)
Third, but first
(.order-first)

嵌套

要使用默认网格嵌套您的内容,请在现有的 .col-sm-* 列中添加一个新的 .row 和一组 .col-sm-* 列。 嵌套行应包括一组总计不超过 12 个或更少的列(不需要全部使用 12 个可用列)。



<template>
  <div class="q-pa-md">

    <div class="column" style="height: 200px">
      <div class="col-auto">.col-auto</div>
      <div class="col column">
        <div class="col-8 col-sm-6">
          .col-8 .col-sm-6
        </div>
        <div class="col-4 col-sm-6">
          .col-4 .col-sm-6
        </div>
      </div>
    </div>

  </div>
</template>

.col-auto
.col-8 .col-sm-6
.col-4 .col-sm-6

Flex 演示 (Playground)

要查看 Flex 的实际效果,您可以使用 Flex 演示(Playground)进行交互学习。

Flex Playground