響應(yīng)式設(shè)計

響應(yīng)式設(shè)計是Ethan Marcotte在2010年5月提出的概念幌蚊,這里的相應(yīng)值得是網(wǎng)頁能夠在不同尺寸和類型的設(shè)備上作出不同的表現(xiàn)阔籽。

一個經(jīng)過精心設(shè)計的響應(yīng)式頁面甫贯,可以在多種設(shè)備上提供舒適美觀涛漂、易于交互的界面和良好的用戶體驗,達到“Once write run everywhere”的效果氢橙。這個概念是為了服務(wù)移動互聯(lián)網(wǎng)而誕生的酝枢。

最初,響應(yīng)式設(shè)計的概念是用于CSS3中的充蓝,通過媒體查詢(Media Query)判斷設(shè)備類型隧枫,進而對不同的設(shè)備設(shè)置相應(yīng)的樣式表喉磁。

而在實際開發(fā)中谓苟,很多開發(fā)者也會使用JS對設(shè)備類型進行補充判斷,
比如使用JS可以精準判斷設(shè)備是安卓還是蘋果iOS系統(tǒng)协怒,這是CSS3媒體查詢無法做到的涝焙。
又因為可以通過JS獲取文檔元素并對其設(shè)置樣式,所以使用JS來控制設(shè)備的視圖表現(xiàn)也屬于響應(yīng)式設(shè)計孕暇。

媒體查詢

媒體查詢中最核心的內(nèi)容就是media仑撞。
media是一個關(guān)鍵字,我們通過它來判斷不同的設(shè)備類型妖滔,并在其代碼塊中預(yù)定義DOM元素的樣式隧哮。
當設(shè)備屬性符合一個media判定時,元素將采用其代碼塊中的樣式座舍。

語法
@media media_type and|not|only (exp) {
  /* CSS代碼*/
}

其中沮翔,

  • media_type代表媒體類型,可選值如下
類型 解釋
all 所有設(shè)備
braille 盲文
embossed 盲文打印
handheld 手持設(shè)備
print 文檔打印或打印預(yù)覽模式
projection 項目演示曲秉,如幻燈片
screen 彩色設(shè)備屏幕
speech 演講
tty 固定字間距的網(wǎng)絡(luò)媒體采蚀,如電傳打字機
tv 電視
  • exp為條件表達式疲牵,可用值如下
媒體特性 可采用的值 可用類型 可否min/max 簡介
width <length> 視覺屏幕/觸摸設(shè)備 yes 定義輸出設(shè)備中頁面可見區(qū)域?qū)挾?/td>
height <length> 視覺屏幕/觸摸設(shè)備 yes 定義輸出設(shè)備中頁面可見區(qū)域高度
device-width <length> 視覺屏幕/觸摸設(shè)備 yes 定義輸出設(shè)備中頁面可見屏幕寬度
device-height <length> 視覺屏幕/觸摸設(shè)備 yes 定義輸出設(shè)備中頁面可見屏幕高度
orientation portrait landscape 位圖介質(zhì) no portait代表橫屏,landscape代表豎屏
aspect-ratio <ratio> 位圖介質(zhì) yes 定義瀏覽器長寬比
device-aspect-ratio <ratio> 位圖介質(zhì) yes 定義屏幕的長寬比
color <integer> 視覺媒體 yes 定義輸出設(shè)備彩色原件數(shù)目榆鼠,如非彩色設(shè)備纲爸,值為0
color-index <integer> 視覺媒體 yes 定義輸出設(shè)備的彩色查詢表中的條目數(shù),如沒有使用彩色查詢表妆够,則值為0
monochrome <integer> 視覺媒體 yes 定義在一個單色框架緩沖區(qū)中每像素包含的彩色原件個數(shù)识啦。如果不是單色設(shè)備,值為0
resolution <resolution> 位圖介質(zhì) yes 定義設(shè)備的分表率神妹,如96dpi
scan progressive/interlace 電視類型 no 定義電視類設(shè)備的掃描方式袁滥,progressive表示逐行掃描,interlace表示隔行掃描
grid <integer> 柵格設(shè)備 no 查詢輸出設(shè)備是否使用柵格或者點陣灾螃,1代表是题翻,0代表否
  • and、not腰鬼、only為連接符號嵌赠,含義如下
關(guān)鍵字 說明
only 限定某種設(shè)備
and 邏輯與,連接設(shè)備名或表達式
not 排除某種設(shè)備
, 表示設(shè)備列表

之后我們可以在引入樣式表文件時或在樣式表中直接使用媒體查詢熄赡,示例代碼如下:

<!-- 1. 引入位置 -->
<link rel="stylesheet" type="text/css" media="only screen and (max-width: 415px), only screen and (max-device-width: 415px)" href="index.css"/>

<!-- 2. 樣式表中 -->
<style>
  @media screen and (min-width: 415px) and (max-width: 1368px) {
    .header  {
      height: 80px;
    }
  }
</style>

常見的手機屏寬不會超過415px姜挺,屏幕超過1368px的設(shè)備一般是大屏計算機,多為臺式機

JS布局

使用JS進行響應(yīng)式設(shè)計可以看作一記偏招彼硫,除了JS對設(shè)備類型的判斷更為精準之外炊豪,由于CSS缺乏成熟的計算體系(只憑calc是完全不夠的),在布局需要復(fù)雜計算時拧篮,JS也是必不可少的词渤。
下面看一個使用JS判斷設(shè)備類型(判斷設(shè)備使用iOS還是Android系統(tǒng))的示例:

compoted: {
   isAndroid () {
    // navigator為瀏覽器內(nèi)置對象
    // 此處通過navigator.userAgent獲取用戶的設(shè)備信息
    let u = navigator.userAgent
    return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1
  },
  isIOS () {
    let u = navigator.userAgent
    // !!為兩次!的判定,當內(nèi)容不為(null串绩、undefined缺虐、空串等)時,判定為真
    return !!u.match(/\(i[^;]+;(U;) ? CPU.+Mac OS X/)
  }
}

這段代碼通過用戶的設(shè)備信息中是否含有特定關(guān)鍵字來判斷設(shè)備類型礁凡,這是一種極為常見的做法高氮,不過媒體查詢卻無法做到這一點。
之后我們可以根據(jù)這兩個計算屬性使用動態(tài)類名顷牌、動態(tài)樣式或直接使用JS等方式為DOM元素設(shè)置樣式剪芍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窟蓝,隨后出現(xiàn)的幾起案子罪裹,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坊谁,死亡現(xiàn)場離奇詭異费彼,居然都是意外死亡,警方通過查閱死者的電腦和手機口芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門箍铲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鬓椭,你說我怎么就攤上這事颠猴。” “怎么了小染?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵翘瓮,是天一觀的道長。 經(jīng)常有香客問我裤翩,道長资盅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任踊赠,我火速辦了婚禮呵扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筐带。我一直安慰自己今穿,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布伦籍。 她就那樣靜靜地躺著蓝晒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帖鸦。 梳的紋絲不亂的頭發(fā)上芝薇,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音富蓄,去河邊找鬼剩燥。 笑死,一個胖子當著我的面吹牛立倍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侣滩,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼口注,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了君珠?” 一聲冷哼從身側(cè)響起寝志,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后材部,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫缆,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年乐导,在試婚紗的時候發(fā)現(xiàn)自己被綠了苦丁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡物臂,死狀恐怖旺拉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棵磷,我是刑警寧澤蛾狗,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站仪媒,受9級特大地震影響沉桌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜算吩,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一蒲牧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赌莺,春花似錦冰抢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巢音,卻和暖如春遵倦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背官撼。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工梧躺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傲绣。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓掠哥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秃诵。 傳聞我的和親對象是個殘疾皇子续搀,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容