微版面配置

談到版面配置,我們通常會想到頁面層級的設計。但頁面中的較小元件可以有自己的獨立版面配置。

理想情況下,這些元件層級的版面配置會自動調整自身大小, 無論在頁面上的位置為何。有時您可能不知道元件會放在主要內容欄、側欄,還是兩者皆是。 如果不確定元件的最終位置,請務必確保元件可以自行調整至容器。

雙欄版面配置,一欄寬,一欄窄。媒體物件的版面配置會因寬欄或窄欄而異。

格線

CSS 格線不僅適用於網頁層級的版面配置,對於其中的元件也適用。

在本例中,::before::after 虛擬元素會在標題兩側建立裝飾線。標題本身就是格線容器。個別元素會排列成行,填滿可用空間。

h1 {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1em;
}
h1::before,
h1::after {
  content: "";
  border-top: 0.1em double black;
  align-self: center;
}
Firefox 的開發人員工具顯示格線疊加層。 Chrome 中的開發人員工具顯示格線疊加層。
Firefox 和 Chrome 等電腦版瀏覽器提供開發人員工具,可顯示疊加在設計上的格線和區域。

瞭解如何在 Chrome 開發人員工具中檢查格線版面配置

Flexbox

顧名思義,您可以使用 flexbox 讓元件具有彈性。您可以宣告元件中的哪些元素應具備最小或最大尺寸,並讓其他元素彈性調整大小,以配合這些元素。

在這個範例中,圖片佔用四分之一的可用空間,文字則佔用另外四分之三。但圖片不會超過 200 像素。

.media {
  display: flex;
  align-items: center;
  gap: 1em;
}
.media-illustration {
  flex: 1;
  max-inline-size: 200px;
}
.media-content {
  flex: 3;
}
Firefox 的開發人員工具顯示彈性方塊疊加層。 Chrome 中的開發人員工具顯示彈性方塊疊加層。
Firefox 和 Chrome 的開發人員工具可協助您將彈性方塊元件的形狀視覺化。

瞭解如何使用 Chrome 開發人員工具檢查彈性方塊版面配置

容器查詢

Flexbox 可讓您從內容開始設計。您可以指定元素的參數 (應縮窄或加寬的程度),並讓瀏覽器找出最終實作方式。

但元件本身並不知道自己的環境。因此無法判斷是否用於主要內容或側欄。因此,元件版面配置可能比網頁版面配置更難處理。 如要套用符合情境的樣式,元件需要瞭解的不只是所在可視區域的大小。

使用網頁版面配置時,您知道容器的寬度,因為容器是瀏覽器可視區域;媒體查詢會回報網頁層級容器的尺寸。

如要回報任何容器的維度,請使用容器查詢

首先,請定義哪些元素做為容器。

main,
aside {
  container-type: inline-size;
}

這表示您要查詢內嵌維度。如果是英文文件,這就是水平軸。您將根據容器的寬度變更樣式。

如果元件位於其中一個容器內,您可以套用樣式,方式與套用媒體查詢類似。

.media-illustration {
  max-width: 200px;
  margin: auto;
}

@container (min-width: 25em) {
  .media {
    display: flex;
    align-items: center;
    gap: 1em;
  }

  .media-illustration {
    flex: 1;
  }

  .media-content {
    flex: 3;
  }
}

如果媒體物件位於寬度小於 25em 的容器中,系統不會套用彈性方塊樣式。圖片和文字會垂直排列。

但如果容器元素比 25em 寬,圖片和文字就會並排顯示。

使用容器查詢,即可獨立設定元件樣式。您可以根據容器元素的寬度編寫規則,不再需要考慮檢視區塊的寬度。

兩個不同大小的容器。

合併查詢

您可以針對網頁版面配置使用媒體查詢,並針對網頁中的元件使用容器查詢。

這裡的頁面整體結構包含 main 元素和 aside 元素。 這兩個元素內都有媒體物件。

<body>
  <main>
     <div class="media">…</div>
     <div class="media">…</div>
  </main>
  <aside>
     <div class="media">…</div>
  </aside>
</body>

當可視區域寬度大於 45em 時,媒體查詢會將格線版面配置套用至 mainaside 元素。

@media (min-width: 45em) {
  body {
    display: grid;
    grid-template-columns: 3fr 1fr;
  }
}

媒體物件的容器查詢規則維持不變:只有在包含元素寬度大於 25em 時,才套用水平彈性方塊版面配置。

雙欄版面配置,一欄寬,一欄窄。
媒體物件的版面配置會因寬欄或窄欄而異。

容器查詢是微型版面配置的重大突破。 元件可以獨立運作,不受瀏覽器可視區域影響。

隨堂測驗

測試您對微版面配置的瞭解程度。

格線和彈性盒模型都適用於微型版面配置嗎?

🎉 答對了!
答錯了。格線和彈性方塊都非常實用,即使是「最小」的版面配置也適用。

先前,您已瞭解網頁層級巨集版面配置。您現在瞭解元件層級的微型版面配置。

接著,您將深入瞭解內容的建構區塊,並學習如何製作回應式圖片。首先,您會瞭解回應式排版