[翻譯]Supporting Different Screens in Web Apps

原文: https://developer.android.com/guide/webapps/targeting.html

由于 Android 可用于多種屏幕尺寸與像素密度,在 web 設(shè)計(jì)時(shí)你應(yīng)當(dāng)考慮這些因素以便頁面總是以適當(dāng)?shù)某叽顼@示检眯。

當(dāng)你的 web 頁面目標(biāo)為 Android 設(shè)備時(shí),有兩個(gè)需要考慮的主要因素:

  • 視口(viewport)
    視口是一個(gè)為 web 頁面提供繪圖區(qū)域的矩形。你可以指定數(shù)個(gè)視口屬性,比如尺寸和初始縮放系數(shù)(initial scale)缸沃。最重要是視口寬度衬横,它定義了網(wǎng)頁水平方向的可用像素總數(shù)(可用的CSS像素?cái)?shù))。

  • 屏幕密度(screen density)
    WebView 和大多數(shù) Android 上的網(wǎng)頁瀏覽器會(huì)將你的CSS像素值轉(zhuǎn)換為密度無關(guān)像素值邑贴,因此你的網(wǎng)頁與中密度屏幕(約160dpi)顯示為相同感知的尺寸。
    但是叔磷,如果圖像是你的網(wǎng)頁設(shè)計(jì)的重要元素拢驾,你應(yīng)該重視它們?cè)诓煌芏绕聊簧习l(fā)生的縮放,因?yàn)?300px 寬的圖像在 320dpi 屏幕上會(huì)被放大(每CSS像素使用更多的物理像素)并失真(模糊和像素化)改基。

設(shè)置視口屬性

視口(viewport)是你的網(wǎng)頁繪圖的區(qū)域繁疤。
雖然視口的可見區(qū)域在縮放時(shí)總是適應(yīng)屏幕尺寸,但視口有自己的像素尺寸供網(wǎng)頁使用秕狰。
例如稠腊,即使一個(gè)設(shè)備物理寬度是 480px,它的視口寬度也能用 800px封恰。
這使得為 800px 寬設(shè)計(jì)的網(wǎng)頁在視口縮放系數(shù)為1的屏幕上完全可見麻养。
大多數(shù) Android 上的網(wǎng)頁瀏覽器(包括 Chrome)設(shè)置默認(rèn)視口為一個(gè)大尺寸(被稱為"wide viewport mode",寬約 980px)诺舔。
也有許多瀏覽器默認(rèn)會(huì)盡可能縮放以顯示完整的視口寬度(被稱為"overview mode")鳖昌。

注意:當(dāng)你的頁面在 WebView 中呈現(xiàn),它默認(rèn)會(huì)使用完全縮放(full zoom)而不是“wide viewport mode”低飒,你可以使用setUseWideViewPort()啟用“wide viewport mode”许昨。

你可以通過在網(wǎng)頁文檔的<head>中使用<meta name="viewport" ...>標(biāo)簽來為網(wǎng)頁定義視口屬性,比如 寬度(width)與初始縮放級(jí)別(initial zoom level)褥赊。

以下語法展示視口支持的各種屬性與其值接受的類型:

<meta name="viewport"
      content="
          height = [pixel_value | "device-height"] ,
          width = [pixel_value | "device-width"] ,
          initial-scale = float_value ,
          minimum-scale = float_value ,
          maximum-scale = float_value ,
          user-scalable = ["yes" | "no"]
          " />

例如糕档,下面的<meta>標(biāo)簽指定視口寬度精確匹配設(shè)備屏幕寬度同時(shí)禁用了縮放:

<head>
    <title>Example</title>
    <meta name="viewport" content="width=device-width, user-scalable=no" />
</head>

當(dāng)你為移動(dòng)設(shè)備優(yōu)化網(wǎng)站時(shí),你應(yīng)該設(shè)置寬度為"device-width"以便在所有設(shè)備上剛好合適拌喉,然后使用CSS媒體查詢(media queries)來靈活地適配不同屏幕尺寸的布局速那。

注意:僅當(dāng)你確定你的網(wǎng)頁布局是足夠靈活同時(shí)內(nèi)容能適應(yīng)小屏幕的寬度時(shí)你才可以禁用用戶縮放。

使用CSS適配設(shè)備密度

Android 瀏覽器與 WebView 支持的CSS媒體查詢特性-webkit-device-pixel-ratio讓你能為指定的屏幕密度創(chuàng)建樣式尿背。你可以為這個(gè)特性取值 "0.75", "1", "1.5"端仰,分別指定樣式用于低(low)、中(medum)田藐、高(high)密度屏幕的設(shè)備荔烧。

例如吱七,你可以為各個(gè)密度分別創(chuàng)建樣式表:

<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.5)" href="hdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.0)" href="mdpi.css" />

或,在一個(gè)樣式表中指定不同的樣式:

#header {
    background:url(medium-density-image.png);
}

@media screen and (-webkit-device-pixel-ratio: 1.5) {
    /* CSS for high-density screens */
    #header {
        background:url(high-density-image.png);
    }
}

@media screen and (-webkit-device-pixel-ratio: 0.75) {
    /* CSS for low-density screens */
    #header {
        background:url(low-density-image.png);
    }
}

關(guān)于處理不同屏幕密度(特別是圖片)的更多信息鹤竭,參考 DPI Images for Variable Pixel Densities

使用JavaScript適配設(shè)備密度

Android 瀏覽器與 WebView 支持的DOM屬性window.devicePixelRatio使你能查詢當(dāng)前設(shè)備的密度踊餐。
這個(gè)屬性的值表示當(dāng)前設(shè)備的縮放系數(shù)。

舉個(gè)例子臀稚,
如果其值是"1.0"吝岭,那么設(shè)備將被識(shí)別為中密度(medium density)且默認(rèn)沒有縮放;
如果其值是"1.5"烁涌,那么設(shè)備將被識(shí)別為高密度(high density)且頁面默認(rèn)放大為1.5倍苍碟;
如果其值是"0.75",那么設(shè)備將被識(shí)別為低密度(low density)且頁面默認(rèn)縮小為0.75倍撮执;

當(dāng)然,Android 瀏覽器與 WebView 的縮放是基于網(wǎng)頁的目標(biāo)密度舷丹。默認(rèn)目標(biāo)是中密度(medium density)抒钱,但是你可以修改目標(biāo)以調(diào)整網(wǎng)頁在不同屏幕密度的縮放。

舉個(gè)例子颜凯,這里為你展示如何用JavaScript查詢?cè)O(shè)備密度:

if (window.devicePixelRatio == 1.5) {
  alert("This is a high-density screen");
} else if (window.devicePixelRatio == 0.75) {
  alert("This is a low-density screen");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谋币,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子症概,更是在濱河造成了極大的恐慌蕾额,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彼城,死亡現(xiàn)場(chǎng)離奇詭異诅蝶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)募壕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門调炬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舱馅,你說我怎么就攤上這事缰泡。” “怎么了代嗤?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵棘钞,是天一觀的道長。 經(jīng)常有香客問我干毅,道長宜猜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任溶锭,我火速辦了婚禮宝恶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己垫毙,他們只是感情好霹疫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著综芥,像睡著了一般丽蝎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膀藐,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天屠阻,我揣著相機(jī)與錄音,去河邊找鬼额各。 笑死国觉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虾啦。 我是一名探鬼主播麻诀,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼傲醉!你這毒婦竟也來了蝇闭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤硬毕,失蹤者是張志新(化名)和其女友劉穎呻引,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吐咳,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逻悠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挪丢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂风。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖乾蓬,靈堂內(nèi)的尸體忽然破棺而出惠啄,到底是詐尸還是另有隱情,我是刑警寧澤任内,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布撵渡,位于F島的核電站,受9級(jí)特大地震影響死嗦,放射性物質(zhì)發(fā)生泄漏趋距。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一越除、第九天 我趴在偏房一處隱蔽的房頂上張望节腐。 院中可真熱鬧外盯,春花似錦、人聲如沸翼雀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狼渊。三九已至箱熬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狈邑,已是汗流浹背城须。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留米苹,地道東北人糕伐。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蘸嘶,于是被迫代替她去往敵國和親赤炒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 一亏较、meta標(biāo)簽的效果 移動(dòng)端頁面一般會(huì)在head頭部添加如下meta標(biāo)簽。 該meta標(biāo)簽是否添加對(duì)頁面渲染的影...
    nimw閱讀 3,530評(píng)論 0 5
  • 1.移動(dòng)端迷之視口 為什么我稱他為“迷之視口”掩缓,因?yàn)槠鋵?shí)我聽過很多人的分享雪情,來講解移動(dòng)端視口的問題,但我好像都...
    buershero閱讀 1,214評(píng)論 0 2
  • 我們第一次接觸移動(dòng)web的時(shí)候,直觀印象樣應(yīng)該是:屏幕比pc小很多舍哄,所以對(duì)pc端設(shè)計(jì)的界面宴凉,不一定(或者說不完全)...
    Scaukk閱讀 16,832評(píng)論 6 46
  • 最近也有在寫一些評(píng)論條 ,寫評(píng)論輸入框,以及分享控件的封裝.近期會(huì)慢慢總結(jié)一下 不過還需要多學(xué)習(xí)同事們的代碼風(fēng)格,...
    xiaobeibei閱讀 317評(píng)論 0 0
  • 我簡(jiǎn)直不能相信,你不回來的消息是從別人口中聽說的表悬。我已經(jīng)愛了你那么久弥锄,也等了你那么久,你的承諾是那樣的真實(shí)蟆沫。你的愛...
    胭脂飛飛閱讀 1,590評(píng)論 1 3