摘要:本文主要介紹一些響應(yīng)式布局容易忽略但又很重要的知識點。單位不僅僅可以用來設(shè)置字號,還可以設(shè)置任何盒模型的屬性,比如有一點優(yōu)勢就是可以和媒體查詢配合,實現(xiàn)響應(yīng)式布局運用場景如果我們做的頁面只在移動端訪問,這是因為不兼容低版本的瀏覽器。
一、前言
響應(yīng)式Web設(shè)計可以讓一個網(wǎng)站同時適配多種設(shè)備和多個屏幕,可以讓網(wǎng)站的布局和功能隨用戶的使用環(huán)境(屏幕大小、輸入方式、設(shè)備/瀏覽器能力)而變化。本文主要介紹一些響應(yīng)式布局容易忽略但又很重要的知識點。
二、視口移動前端中常說的 viewport (視口)就是瀏覽器中用于呈現(xiàn)網(wǎng)頁的區(qū)域。視口通常并不等于屏幕大小,特別是可以縮放瀏覽器窗口的情況下。手機端與PC端視口存在差異,電腦端的視口寬度等于分辨率,而移動端的視口寬度跟分辨率沒有關(guān)系,寬度默認(rèn)值是設(shè)備廠家指定的。iOS, Android基本都將這個視口分辨率設(shè)置為 980px。
1.為什么手機端視口要設(shè)為980px?當(dāng)年喬布斯設(shè)想:蘋果手機如果在市場上火爆了,但是各個網(wǎng)站還沒有來得及制作手機端網(wǎng)頁,那么用戶不得不用手機訪問電腦版的網(wǎng)頁,如何用小屏幕訪問大屏幕的頁面也同樣可讀呢?喬幫主就想著為手機固定一個視口寬度,讓手機的視口寬度等于世界上絕大多數(shù)PC網(wǎng)頁的版心寬度,就是980px。這樣,用手機訪問電腦版網(wǎng)頁的時候,旁邊剛好沒有留白。不過頁面縮放后文字會變得非常小,用戶需要手動放大縮小才能看清楚,體驗非常差。
為了解決前面的問題,可以在網(wǎng)頁的
中添加下面這行代碼:width=device-width???視口為設(shè)備寬度(就是人設(shè)置的一個寬度)//不設(shè)置的話默認(rèn)為980px initial-scale=1.0? ? 初始化的視口大小是1.0倍 maximum-scale=1.0? ? 最大的倍數(shù)是1.0倍 user-scalable=0??????不允許縮放視口
這個視口的標(biāo)簽告訴瀏覽器怎么渲染網(wǎng)頁。在這里,標(biāo)簽想表達(dá)的意思是:按照設(shè)備的寬度(device-width)來渲染網(wǎng)頁內(nèi)容。事實上,在支持這個標(biāo)簽的設(shè)備上給你看一看效果,你就明白了。
不錯呀!用戶體驗大大改善!!!
此時如果用document.documentElement.clientWidth來測試瀏覽器屏幕寬度,你會發(fā)現(xiàn)當(dāng)前視口寬度等于手機屏幕的寬度,約數(shù)后的視口寬度都是在320~480之間(手機豎直使用的時候)。
這個視口的尺寸,是手機廠商設(shè)置的,能夠保證我們的文字比如16px,在自己的這個視口下清晰、大小剛剛合適。所以大屏幕的手機的約束視口 > 小屏幕手機的約束視口。這就能夠保證我們的網(wǎng)頁可以用px寫字號、寫行高。
需要注意的是:約束之后的視口寬度,不是自己的分辨率!!每個手機的分辨率,都要比自己的視口寬度大得多得多!
最最重要的一句話:前端開發(fā)工程師,絲毫不關(guān)心手機的分辨率,我們只關(guān)心視口。
人們常說說“一圖勝千言”,確實如此。我們網(wǎng)頁中關(guān)于松餅的文字介紹再多,也沒有圖片有吸引力。下面我們就在頁面上方添加一張松餅的圖片(2000像素寬),效果類似引誘用戶往下看的大題圖。
哇,真是好大一張圖,它讓整個網(wǎng)頁看起來都失衡了,水平方向上圖片溢出了。不行,必須解決這個問題。可以用CSS給圖片指定固定寬度,但問題是我們想讓它能在不同大小的屏幕中自動縮放。比如,我們例子中的iPhone屏幕寬度為320像素,如果我們把圖片設(shè)置成320像素寬,那么iPhone屏幕旋轉(zhuǎn)后又怎么辦呢?這時候320像素變成了480像素。
解決方案很簡單,只要一行CSS代碼就可以讓圖片隨容器寬度自動縮放:
img { max-width: 100%; }
回到手機上,刷新頁面,結(jié)果比較符合預(yù)期了。
這里聲明max-width規(guī)則,就是要保證所有圖片最大顯示為其自身的100%(即最大只可以顯示為自身那么大)。此時,如果包含圖片的元素(比如包含圖片的body或div)比圖片固有寬度小,圖片會縮放占滿最大可用空間。
要實現(xiàn)圖片的自動縮放,也可以使用更通用的 width 屬性,比如width:100%。然而,這條規(guī)則在這里并不適用。因為這條規(guī)則會導(dǎo)致它顯示得跟它的容器一樣寬。在容器比圖片寬得多的情況下,圖片會被無謂地拉伸。
四、手機瀏覽器內(nèi)核在移動端,僅有四個獨立的瀏覽器內(nèi)核,分別為微軟的Trident、火狐的Gecko、開源內(nèi)核Webkit、Opera的Presto。
目前微軟的Trident在移動終端上主要為WP7、8系統(tǒng)內(nèi)置瀏覽器。Opera的Presto內(nèi)核主要為 Opera Mobile、OperaMini、歐朋瀏覽器以及歐朋HD Beta版。Webkit內(nèi)核的適用范圍則較為廣泛,Android原生瀏覽器、蘋果的Safari、谷歌Chrome(Android4.0使用)都是基于Webkit開源內(nèi)核開發(fā)的。
兼容的前綴: 1 -ms- 2 -moz- 3 -o- 4 -webkit-
中國用戶的瀏覽器市場份額:
UC、Android內(nèi)置、Chrome、Safari、QQ Browser都是webkit內(nèi)核,從圖上看占了絕大部分的市場份額。
所以一定要伺候好-webkit-。 有的公司干脆只兼容-webkit-,別的兼容比如-ms-都不寫。
百分比布局也叫作流式布局、彈性盒布局。手機網(wǎng)頁沒有版心,都左右撐滿。
百分比能夠設(shè)置的屬性是width、height、padding、margin。其他屬性比如border、font-size不能用百分比設(shè)置的。
如果用百分比寫width,那么指的是父元素width的百分之多少。
如果用百分比寫height,那么指的是父元素height的百分之多少。
如果用百分比寫padding,那么指的是父元素width的百分之多少,無論是水平的padding還是豎直的padding。
如果用百分比寫margin,那么指的是父元素width的百分之多少,無論是水平的margin還是豎直的margin。
不能用百分比寫border的寬度
接下來我們看一個例子:
div{ width:200px; height:300px; padding:10px; } div p{ width:50%; height:50%; padding:10%; } 此時p的真實寬度是多少?
此時p的真實寬度是140px*190px
六、媒體查詢 1.為什么響應(yīng)式 Web 設(shè)計需要媒體查詢CSS3媒體查詢可以讓我們針對特定的設(shè)備能力或條件為網(wǎng)頁應(yīng)用特定的CSS樣式。如果沒有媒體查詢,光用CSS是無法大大修改網(wǎng)頁外觀的。這個模塊讓我們可以提前編寫出適應(yīng)很多不可預(yù)測因素的CSS規(guī)則,比如屏幕方向水平或垂直、視口或大或小等等。彈性布局雖然可以讓設(shè)計適應(yīng)較多場景,也包括某些尺寸的屏幕,但有時候確實不夠用,因為我們還需要對布局進(jìn)行更細(xì)致的調(diào)整。媒體查詢讓這一切成為可能,它就相當(dāng)于CSS中基本的條件邏輯。
2.媒體查詢語法我們在媒體查詢外面寫的第一條規(guī)則,是“基本的”樣式,它適用于任何設(shè)備。在此基礎(chǔ)上,我們再為不同視口、不同能力的設(shè)備,漸進(jìn)增加不同的視覺效果和功能。
body { background-color: grey; } @media screen and (min-width:1200px){ body{ background-color: pink; } } @media screen and (min-width:700px) and (max-width:1200px){ body{ background-color: blue; } } @media screen and (max-width:700px){ body{ background-color: orange; } }
其中@media就表示媒體查詢,查詢現(xiàn)在看這個網(wǎng)頁的設(shè)備是什么,以及它的寬度是多少。screen表示看這個網(wǎng)頁的設(shè)備是顯示器,而不是殘疾人聽力設(shè)備、也不是打印機。后面用and符號羅列所有的可能性。
值得注意:媒體查詢只能包裹選擇器,不能包裹k:v對兒。
IE6、7、8不支持媒體查詢,也為了防止手機端的某些瀏覽器不支持媒體查詢,所以不要把所有的選擇器都放在媒體查詢里面。
rem響應(yīng)式布局思想
一般不要給元素設(shè)置具體的寬度,但是對于一些小圖標(biāo)可以設(shè)定具體寬度值
高度值可以設(shè)置固定值,設(shè)計稿有多大,我們就嚴(yán)格寫多大
所有設(shè)置的固定值都用REM做單位(首先在HTML中設(shè)置一個基準(zhǔn)值:PX和REM的對應(yīng)比例,然后在效果圖上獲取PX值,布局的時候轉(zhuǎn)化為REM值)
JS獲取真實屏幕的寬度,讓其除以設(shè)計稿的寬度,算出比例,把之前的基準(zhǔn)值按照比例進(jìn)行重新的設(shè)定,這樣項目就可以在移動端自適應(yīng)了
什么是rem,它與em有何區(qū)別
rem:當(dāng)前頁面中元素的REM單位的樣式值都是針對于HTML元素的font-size的值進(jìn)行動態(tài)計算的
em:表示父元素的字號的倍數(shù)。(特例:在text-indent屬性中,表示文字寬度)
body →font-size:20px;→ font-size:2em; box1→ font-size:2em; box2→ font-size:2em; box3
em為單位的時候,font-size屬性是計算后繼承,box1計算出來是40px。那么里面的box2、box3繼承的都是40px。em單位不僅僅可以用來設(shè)置字號,還可以設(shè)置任何盒模型的屬性,比如width、height、padding、margin、border
rem有一點優(yōu)勢就是可以和媒體查詢配合,實現(xiàn)響應(yīng)式布局:
@media screen and (min-width: 320px) { html {font-size: 14px;} } @media screen and (min-width: 360px) { html {font-size: 16px;} } @media screen and (min-width: 400px) { html {font-size: 18px;} }
運用場景
如果我們做的H5頁面只在移動端訪問,這是因為REM不兼容低版本的瀏覽器。而如果移動端和PC端公用一套代碼,建議使用流式布局。
如何做個REM響應(yīng)式布局
1、從UI設(shè)計師拿到PSD設(shè)計稿,然后在樣式中給HTML設(shè)定一個font-size的值,我們一般都設(shè)置一個方便后面計算的值,例如:100px
html{ font-size:100px;//1rem=100px }
2、寫頁面,寫樣式
首先按照設(shè)計稿的尺寸來寫樣式,然后在寫樣式值的時候,需要把得到的像素值除以100計算出對應(yīng)的REM的值。
值得注意的是:真實項目中外層盒子的寬度我們一般還是不寫固定值,沿用流式布局法的思想,我們用百分比的方式布局
margin:0 0.2rem height:3rem;
3、根據(jù)當(dāng)前屏幕的寬度和設(shè)計稿的寬度來計算我們HTML的font-size的值
例如:設(shè)計稿寬度為640px,其中有一個部分是輪播圖,它的尺寸是600*300,在樣式中給HTML設(shè)定一個font-size的值為100px,則輪播圖大小應(yīng)該為 6rem×3rem,那如果手機屏幕寬度為375px,其font-size應(yīng)該設(shè)置為多少。
375/640*100->fontsize=58.59375//此時輪播圖能自適應(yīng)手機屏幕大小
根據(jù)當(dāng)前屏幕寬度和設(shè)計稿寬度的比例,動態(tài)計算一下當(dāng)前寬度下的fontsize值應(yīng)該是多少,如果fontsize的值改變了,之前設(shè)定的所有REM單位的值自動會跟著放大或者縮小。可以通過以下這段代碼實現(xiàn):
但如果當(dāng)前屏幕寬度大于設(shè)計稿寬度,圖片會被拉長而失真,所以以上代碼需要稍微做些修改:
//html部分八、參考//js部分
響應(yīng)式Web設(shè)計:HTML5和CSS3實戰(zhàn)/(英)本·弗萊恩(Ben Frain)著;奇舞團(tuán)譯
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98985.html
摘要:本文主要介紹一些響應(yīng)式布局容易忽略但又很重要的知識點。單位不僅僅可以用來設(shè)置字號,還可以設(shè)置任何盒模型的屬性,比如有一點優(yōu)勢就是可以和媒體查詢配合,實現(xiàn)響應(yīng)式布局運用場景如果我們做的頁面只在移動端訪問,這是因為不兼容低版本的瀏覽器。 一、前言 響應(yīng)式Web設(shè)計可以讓一個網(wǎng)站同時適配多種設(shè)備和多個屏幕,可以讓網(wǎng)站的布局和功能隨用戶的使用環(huán)境(屏幕大小、輸入方式、設(shè)備/瀏覽器能力)而變化。...
摘要:本文主要介紹一些響應(yīng)式布局容易忽略但又很重要的知識點。單位不僅僅可以用來設(shè)置字號,還可以設(shè)置任何盒模型的屬性,比如有一點優(yōu)勢就是可以和媒體查詢配合,實現(xiàn)響應(yīng)式布局運用場景如果我們做的頁面只在移動端訪問,這是因為不兼容低版本的瀏覽器。 一、前言 響應(yīng)式Web設(shè)計可以讓一個網(wǎng)站同時適配多種設(shè)備和多個屏幕,可以讓網(wǎng)站的布局和功能隨用戶的使用環(huán)境(屏幕大小、輸入方式、設(shè)備/瀏覽器能力)而變化。...
摘要:及相關(guān)問題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮ο髣?chuàng)建模式繼承嚴(yán)格模式與對象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡化對象寫法剪頭函數(shù)三點運算符模板字符串形參默認(rèn)值異步過程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實現(xiàn) js及es相關(guān)問題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮ο髣?chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
摘要:及相關(guān)問題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮ο髣?chuàng)建模式繼承嚴(yán)格模式與對象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡化對象寫法剪頭函數(shù)三點運算符模板字符串形參默認(rèn)值異步過程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實現(xiàn) js及es相關(guān)問題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮ο髣?chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
閱讀 1736·2021-11-22 12:09
閱讀 1463·2019-08-30 13:22
閱讀 2095·2019-08-29 17:00
閱讀 2646·2019-08-29 16:28
閱讀 2958·2019-08-26 13:51
閱讀 1185·2019-08-26 13:25
閱讀 3246·2019-08-26 12:14
閱讀 3015·2019-08-26 12:14