響應式網頁設計 - 媒體查詢

什么是媒體查詢?

媒體查詢是 CSS3 中引入的一種 CSS 技術。

僅在滿足特定條件時,它才會使用 @media 規則來引用 CSS 屬性塊。

實例

如果瀏覽器窗口是 600px 或更小,則背景顏色為淺藍色:

@media only screen and (max-width: 600px) {
  body {
    background-color: lightblue;
  }
}

親自試一試

添加斷點

在本教程中稍早前,我們制作了一張包含行和列的網頁,但是這張響應式網頁在小屏幕上看起來效果并不好。

媒體查詢可以幫助您。我們可以添加一個斷點,其中設計的某些部分在斷點的每一側會表現得有所不同。


桌面電腦

手機

使用媒體查詢在 768px 處添加斷點:

實例

當屏幕(瀏覽器窗口)小于 768px 時,每列的寬度應為 100%:

/* 針對桌面設備: */
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col-6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 {width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}
@media only screen and (max-width: 768px) {
  /* 針對手機: */
  [class*="col-"] {
    width: 100%;
  }
}

親自試一試

始終移動優先設計

移動優先(Mobile First)指的是在對臺式機或任何其他設備進行設計之前,優先針對移動設備進行設計(這將使頁面在較小的設備上顯示得更快)。

這意味著我們必須在 CSS 中做一些改進。

當寬度小于 768px 時,我們應該修改設計,而不是更改寬度。我們就這樣進行了“移動優先”的設計:

實例

/* 針對手機: */
[class*="col-"] {
  width: 100%;
}
@media only screen and (min-width: 768px) {
  /* 針對桌面: */
  .col-1 {width: 8.33%;}
  .col-2 {width: 16.66%;}
  .col-3 {width: 25%;}
  .col-4 {width: 33.33%;}
  .col-5 {width: 41.66%;}
  .col-6 {width: 50%;}
  .col-7 {width: 58.33%;}
  .col-8 {width: 66.66%;}
  .col-9 {width: 75%;}
  .col-10 {width: 83.33%;}
  .col-11 {width: 91.66%;}
  .col-12 {width: 100%;}
}

親自試一試

另一個斷點

您可以添加任意多個斷點。

我們還會在平板電腦和手機之間插入一個斷點。


桌面電腦

平板電腦

手機

為此,我們添加了一個媒體查詢(在 600 像素),并為大于 600 像素(但小于 768 像素)的設備添加了一組新類:

實例

請注意,兩組類幾乎相同,唯一的區別是名稱(col- 和 col-s-):

/* 針對手機: */
[class*="col-"] {
  width: 100%;
}
@media only screen and (min-width: 600px) {
  /* 針對平板電腦: */
  .col-s-1 {width: 8.33%;}
  .col-s-2 {width: 16.66%;}
  .col-s-3 {width: 25%;}
  .col-s-4 {width: 33.33%;}
  .col-s-5 {width: 41.66%;}
  .col-s-6 {width: 50%;}
  .col-s-7 {width: 58.33%;}
  .col-s-8 {width: 66.66%;}
  .col-s-9 {width: 75%;}
  .col-s-10 {width: 83.33%;}
  .col-s-11 {width: 91.66%;}
  .col-s-12 {width: 100%;}
}
@media only screen and (min-width: 768px) {
  /* 針對桌面: */
  .col-1 {width: 8.33%;}
  .col-2 {width: 16.66%;}
  .col-3 {width: 25%;}
  .col-4 {width: 33.33%;}
  .col-5 {width: 41.66%;}
  .col-6 {width: 50%;}
  .col-7 {width: 58.33%;}
  .col-8 {width: 66.66%;}
  .col-9 {width: 75%;}
  .col-10 {width: 83.33%;}
  .col-11 {width: 91.66%;}
  .col-12 {width: 100%;}
}

有兩組相同的類似乎很奇怪,但是它給了我們機會用 HTML 來決定在每個斷點處的列會發生什么:

HTML 實例

對于臺式機:

第一和第三部分都會跨越 3 列。中間部分將跨越 6 列。

對于平板電腦:

第一部分將跨越 3 列,第二部分將跨越 9 列,第三部分將顯示在前兩部分的下方,并將跨越 12 列:

<div class="row">
  <div class="col-3 col-s-3">...</div>
  <div class="col-6 col-s-9">...</div>
  <div class="col-3 col-s-12">...</div>
</div>

親自試一試

典型的設備斷點

高度和寬度不同的屏幕和設備不計其數,因此很難為每個設備創建精確的斷點。為了簡單起見,您可以瞄準這五組:

實例

/* 超小型設備(電話,600px 及以下) */
@media only screen and (max-width: 600px) {...} 
/* 小型設備(縱向平板電腦和大型手機,600 像素及以上) */
@media only screen and (min-width: 600px) {...} 
/* 中型設備(橫向平板電腦,768 像素及以上) */
@media only screen and (min-width: 768px) {...} 
/* 大型設備(筆記本電腦/臺式機,992px 及以上) */
@media only screen and (min-width: 992px) {...} 
/* 超大型設備(大型筆記本電腦和臺式機,1200px 及以上) */
@media only screen and (min-width: 1200px) {...}

親自試一試

方向:人像 / 風景

媒體查詢還可用于根據瀏覽器的方向來更改頁面的布局。

您可以設置一組 CSS 屬性,這些屬性僅在瀏覽器窗口的寬度大于其高度時才適用,即所謂的“橫屏”方向:

實例

如果方向為橫向模式(landscape mode),則網頁背景為淺藍色:

@media only screen and (orientation: landscape) {
  body {
    background-color: lightblue;
  }
}

親自試一試

用媒體查詢隱藏元素

媒體查詢的另一種常見用法是在不同屏幕尺寸上對元素進行隱藏:

實例

/* 如果屏幕尺寸為 600 像素或更小,請隱藏該元素 */
@media only screen and (max-width: 600px) {
  div.example {
    display: none;
  }
}

親自試一試

用媒體查詢修改字體

您還可以使用媒體查詢來更改不同屏幕尺寸上的元素的字體大小:

實例

/* 如果屏幕尺寸為 601px 或更大,請將 <div> 的 font-size 設置為 80px */
@media only screen and (min-width: 601px) {
  div.example {
    font-size: 80px;
  }
}
/* 如果屏幕尺寸為 600px 或更小,請將 <div> 的 font-size 設置為 30px */
@media only screen and (max-width: 600px) {
  div.example {
    font-size: 30px;
  }
}

親自試一試

CSS @media 參考手冊

有關所有媒體類型和特性/表達式的完整概述,請在 CSS 參考手冊中參閱 @media 規則