家好,我是大澈!
本文約 700+ 字,整篇閱讀約需 1 分鐘。
每日分享一段優(yōu)質(zhì)代碼片段。
今天分享一段 CSS 代碼片段,使用 CSS 設(shè)置網(wǎng)頁全屏背景圖片,很簡單。
老規(guī)矩,先閱讀代碼片段并思考,再看代碼解析再思考,最后評論區(qū)留下你的見解!
html {
background: url('images/bg.jpg') no-repeat center center fixed;
background-size: cover;
-webkit-background-size: cover; /* 適用于舊版 WebKit 瀏覽器 */
-moz-background-size: cover; /* 適用于舊版 Firefox 瀏覽器 */
-o-background-size: cover; /* 適用于舊版 Opera 瀏覽器 */
}
分享原因
這段代碼展示了如何使用 CSS 設(shè)置網(wǎng)頁全屏背景圖片,使其在不同瀏覽器中都能完美適應(yīng)屏幕尺寸。
這對于創(chuàng)建具有視覺吸引力且兼容性良好的網(wǎng)頁非常重要。
代碼解析
1. background: url('images/bg.jpg') no-repeat center center fixed;
background:簡寫屬性,用于設(shè)置所有背景屬性。
url('images/bg.jpg'):指定背景圖像的路徑。
no-repeat:背景圖像不重復(fù)顯示。
center center:背景圖像在水平方向和垂直方向都居中顯示。
fixed:背景圖像固定在視口中,即使頁面滾動,背景圖像也不會移動。
2. background-size: cover;
background-size: cover:使背景圖像按比例縮放,以完全覆蓋背景區(qū)域。這意味著圖像可能會被裁剪以適應(yīng)容器。
3. 瀏覽器前綴的使用
-webkit-background-size:適用于舊版 WebKit 瀏覽器(如舊版 Safari 和 Chrome)。
-moz-background-size:適用于舊版 Firefox 瀏覽器。
-o-background-size:適用于舊版 Opera 瀏覽器。
這些瀏覽器前綴用于處理舊版瀏覽器的兼容性問題。雖然現(xiàn)代瀏覽器大多已經(jīng)支持標(biāo)準(zhǔn)的 background-size 屬性,但在代碼中加入這些前綴可以確保在老舊瀏覽器中也能正常顯示背景圖片。
- end -
務(wù)8:全屏模式的切換。
這張就是第八,第八小姐就是講關(guān)于全屏模式的切換。回到頁面,希望有個按鈕,一點全屏娛樂模式,這一點就切換回來。可能我個人不太喜歡這種模式,但有的人會用,還是把它設(shè)計進(jìn)去。
然后就在這個地方加一個圖標(biāo),有空再找一下。找了一個圖標(biāo),就找這個。jump through screen one,這有了嗎?有了,還挺好。然后就稍小了一點,再給它大一點,size,就不要說是二十,可以。點它,現(xiàn)在沒效果,來做這個效果。
首先給它定一個變量叫is war screen,是不是全屏的?它肯定是響應(yīng)數(shù)據(jù)了,i e f,它不是默認(rèn),當(dāng)然響應(yīng)數(shù)據(jù)這邊可以給它添類型,比如它是birch,填birch。如果它不是,還找一個相對的,跟它相反的按鈕,收回來的按鈕,就用這個。
off for screen one,就這個,給它來復(fù)制一下,把它放松,就是衣服regan in the first three,如果它真的,就顯示上面的,否則就顯示下面的。來看一下,這邊有一個方法,就這樣可以,可能還做其他的,記得就給它定一個top切換螺絲功能,它是一個,然后再調(diào)整這個方法就行了。
就要投screen,點,沒效果,為啥沒效果?是不是點錯了?這邊點這上面,再說下面一個,放到槍上,點,看有切換效果了。怎么樣給它切換?這個是節(jié)食里面固定的方法,如果它的值,直接給它切換,就是document,the element,點a request,press greet plug,就是全屏切換。
這里切換了,這點沒效果只按a xe,所以這邊也不對,所以希望它變成這個時候就把它縮回來,這邊就要做一個判斷了,就是來判斷它是不是已經(jīng)縮放了,如果它已經(jīng)是展開了,就把它縮回來,也是,這個就退出,否則就把它刪遠(yuǎn),就簡單的刪遠(yuǎn),刪除就可以了。
試一下,點,點,回來了,點,點,再配合原來的一點,就全屏顯示了,舒服了,點回來。這一章就講完了,就把頁面布局都弄好了,包括動態(tài)生成菜單頁,瀏覽歷史頁,面包穴導(dǎo)航,把整個布局就全做好了。
下一張開始做具體業(yè)務(wù)了,首先叫做用戶的登錄,注冊新用戶,還有一個重置密碼。這節(jié)課就講到這里,拜拜。
端開發(fā)過程中,尺寸單位是我們必須用到的,下面我們對css中常見的幾種尺寸單位px,em,rem,rpx進(jìn)行逐一介紹
在這之前,需要先對幾個概念進(jìn)行普及介紹
基本概念
(以下概念讀起來可能有些晦澀,如果看不懂也沒關(guān)系)
像素
它不是自然界的物理長度,指基本原色素及其灰度的基本編碼。
css中的像素只是一個抽象的單位,在不同的設(shè)備或不同的環(huán)境中,css中的1px所代表的設(shè)備物理像素是不同的。
在為桌面瀏覽器設(shè)計的網(wǎng)頁中,我們無需對這個津津計較,但在移動設(shè)備上,必須弄明白這點。
在早先的移動設(shè)備中,屏幕像素密度都比較低,如iphone3,它的分辨率為320x480,在iphone3上,一個css像素確實是等于一個屏幕物理像素的。
后來隨著技術(shù)的發(fā)展,移動設(shè)備的屏幕像素密度越來越高,從iphone4開始,蘋果公司便推出了所謂的Retina屏,分辨率提高了一倍,變成640x960,但屏幕尺寸卻沒變化,這就意味著同樣大小的屏幕上,像素卻多了一倍,這時,一個css像素是等于兩個物理像素的。其他品牌的移動設(shè)備也是這個道理。
物理像素
它是顯示器(電腦、手機屏幕)最小的物理顯示單位,物理像素指的是顯示器上最小的點。物理像素的大小取決于屏幕。是一個無法改變的屬性。
設(shè)備獨立像素
我上一張圖,你就會理解什么是設(shè)備獨立像素
就是我們開發(fā)過程中使用的css中的px
設(shè)備像素比(device pixel radio)
設(shè)備像素比 = 物理像素 / 設(shè)備獨立像素,單位是dpr!(device pixel radio)
Retina屏幕
所謂“Retina”是一種顯示標(biāo)準(zhǔn),是把更多的像素點壓縮至一塊屏幕里,從而達(dá)到更高的分辨率并提高屏幕顯示的細(xì)膩程度。也被稱為視網(wǎng)膜顯示屏 ——百度百科
因為Retina屏幕的出現(xiàn),在pc端默認(rèn)情況下,css中的1px等于1物理像素,但在移動端1px不一定等于1物理像素,比如說iPhone的設(shè)備獨立像素是375 667,因為它使用了Retina屏幕,他的dpr是2,所以iPhone 6 的物理像素為 750 1334
在不同的屏幕上(普通屏幕 vs retina屏幕),css中1px所呈現(xiàn)的大小(物理尺寸)是一致的,不同的是1px所對應(yīng)的物理像素個數(shù)是不一致的。
在普通屏幕下,1px 對應(yīng) 1個物理像素(1:1)。 在Retina屏幕下(dpr=2),1px對應(yīng) 2x2個物理像素(1:4)。
你會發(fā)現(xiàn),在移動端開發(fā)中使用了圖片(img標(biāo)簽),2倍圖要比1倍圖清晰,就是這個緣故
px
默認(rèn)情況下像素px是相對于屏幕分辨率而言,比如說我們的屏幕分辨率是1440 X 900,說的就是像素1440px X 900px;
這里會遇到另一種情況
### 瀏覽器縮放
縮放是縮放CSS像素(縮放比例為1時,一個CSS像素等于一個屏幕像素),就是在屏幕分辨率不變的情況下,用戶對瀏覽進(jìn)行了縮放
強調(diào)一點,用戶的縮放行為是對瀏覽器進(jìn)行的,縮放的是css像素,而非分辨率,分辨率是屏幕的分辨率,不論你怎么縮放當(dāng)前頁面,屏幕分辨率都不會改變
我們知道在移動端可以在一定程度上控制用戶的縮放行為,也可以禁止用戶縮放
<meta name="viewport" content="width=device-width,initial-scale=1.0">
content屬性值 :
但是在pc端就麻煩了
windows:
mac:
由于瀏覽器菜單欄屬于系統(tǒng)軟件權(quán)限,沒發(fā)控制,我們可以通過js控制ctrl/cammond + +/- 或 Windows下ctrl + 滾輪 縮放頁面的情況
em
本人在實際開發(fā)過程中并沒有使用過em單位,但是后面要說的rem是基于em的,所以,對em進(jìn)行簡單介紹
em 是相對長度單位。相對于當(dāng)前對象內(nèi)文本的字體尺寸。如當(dāng)前對行內(nèi)文本的字體尺寸未被人為設(shè)置,則相對于瀏覽器的默認(rèn)字體尺寸。
看個栗子吧
<body> <style> html { font-size: 50px; } .my-div { width: 100%; height: 500px; margin-top: 50px; background-color: gray; font-size: 40px; } .my-div .parent-font { font-size: 30px; } .my-div .parent-font .child-font { font-size: 0.5em; } </style> <div class="my-div"> <p class="parent-font"> 我是父級文字 <span class="child-font">我是子級文字</span> </p> </div> </body>
html代碼中,
第一級,html的 font-size: 50px;
第二級,my-div 的 font-size: 40px;
第三級,parent-font 的 font-size:30px;
第四級,child-font 的 font-size: 0.5em;
我們通過瀏覽器查看,發(fā)現(xiàn)第四級的fong-size為15px;
我們?nèi)∠谌塸arent-font 的字體大小
我們通過瀏覽器查看,發(fā)現(xiàn)第四級的fong-size為20px;
當(dāng)我們?nèi)∠谌塮ont-size后,第三級的字體大小為40px;
所以我們說em的字體大小不是固定的,em的大小取決于父級的字體大小
當(dāng)父級的字體大小為20px,子級的1em就是20px
當(dāng)父級的字體大小為30px,子級的1em就是30px
那么說font-size存在著繼承父級的特點
我們在第一級html中設(shè)置font-size,第二級繼承第一級,第三級繼承第二級,第四級繼承第三級,以此類推
每一級都繼承自它的父級,也就是說每一級的em所代表的px大小都不是固定的,因為他們的父級不是同一個,所以em的應(yīng)用場景并不多。
那么如果是em的都繼承自同一個地方,是不是可以解決很多問題呢?
這時候rem出現(xiàn)了
rem
rem 是CSS3的一個相對單位(root em,根em)
使用rem為元素設(shè)定字體大小時,仍然是相對大小,但相對的只是HTML根元素
只要html的font-size大小不變,1rem所代表的font-size大小就不會變,rem只取決于html的font-size
rem解決了哪些問題
移動設(shè)備的寬度是各種各樣的,每個設(shè)備的dpr也不同,換句話說就是不同設(shè)備每一行的物理像素數(shù)不同,能顯示的css的px數(shù)也不同,
如果我們寫一個div,寬度是375px,375px在這個屏幕(iPhone6)上是剛剛滿屏,因為這個屏幕寬度剛剛是375px( 設(shè)備獨立像素),
當(dāng)我們換另一個寬度是414px的設(shè)備(iPhone6Plus)時,這個寬度375px的div就無法鋪滿這個屏幕,同樣的當(dāng)換一個iPhone5(320px),又會出現(xiàn)滾動條,安卓機的寬度更是五花八門,使用media媒體查詢不靠譜,因為它不能覆蓋所有的機型寬度
我們之前說rem的大小是相對于html的font-size的,如果html的font-size根據(jù)不同設(shè)備的寬度做動態(tài)計算,問題就會得到解決
我們寫頁面都是根據(jù)UI設(shè)計稿來做的,我們假設(shè)UI設(shè)計稿的寬度是750px(750px是常規(guī)寬度,當(dāng)然也可以是640px或是其他寬度,但是整個項目,寬度必須統(tǒng)一),唯一不變就是就屏幕寬度,我們的html的font-size(rem)只取決于設(shè)備寬度
于是
document.documentElement.style.fontSize = 100 * ( document.documentElement.clientWidth / 750) + 'px'
html的font-size:document.documentElement.style.fontSize
設(shè)備的寬度:document.documentElement.clientWidth
750:UI設(shè)計稿的寬度
為了方便計算我們將font-size x 100,方便計算(乘100不是必須的,我接觸過一些項目就不是乘以100,但是UI設(shè)計稿中使用了sketch做了動態(tài)計算,但我還是建議乘100,不然遇到psd的設(shè)計圖就很麻煩了)
對上面的js做些完善
const fontFun = function () { let docEl = document.documentElement let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize' const recalc = function () { let clientWidth = docEl.clientWidth if (!clientWidth) return docEl.style.fontSize = 100 * (clientWidth / 750) + 'px' } if (!document.addEventListener) return window.addEventListener(resizeEvt, recalc, false) window.addEventListener('pageshow', recalc, false) document.addEventListener('DOMContentLoaded', recalc, false) } export { fontFun }
對以上代碼不做過多解釋
也可以這樣寫
(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function() { var clientWidth = docEl.clientWidth if (!clientWidth) return docEl.style.fontSize = 100 * (clientWidth / 750) + 'px' } if (!doc.addEventListener) return win.addEventListener(resizeEvt, recalc, false) win.addEventListener('pageshow', recalc, false) doc.addEventListener('DOMContentLoaded', recalc, false) })(document, window)
iPhone5(320px)下html的font-size:42.6667px,1rem=42.6667px
iPhone6(375px)下html的font-size:50px,1rem=50px
iPhone6Plus(414px)下html的font-size:55.2px,1rem=55.2px
rem是繼承自html的font-size,但是小程序中沒有html,那怎么辦呢?
rpx
我不基于html的font-size了,我基于一個別的值就行了,你也不需要計算這個值,我給你計算了,這就是rpx。
最終的效果就是,你開發(fā)時在iphon6的設(shè)計稿上量了多少px,就寫多少rpx就行了,完美適配,perfect!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。