背景

CSS Podcast - 053:背景

背景

每個 CSS 方塊後面是特殊層,稱為「背景圖層」。CSS 供應商提供多種方式,以便進行有意義的變更,包括允許使用多種背景。

背景圖層最靠近使用者的位置,從其 padding-box 區域開始顯示在方塊內容後方。這樣一來,背景圖層就完全不會與框線重疊。

背景顏色

瀏覽器支援

  • 1
  • 12
  • 1
  • 1

資料來源

套用至背景圖層的最簡單效果之一就是設定「顏色」background-color 的初始值為 transparent,會顯示父項的內容。背景圖層設定的有效顏色,位於該元素上繪製的其他項目後方。

背景圖片

瀏覽器支援

  • 1
  • 12
  • 1
  • 1

資料來源

background-color 圖層之上,您可以使用 background-image 屬性新增背景圖片。background-image 接受下列屬性:

  • 使用 url CSS 函式的圖片網址或資料 URI
  • 透過漸層 CSS 函式動態建立的圖片。

使用 url CSS 函式設定背景圖片

CSS 漸層背景

有數種漸層 CSS 函式,可讓您在傳遞兩種以上顏色時產生背景圖片。

無論使用何種漸層函式,產生的圖片都會固定大小,以符合可用空間大小。

示範使用漸層函式套用背景圖片的範例:

重複背景圖片

瀏覽器支援

  • 1
  • 12
  • 1
  • 1

資料來源

根據預設,背景圖片會水平和垂直重複顯示,填滿背景圖層的整個空間。

如要變更,請使用 background-repeat 屬性和下列其中一個值:

  • repeat:圖片會在可用空間內重複顯示,並視需要裁剪。
  • round:圖片會橫向和直向重複顯示,以符合可用空間的大小。如果可用空間會增加圖片,並且拉長圖片原始寬度的一半,請先壓縮以新增更多圖片例項。
  • space:圖片會以水平和垂直方式重複顯示,以符合可用空間中執行個體 (不會裁剪) 的數目,並視需要保持圖片例項的間距。重複圖片會觸碰背景圖層佔用的空間,並以空格平均分配。

background-repeat 屬性可讓您單獨設定 x 和 Y 軸的行為。第一個參數會設定水平重複行為,第二個參數則設定垂直重複行為。

如果使用單一值,此值會同時套用到水平和垂直的重複值。

簡而言之,也可以使用便利的單字詞選項,讓意圖更加清楚。

repeat-x 值只會水平重複圖片;相當於 repeat no-repeat

以下示範將展示 background-repeat 屬性的這些功能:

背景位置

瀏覽器支援

  • 1
  • 12
  • 1
  • 1

資料來源

您可能已經注意到,當網路上的部分圖片套用 background-repeat: no-repeat 宣告樣式時,例如這些圖片顯示在容器的左上方。

背景圖片的初始位置位於左上方。background-position 屬性可讓您藉由偏移圖片位置來變更此行為。

background-repeat 相同,background-position 屬性可讓您單獨將圖片沿著 x 和 y 軸定位,並使用兩個值。

使用 CSS 長度和百分比時,第一個參數會對應水平軸,第二個參數則對應到縱軸。

當關鍵字只採用關鍵字順序時,無關緊要:

正確做法
background-position: left 50%;
正確做法
background-position: top left;
正確做法
background-position: left top;

對於與不同軸位置相關的關鍵字順序不會有影響。

錯誤做法
  background-position: 50% left;

將 CSS 值與關鍵字搭配使用時,順序很重要。第一個值代表水平軸和第二軸。

錯誤做法
  background-position: left right;

不能同時使用與同一軸相關聯的關鍵字。

background-position 屬性也有便利的單個值;省略的值會解析為 50%。以下範例說明如何使用 background-position 屬性接受的關鍵字:

除了預設的雙參數格式和一個參數形式之外,background-position 屬性也最多接受四個參數。

使用三個或四個參數時,CSS 長度或百分比前面必須加上 topleftrightbottom 關鍵字,瀏覽器才能計算偏移量的來源 CSS 方塊邊緣。

使用三個參數時,CSS 長度或值可以是第二個或第三個參數,另一個是關鍵字;系統會使用成功的關鍵字決定 CSS 長度或值與偏移值對應的邊緣。指定的其他關鍵字的偏移值設為 0。

正確做法
background-position: bottom 88% right;
正確做法
background-position: right bottom 88%;
錯誤做法
background-position: 88% bottom right;
使用三個以上的參數時,CSS 長度值必須在 toprightbottomleft 關鍵字前面。
正確做法
background-position: bottom 88% right 33%;
正確做法
background-position: right 33% bottom 88%;
錯誤做法
background-position: 88% 33% bottom left;
使用三個以上的參數時,CSS 長度值必須在 toprightbottomleft 關鍵字前面。

如果將 background-position: top left 20% 套用至 CSS 背景圖片,圖片就會放在方塊頂端,20% 值代表與方塊左側 (x 軸) 的偏移 20%。

如果將 background-position: top 20% left 套用至 CSS 背景圖片,20% 值代表與 CSS 方塊頂端 (Y 軸) 頂部的偏移 20%,且圖片會放在方塊左側。

Google 使用四個參數時,會將兩個關鍵字與兩個值配對,對應至您所指定的每個關鍵字起點的偏移量。如果將 background-position: bottom 20% right 30% 套用至背景圖片,則背景圖片的位置會距離底部 20%,以及 CSS 方塊右側 30% 的位置。

以下示範將示範這個行為:

以下舉例說明如何結合 CSS 和關鍵字值來使用 background-position 屬性:

背景大小

瀏覽器支援

  • 3
  • 12
  • 4
  • 5

資料來源

background-size 屬性可設定背景圖片的大小。根據預設,背景圖片會根據圖片本身的 (實際) 寬度、高度和顯示比例調整大小。

background-size 屬性使用 CSS 長度和百分比值或特定關鍵字。屬性最多接受兩個對應參數,可讓您獨立變更背景的寬度和高度。

background-size 屬性接受下列關鍵字:

  • auto:單獨使用時,系統會根據背景的寬度和高度調整背景圖片大小;如果將 auto 與寬度 (第一個參數) 或高度 (第二個參數) 的其他 CSS 值搭配使用,設為 auto 的維度會視需要調整大小,維持圖片的自然顯示比例。這是 background-size 屬性的預設行為。
  • cover:遮蓋背景圖層的整個區域。這可能表示圖片已拉長或裁剪。
  • contain:調整圖片大小,填滿整個空間,不延展或裁剪。因此,除非將 background-repeat 設為 no-repeat,否則空白空間可以保留圖片重複顯示的情形。

第二種是在沒有其他參數的情況下,單獨使用。

以下示範關鍵字的實際運作情形:

示範將這些關鍵字套用至 background-size 的示範:

背景附件

瀏覽器支援

  • 1
  • 12
  • 1
  • 1

資料來源

background-attachment 屬性可讓您在顯示圖層時,修改背景圖片 (背景圖層部分的圖片) 的固定位置行為。

可接受 3 個關鍵字:scrollfixedlocal

background-attachment 屬性的預設行為是 scroll 的初始值。如果需要更多空間,圖片會在背景圖層中隨著該空間移動 (視 CSS 方塊的邊界決定)。

使用 fixed 值可將背景圖片的位置修正為可視區域。

背景圖層圖片最初需要捲動 (或轉譯) 螢幕外部後,背景圖層中的圖片會保持固定在背景位置,因為這些圖片得以在可視區域將整個圖層捲動至畫面外為止。

local 關鍵字可讓背景圖片的位置根據元素的內容固定。背景圖片現在會沿著佔用的空間移動,因為該空間會在 CSS 方塊的邊界內外轉譯 (通常是因為捲動、2D 或 3D 轉換所致)。

背景來源

瀏覽器支援

  • 1
  • 12
  • 4
  • 3

資料來源

background-origin 屬性可讓您修改與特定方塊相關聯的背景區域。屬性接受的值對應至方塊的 border-boxpadding-boxcontent-box 區域。

請嘗試透過以下示範嘗試這些選項:

背景片段

瀏覽器支援

  • 1
  • 12
  • 4
  • 5

資料來源

background-clip 屬性可控制背景圖層所看到的內容,無論 background-origin 屬性建立的範圍為何。

background-origin 一樣,可以指定的區域都是對應至 CSS 背景圖層算繪位置的 border-boxpadding-boxcontent-box。使用這些關鍵字時,系統會將背景畫面比指定區域進一步的顯示圖像裁切或裁切。

background-clip 屬性也接受 text 關鍵字,該關鍵字會剪輯背景,不能比內容方塊中文字的還要長。為了在 CSS 方塊的實際文字中顯而易見,文字必須部分或完全透明。

在本文撰寫時,Chrome 和多數瀏覽器會要求使用 -webkit- 前置字元,才能使用相對的新屬性。

瀏覽器支援

  • 1
  • 12
  • 4
  • 5

資料來源

多個背景

如 本單元開頭所說,背景圖層允許定義多個子圖層。為求精簡,我會將這些子圖層稱為背景。

多個背景由上到下定義;第一個背景最接近使用者,最後一個背景則與使用者最遠。

唯一定義的背景或最後一個圖層是由瀏覽器指定「最終背景圖層」。只有這個圖層可以指派 background-color

您可藉由使用多數與背景相關的 CSS 屬性 (以半形逗號分隔) 來個別設定多個圖層,如下方程式碼片段和實際示範所示。

background-image: url("https://assets.codepen.io/7518/pngaaa.com-1272986.png"),
    url("https://assets.codepen.io/7518/blob.svg"),
    linear-gradient(hsl(191deg, 40%, 86%), hsla(191deg, 96%, 96%, 0.5));
  background-size: contain, cover, auto;
  background-repeat: no-repeat, no-repeat, no-repeat;
  background-position: 50% 50%, 10% 50%, 0% 0%;
  background-origin: padding-box, border-box, content-box;

背景簡寫

為便於設定方塊的背景圖層樣式,尤其在需要多個背景圖層時更是如此。我們只需要遵循以下特定模式的簡寫:

background:
  <background-image>
  <background-position> / <background-size>?
  <background-repeat>
  <background-attachment>
  <background-origin>
  <background-clip>
  <background-color>?

在宣告多個背景時,順序至關重要。必須提供位置和大小值,並以斜線 (/) 分隔。如要以正確的順序宣告起點和剪輯行為,即可運用同時適用於兩者的關鍵字

下列聲明會剪輯背景,並從內容方塊中移除該背景:

background: url("https://assets.codepen.io/7518/blob.svg") 50%
      50% / contain no-repeat content-box;

瞭解這些簡短語意後,先前和背景相關宣告的程式碼片段可改寫如下:

background: url("https://assets.codepen.io/7518/pngaaa.com-1272986.png") 50% 50%/contain no-repeat padding-box, url("https://assets.codepen.io/7518/blob.svg") 10% 50% / cover border-box, linear-gradient(hsl(191deg, 40%, 86%), hsla(191deg, 96%, 96%, 0.5) ) 0% 0% / cover no-repeat content-box ;

隨堂測驗

測驗您對 CSS 背景的相關知識

背景圖片位於 CSS 方塊的左上方。

答對了!
false
視圖片本身的尺寸而定,圖片可能無法放在 CSS 方塊的左上角,您必須明確使用 background-position 變更背景圖片的預設位置。

根據預設,系統不會重複顯示背景圖片。

false
必須明確使用 background-repeat: no-repeat,才能重複使用背景圖片。此外,你還可以使用 background-repeat: repeat-xbackground-repeat: repeat-y,避免特定軸重複。
答對了!

以下何者是有效的 background-position 宣告?

background-position: 50% left
搭配關鍵字使用 CSS 值時,值的順序很重要。
background-position: top right 33%
這會將背景圖片放置在方塊頂端,距離方塊右側 33% 的位置。
background-position: right bottom
這會將背景圖片放置在方塊的右側和底部。不同軸的位置可依任何順序命名。
background-position: left
這會將背景圖片放置在方塊的左側並垂直置中。如果只提供一個軸的一個位置,背景圖片則置中。

如何將背景圖片設定為固定的可視區域內:

background-position: fixed
「這是 background-position 屬性的值無效。」
background-fixed-to-viewport: true
CSS 中尚不存在 background-fixed-to-viewport
background-attachment: fixed
background-attachment: fixed 會明確將背景圖片在目前的可視區域中固定。
background-attachment: scroll
background-attachment」屬性可用來將背景圖片設為固定在可視區域內。不過,scroll 是屬性的預設值,根據預設,可將背景圖片修正為不對方塊中內容影響的方塊。」

CSS 方塊中的預設背景背景來源為:

content-box
background-origin 的有效值,但並非預設值。
border-box
background-origin 的有效值,而且可在背景上繪製預先安排的邊框,但並非預設值。
padding-box
background-origin 的預設值。允許背景顯示內容超出內容範圍,且最多可置於方塊的邊框上。
margin-box
雖然 CSS 方塊可識別的區域,但 background-origin 屬性並非無效值。