媒體查詢

設計師可以調整設計,以便配合使用者。最明顯的例子是使用者裝置的板型規格,包括寬度、裝置顯示比例等等。設計人員可以使用媒體查詢,回應這些不同板型規格。

媒體查詢會透過 @media 關鍵字 (CSS at-rule) 啟動,可用於各種用途。

指定不同類型的輸出內容

網站通常會顯示在螢幕上,但 CSS 也可以用於為其他輸出內容設定網站樣式。您可能希望網頁在螢幕上顯示的樣貌與列印時有所不同。您可以透過查詢媒體類型來實現這項功能。

在這個範例中,背景顏色設為灰色。但如果是列印頁面,則背景顏色應為透明。這樣可節省使用者的印表機墨水。

body {
  color: black;
  background-color: grey;
}

@media print {
  body {
    background-color: transparent;
  }
}

您可以在樣式表中使用 @media at-rule,也可以建立個別的樣式表,並在 link 元素上使用 media 屬性:

<link rel="stylesheet" href="global.css">
<link rel="stylesheet" href="print.css" media="print">

如果您未為 CSS 指定任何媒體類型,系統會自動將媒體類型值設為 all。以下兩個 CSS 區塊具有相同效果:

body {
  color: black;
  background-color: white;
}
@media all {
   body {
     color: black;
     background-color: white;
   }
}

以下兩行 HTML 也是等效的:

<link rel="stylesheet" href="global.css">
<link rel="stylesheet" href="global.css" media="all">

查詢條件

您可以為媒體類型新增條件。這些稱為媒體查詢。只有在媒體類型相符且條件為 true 時,系統才會套用 CSS。這些條件稱為媒體功能

以下是媒體查詢的語法:

@media type and (feature)

如果樣式位於個別樣式表中,您可以在 link 元素上使用媒體查詢:

<link rel="stylesheet" href="specific.css" media="type and (feature)">

假設您想根據瀏覽器視窗處於橫向模式 (可視區域寬度大於高度) 或直向模式 (可視區域高度大於寬度),套用不同的樣式。您可以使用名為 orientation 的媒體功能,測試以下項目:

@media all and (orientation: landscape) {
   // Styles for landscape mode.
}
@media all and (orientation: portrait) {
   // Styles for portrait mode.
}

或者,如果您偏好使用個別的樣式表:

<link rel="stylesheet" href="landscape.css" media="all and (orientation: landscape)">
<link rel="stylesheet" href="portrait.css" media="all and (orientation: portrait)">

在本例中,媒體類型為 all。由於這是預設值,因此您可以視需要省略:

@media (orientation: landscape) {
   // Styles for landscape mode.
}
@media (orientation: portrait) {
   // Styles for portrait mode.
}

或者使用不同的樣式表:

<link rel="stylesheet" href="landscape.css" media="(orientation: landscape)">
<link rel="stylesheet" href="portrait.css" media="(orientation: portrait)">

雖然為不同媒體類型 (例如 print) 使用不同的樣式表單可能沒問題,但為每個媒體查詢使用不同的樣式表單可能不太妥當。請改用 @media at-rules。

根據可視區域大小調整樣式

在回應式設計中,最實用的媒體功能之一是瀏覽器可視區域的尺寸。如要在瀏覽器視窗寬度超過特定寬度時套用樣式,請使用 min-width

@media (min-width: 400px) {
  // Styles for viewports wider than 400 pixels.
}

使用 max-width 媒體功能,套用特定寬度以下的樣式:

@media (max-width: 400px) {
  // Styles for viewports narrower than 400 pixels.
}

您可以在媒體查詢中使用任何 CSS 長度單位。如果您的內容主要以圖片為主,那麼像素可能最適合您。如果您的內容大多以文字為主,建議您使用以文字大小為依據的相對單位,例如 emch

@media (min-width: 25em) {
  // Styles for viewports wider than 25em.
}

您也可以結合媒體查詢來套用多個條件。使用 and 這個字來結合媒體查詢:

@media (min-width: 50em) and (max-width: 60em) {
  // Styles for viewports wider than 50em and narrower than 60em.
}

根據內容選擇中斷點

媒體功能條件變為 True 的時間點稱為中斷點。建議您根據內容選擇斷點,而非熱門裝置尺寸,因為裝置尺寸會隨著每個技術版本週期而變更。

在這個範例中,50em 是文字行變得過長的點。因此,我們建立了一個中斷點,讓介面更易於閱讀。使用 column-count 屬性後,文字會從該點開始分成兩欄。

@media (min-width: 50em) {
  article {
    column-count: 2;
  }
}

組合

您可以根據可視區域的高度使用媒體查詢,而非只根據寬度。這項功能可用於改善「不需捲動位置」的介面內容。在前述範例中,如果讀者使用寬度較寬但高度較短的瀏覽器視窗,就必須向下捲動一欄,然後再向上捲動,才能到達第二欄的頂端。只有在可視區域寬度和高度都足夠時,才建議套用資料欄。

您可以結合媒體查詢,讓系統只在所有條件都符合時套用樣式。在這個範例中,視區大小至少必須為 50em 寬和 30em 高,才能套用欄位樣式。這些中斷點是根據內容量來選擇。

@media (min-width: 50em) and (min-height: 30em) {
  article {
    column-count: 2;
  }
}

這些範例說明如何使用媒體查詢,將設計調整為符合使用者裝置的板型,但這只是可能性的一小部分。媒體查詢不僅可用於寬度和高度,還可用於存取使用者針對無障礙功能和主題顏色的偏好設定。使用媒體查詢調整版面配置,是打造回應式設計的絕佳起點,這類設計會運用這些功能和其他功能。

進行隨堂測驗

測驗您對回應式媒體查詢的相關知識。

媒體查詢是否只適用於螢幕大小?

true
請再試一次!媒體查詢,例如列印、深色和淺色系統偏好設定等等。
false
🎉

螢幕是否是網站內容唯一的消費或顯示來源?

true
請再試一次!網站內容可能會印在紙上、由搜尋引擎蜘蛛爬取、由螢幕閱讀器技術朗讀,甚至由機器人透過 Google 助理向使用者朗讀。
false
🎉

預設媒體類型為?

screen
請再試一次!screen 不是預設類型。
none
請再試一次!none 不是有效的媒體類型。
all
🎉
some
請再試一次!some 不是有效的媒體類型。
landscape
請再試一次!landscape 不是有效的媒體類型。

如何避免瀏覽器在行動裝置上縮放設計?

width: 100%
請再試一次!
font-size: 200%
請再試一次!
<meta name="viewport" content="width=device-width, initial-scale=1">
🎉
媒體查詢
請再試一次!
HTML5
請再試一次!

瀏覽器視窗「超過」720px 時,要套用的媒體查詢。

@media (width: 720px)
請再試一次!這個媒體查詢僅適用於瀏覽器視窗等於 720px 的情況。
@media (max-width: 720px)
請再試一次!這個媒體查詢適用於瀏覽器視窗小於 720px 的情況。
@media (min-width: 720px)
🎉? 您可以閱讀這篇文章,因為瀏覽器視窗至少有 720px
@media (clamp-width: 720px)
請再試一次!clamp-width 不是有效的媒體查詢功能條件。