關於Background-image與響應式


Posted by hoyi-23 on 2021-06-16

雖然說在CSS reset 上會加上

img{
    max-width: 100%;
    height: auto;
    }

使圖片自適應,那麼背景圖片該如何做到自適應呢?


什麼時機用背景圖片?

使用 img 標籤時機

  1. 希望別人列印頁面時候包含這張圖片。(當圖片本身屬於網站內容的一部份時)
  2. 當這張圖片有特別意義的語義,比如警告圖示,就需使用img標籤及它的alt屬性。向所有的使用者終端實現他的意義。
  3. 如果使用動畫,img動畫要比background-image 表現更好。
  4. 當圖片要有超連結,連結到外部網址時。
  5. 當圖片要有點圖放大的功能時

使用 background-image 使用時機

  1. 如果圖片不是內容的一部分使用 background-image。
  2. 如果使用圖片替換文字請使用 background-image。
  3. 如果不希望別人列印頁面時候包含這張圖片請使用 background-image。
  4. 如果想改善載入時間 使用 CSS sprites (也就是小圖合併大圖的意思,可以把很多張小圖合併到一張大圖裡)。
    例如:原本10張小圖會觸發10次HTTP request,但透過CSS Sprites就可以只觸發1次HTTP request,如此一來,只需要load一張圖,降低網頁載入的時間。
  5. 如果只想用一張圖片的一部分 請使用 CSS sprites。
  6. 希望圖片自適應到某個高度即停止。

基本上在網站新增圖片時還是會先建議用HTML的,除非是要設定一個section的背景圖片再用CSS的background-image。而且新增HTML的後,可以再去CSS設定圖片樣式,像是:border-radius、box-shadow、filter、object-fit、opacity等等,彈性比較大。


background-image 語法

div{
    background-image: url(...);
    height: 300px; (可以控制自適應的高度)
    background-size: auto / cover / contain / % / px ; (用來設定背景圖片的尺寸)
    background-position: center / top / left / bottom / px / % ;
    background-attachment: scroll / fixed / local; (背景圖的固定樣式,在使用者捲動卷軸時呈現不一樣的視覺效果)
    background-repeat: repeat / no-repeat / repeat-x /repeat-y / space / round ;(設定背景圖片是否要重複)
}

上面為比較常用到的屬性,下面來詳細介紹:

基本語法

background-image: url(...);
導入背景圖片,可以使用相對路徑也可以使用絕對路徑

background-size 設定背景圖片的尺寸

auto : 不改變原圖尺寸。
cover : 不改變圖片比例的情況下,用背景圖片把區塊塞滿後裁切。
contain : 不改變圖片比例的情況下,完整呈現圖片。
% : 選擇背景圖片在區塊中要顯示的比例。(會設置寬與高,若只有一個數字則高度為auto)。
px : 直接給定圖片的width和height,如果只輸入一個值,則width和height相同。

background-position 設定背景圖片的位置

可以使用left/right/top/center/bottom/%/px
如果只輸入一個值,則width和height相同。

background-attachment 設定背景圖的固定樣式

不同的設定讓使用者捲動卷軸時呈現不一樣的視覺效果
scroll : (預設)當你設定背景圖的區塊也有卷軸時,在捲動該區塊卷軸時,背景圖會固定位置不變,但當捲動整個網頁的卷軸時,該區塊的背景圖繪跟著網頁卷軸滾動。
fixed : 不管你在捲動設定背景圖區塊內的卷軸,或是整個網頁的卷軸,背景圖都會固定位置不變。
local : 不管捲動哪個卷軸,背景圖都會跟著卷軸移動。

background-repeat 設定背景圖片是否要重複

repeat
no-repeat
repeat-x : 只在x軸重複背景圖片。
repeat-y : 只在y軸重複背景圖片。
space : 背景圖片尺寸不變的情況下,自動調整重複的背景圖片之間的間距。
round : 調整背景圖片的尺寸,讓重複的背景圖片可以剛好塞滿設定背景的區塊。


在製作網頁時,我會先客製化class:

.zoomimage{
    background-size: cover;
    background-position: center center;
    background-repeat: no-repeat;
    -webkit-background-size: cover;
    -moz-background-size: cover;
}

當需要用到響應式的背景圖片時,僅需在區塊加上圖片路徑url與想特定設置的高度,再加上class即可。


另外在使用background-image時要特別注意:
想要使用background-image外面一定要有一個container,通常在html上會使用div。
需要特別注意的是外面這層div若沒有設定寬高,背景圖片是不會顯示出來的。


#background-image #背景圖片 #img







Related Posts

用 Express & Sequelize 做一個餐廳網站

用 Express & Sequelize 做一個餐廳網站

React-[表單篇]-表單開發|手工版本

React-[表單篇]-表單開發|手工版本

D51_W6 直播檢討、W7 開始

D51_W6 直播檢討、W7 開始


Comments