列布局

您經常需要建立具有多個列的佈局,CSS 提供了幾種方法來實現這一點。您是使用多列彈性盒還是網格佈局,將取決於您想要實現的目標,在本教程中我們將探討這些選項。

three different styles of layouts which have two columns in the container.

依賴項

您可能希望透過列實現多種設計模式

教程

您需要選擇不同的佈局方法來實現您的要求。

連續內容流 — 多列布局

如果您使用多列布局建立列,您的文字將保持連續流,依次填充每個列。所有列的大小必須相同,您無法單獨定位某個列或某個列的內容。

您可以使用 column-gapgap 屬性控制列之間的間距,並使用 column-rule 在列之間新增分隔線。

點選下面程式碼塊中的“Play”按鈕,在 MDN Playground 中編輯示例。

html
<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi tomatillo melon azuki bean garlic.
  </p>
  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
    Dandelion cucumber earthnut pea peanut soko zucchini.
  </p>
  <p>
    Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
    kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter
    purslane kale. Celery potato scallion desert raisin horseradish spinach
  </p>
</div>
css
.container {
  border: 2px solid rgb(75 70 74);
  border-radius: 0.5em;
  padding: 20px;
  font: 1.2em sans-serif;

  column-width: 10em;
  column-rule: 1px solid rgb(75 70 74);
}

在此示例中,我們使用了 column-width 屬性來設定列所需的最小寬度,在此寬度之後瀏覽器才會新增額外的列。columns 簡寫屬性可用於設定 column-widthcolumn-count 屬性,這兩個屬性都可以定義允許的最大列數。

何時使用多列

  • 您希望文字以報紙式列顯示。
  • 您有一組小專案,希望將其分成列。
  • 您不需要對單個列框進行樣式設定。

單行等高專案 — 彈性盒

彈性盒可用於將內容分成列,方法是設定 display: flex; 使父元素成為彈性容器。只需新增此屬性,所有子項(子元素、偽元素和文字節點)就會沿單行成為彈性專案。設定具有單個數值的相同 flex 簡寫屬性將平均分配所有可用空間,通常使所有彈性專案大小相同,只要沒有非換行內容強制專案變大。

可以使用外邊距或 gap 屬性在專案之間建立間隙,但目前沒有 CSS 屬性可以在彈性專案之間新增分隔線。

html
<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi tomatillo melon azuki bean garlic.
  </p>

  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
    Dandelion cucumber earthnut pea peanut soko zucchini.
  </p>

  <p>
    Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
    kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter
    purslane kale. Celery potato scallion desert raisin horseradish spinach
    carrot soko.
  </p>
</div>
css
.container {
  border: 2px solid rgb(75 70 74);
  border-radius: 0.5em;
  padding: 20px 10px;
  font: 1.2em sans-serif;

  display: flex;
}

.container > * {
  padding: 10px;
  border: 2px solid rgb(95 97 110);
  border-radius: 0.5em;

  margin: 0 10px;
  flex: 1;
}

要建立具有換行到新行的彈性專案的佈局,請將容器上的 flex-wrap 屬性設定為 wrap。請注意,每個彈性行只分配該行的空間。一行中的專案不一定會與另一行中的專案對齊,如下例所示。這就是為什麼彈性盒被描述為一維的。它旨在控制行或列的佈局,但不能同時控制兩者。

html
<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi tomatillo melon azuki bean garlic.
  </p>

  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
    Dandelion cucumber earthnut pea peanut soko zucchini.
  </p>

  <p>
    Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
    kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter
    purslane kale. Celery potato scallion desert raisin horseradish spinach
    carrot soko.
  </p>
</div>
css
.container {
  border: 2px solid rgb(75 70 74);
  border-radius: 0.5em;
  padding: 20px 10px;
  width: 500px;
  font: 1.2em sans-serif;

  display: flex;
  flex-wrap: wrap;
}

.container > * {
  padding: 10px;
  border: 2px solid rgb(95 97 110);
  border-radius: 0.5em;

  margin: 0 10px;
  flex: 1 1 200px;
}

使用彈性盒

  • 用於單行或單列專案。
  • 當您希望在佈局專案後進行交叉軸對齊時。
  • 當您樂於讓換行專案只沿其行共享空間,而不與其他行中的專案對齊時。

按行和列對齊專案 — 網格佈局

如果您想要一個二維網格,其中專案按行_和_列對齊,那麼您應該選擇 CSS 網格佈局。與彈性盒在彈性容器的直接子元素上工作類似,網格佈局在網格容器的直接子元素上工作。只需在容器上設定 display: grid;。在此容器上設定的屬性 — 例如 grid-template-columnsgrid-template-rows — 定義了專案如何沿行和列分佈。

點選下面程式碼塊中的“Play”按鈕,在 MDN Playground 中編輯示例。

html
<div class="container">
  <p>
    Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion
    daikon amaranth tatsoi.
  </p>

  <p>
    Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
    tatsoi pea sprouts fava bean collard greens.
  </p>

  <p>
    Nori grape silver beet broccoli kombu beet greens fava bean potato quandong
    celery. Bunya nuts black-eyed pea prairie turnip leek lentil turnip greens
    parsnip. .
  </p>
</div>
css
.container {
  border: 2px solid rgb(75 70 74);
  border-radius: 0.5em;
  padding: 20px;
  width: 500px;
  font: 1.2em sans-serif;

  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 20px;
}

.container > * {
  padding: 10px;
  border: 2px solid rgb(95 97 110);
  border-radius: 0.5em;
  margin: 0;
}

使用網格

  • 用於多行或多列專案。
  • 當您希望能夠在塊軸和內聯軸上對齊專案時。
  • 當您希望專案按行和列對齊時。

MDN 上的資源