background是一個簡寫屬性,能夠在一次聲明中定義一個或多個屬性。除去特定的屬性 其餘屬性能夠按任意位置放置。css
background語法:html
background : [background-color] | [background-image] | [background-position][/background-size] | [background-repeat] | [background-attachment] | [background-clip] | [background-origin],...
web
CSS3 background
支持多重背景,主要是靠origin
、clip
和size
組成新的background
屢次疊加bash
background
屬性被指定多個背景層時,使用逗號分隔每一個背景層。每一個屬性用空格隔開size
的值必須緊跟着position
,用 / 隔開background-color
只能設置一個值 且被包含在最後一層border-box/padding-box/content-box
若是出現一次則同時設置origin
和clip
,若是出現兩次 第一個指定origin
,第二個指定clip
background-color
會設置元素的背景色,屬性的值爲顏色值或者關鍵字「transparent」兩者選其一。background-color
的優先級比background-image
低,若是同時存在backgound-color
和background-image
時,image會顯示在color上面字體
/* Keyword values */
background-color: red;
/* Hexadecimal value */
background-color: #bbff00;
/* RGB value */
background-color: rgb(255, 255, 128);
/* HSLA value */
background-color: hsla(50, 33%, 25%, 0.75);
/* Special keyword values */
background-color: currentColor;
background-color: transparent;
/* Global values */
background-color: inherit;
background-color: initial;
background-color: unset;
複製代碼
background-image屬性用於爲一個元素設置一個或者多個背景圖像,多個背景圖用','隔開。
background-image: url('xx') || linear-gradient(漸變) || none(無背景圖)
flex
/* html */
<div class="border-image-color"></div>
/* css */
.border-image-color {
width: 500px;
height: 400px;
border: 20px dashed yellowgreen;
background-image: url(https://user-gold-cdn.xitu.io/2020/3/19/170f20b3c106f518?w=642&h=339&f=png&s=107259);
background-repeat: no-repeat;
background-origin: border-box;
background-color: lightSkyBlue;
background-position: -60px -20px;
}
複製代碼
background-image
的繪製方向在Z軸上堆疊方式,先指定的圖像會在後指定圖像上面background-image
繪製在border
之下,background-color
之上background-image
的繪製、顯示位置與background-position
、background-clip
、background-origin
相關 background-origin
規定了背景圖片background-image
屬性的原點位置的背景相對區域,爲background-position
設置初始位置。可是當background-attachment
爲fixed
時,此屬性將被忽略,不起做用。ui
background-position
爲每一個背景圖片設置初始位置,background-position
的原點是background-origin
定義的位置,相對偏移量都是以原點爲基準。url
三種取值類型能夠混合使用spa
center
用來居中背景圖片left
、right
指定圖片放置於X軸的左右邊緣top
、bottom
指定圖片放置於Y軸的上下邊緣background-position
屬性已經獲得擴展,它容許咱們指定背景圖片距離任意角的偏移量,只要咱們在偏移量(length
/percentage
)前面指定關鍵字(top
,bottom
,left
,right
)3d
百分比值的偏移指定圖片的相對位置和容器相對位置重合。值0%表示圖片的(左上)邊界與容器(左上)邊界重合,值100%表明圖片的右邊界(或下邊界)和容器的右邊界(或下邊界)重合。值50%則表明圖片的中點和容器的中點重合。
percentage公式:
(container width - image width) * (position x%) = (x offset value)
(container height - image height) * (position y%) = (y offset value)
/* html */
<div class="border-image-color"></div>
/* css */
/*
圖片寬度: 642px
容器寬度: 742px
容器寬度:,容器box-sizing與背景background-origin同步做用
若想X方向上移動20px:20px / (742px - 642px) = 20%
X方向上移動20%,實際移動像素值: (742px - 642px) * 20% = 20px
其中若background-origin爲padding-box
實際容器寬度應爲包裹圖片時原點origin控制的部分
容器寬度則須要減去邊框40px,實際爲702px,再在X軸移動20%時實際移動的像素:
(702px - 642px) * 20% = 12px
*/
.border-image-color {
box-sizing: border-box;
width: 742px;
height: 400px;
border: 20px dashed yellowgreen;
background-image: url(https://user-gold-cdn.xitu.io/2020/3/19/170f20b3c106f518?w=642&h=339&f=png&s=107259);
background-repeat: no-repeat;
background-origin: border-box;
background-color: lightSkyBlue;
background-position: 20% 0px;
}
複製代碼
background-size
設置背景圖片的大小。圖片能夠保有原有的尺寸,或者拉伸到新的尺寸,或者保持其原有比例的同時縮放到元素的可用空間尺寸
position
的容器寬高)的百分比。背景區由background-origin
設置 background-repeat
屬性定義背景圖像的重複方式。背景圖像能夠沿着水平軸,垂直軸,兩個軸重複,或者根本不重複。
屬性 | 定義 |
---|---|
repeat | 圖像會按需重複來覆蓋整個背景圖片所在的區域. 最後一個圖像會被裁剪, 若是它的大小不合適的話. repeat-x、repeat-y指定單方向重複 |
space | 圖像會盡量得重複, 可是不會裁剪. 第一個和最後一個圖像會被固定在元素(element)的相應的邊上, 同時空白會均勻地分佈在圖像之間. background-position屬性會被忽視, 除非只有一個圖像能被無裁剪地顯示. 只在一種狀況下裁剪會發生, 那就是圖像太大了以致於沒有足夠的空間來完整顯示一個圖像. |
round | 隨着容許的空間在尺寸上的增加, 被重複的圖像將會伸展(沒有空隙), 直到有足夠的空間來添加一個圖像. 當下一個圖像被添加後, 全部的當前的圖像會被壓縮來騰出空間. 例如, 一個圖像原始大小是260px, 重複三次以後, 可能會被伸展到300px, 直到另外一個圖像被加進來. 這樣他們就可能被壓縮到225px. |
no-repeat | 圖像不會被重複(由於背景圖像所在的區域將可能沒有徹底被覆蓋). 那個沒有被重複的背景圖像的位置是由background-position屬性來決定. |
background-attachment
屬性決定背景圖像的位置是在視口內固定,仍是隨着包含它的區塊滾動。
background-clip
設置元素的背景(背景圖片或顏色)是否延伸到邊框下面
-webkit-background-clip
, 字體的顏色使用背景色 即color: transparent
/-webkit-text-fill-color: transparent
;/* html */
<div class="border-image-color">
text
</div>
/* css */
.border-image-color {
box-sizing: border-box;
width: 642px;
height: 400px;
font-size: 100px;
line-height: 300px;
text-align: center;
border: 20px dashed yellowgreen;
background-image: url(https://user-gold-cdn.xitu.io/2020/3/19/170f20b3c106f518?w=642&h=339&f=png&s=107259);
background-repeat: no-repeat;
background-origin: border-box;
-webkit-background-clip: text;
color: transparent;
}
複製代碼
工做場景: 官網主頁底部爲鋪滿不一樣的圖片,圖片之上再進行 基本的圖片文字排版
使用多重背景處理能夠避免冗餘空的html元素格外鋪圖片,避免僞元素和僞類去進行多餘的position定位(若背景圖片超過2個時,使用僞類和僞元素也比較困難)
/* html */
<div class="border-image-color">
<div class="section">
我是排版一
</div>
<div class="section">
我是排版二
</div>
</div>
/* css */
.border-image-color {
display: flex;
flex-direction: column;
box-sizing: border-box;
width: 600px;
height: 580px;
border: 1px solid yellowgreen;
text-align: center;
background: url(https://user-gold-cdn.xitu.io/2020/3/20/170f5f4c42de2970?w=672&h=299&f=png&s=146779) 0px 0px,
url(https://user-gold-cdn.xitu.io/2020/3/19/170f20b3c106f518?w=642&h=339&f=png&s=107259) 0px 250px;
background-size: contain 250px;
background-repeat: no-repeat;
}
.section {
width: 400px;
height: 200px;
line-height: 200px;
margin: 30px auto;
text-align: center;
background-color: rgba(0,0,0, .8);
color: #fff;
}
複製代碼