使用fixed的時(shí)候宋渔,在手機(jī)上看是否會(huì)有問題,怎么解決辜限?

大家好皇拣,我是IT修真院武漢分院第10期學(xué)員余佳貝,一枚正直善良的web程序員薄嫡。

今天給大家分享一下氧急,修真院官網(wǎng)css任務(wù)4,深度思考中的知識(shí)點(diǎn)——使用fixed的時(shí)候毫深,在手機(jī)上看是否會(huì)有問題吩坝,怎么解決?

1.背景介紹

移動(dòng)端業(yè)務(wù)開發(fā)哑蔫,iOS下經(jīng)常會(huì)有fixed元素和輸入框(input元素)同時(shí)存在的情況钉寝。但是fixed元素在有軟鍵盤喚起的情況下弧呐,會(huì)出現(xiàn)許多莫名其妙的問題。 下面我們就來一起分析在一個(gè)簡(jiǎn)單的有輸入框情況下的fixed布局方案嵌纲。

2.知識(shí)剖析

IOS下的fixed+input出現(xiàn)的bug現(xiàn)象

下面俘枫,我們舉一個(gè)簡(jiǎn)單的例子來說明這個(gè)現(xiàn)象(以下是我們常用的fixed布局)

<header></header><main></main><footer>? ? ? ? ?<input type="text">? ? ? ? ?<button type="submit" value="提交"></footer>

我們給上面的html加一個(gè)樣式,如下

header, footer, main {

display: block;

}

header {

position: fixed;

height: 50px;

left: 0;

right: 0;

top: 0;

}

footer {

position: fixed;

height: 34px;

left: 0;

right: 0;

bottom: 0;

}

main {

margin-top: 50px;

margin-bottom: 34px;

height: 2000px

}

我們?cè)谑謾C(jī)上打開疹瘦,拖動(dòng)頁(yè)面時(shí) header 和 footer 已經(jīng)定位在了對(duì)應(yīng)的位置崩哩,目測(cè)沒問題了。


但是我們一旦點(diǎn)擊輸入框言沐,底部軟鍵盤被喚起后邓嘹,就會(huì)出現(xiàn)這種現(xiàn)象



我們可以看到,fixed的footer和header跑到屏幕中間去了

fixed 定位好的元素跟隨頁(yè)面滾動(dòng)了起來… fixed 屬性失效了险胰!這是為什么呢汹押?

簡(jiǎn)單解釋下: > 軟鍵盤喚起后,頁(yè)面的 fixed 元素將失效(即無法浮動(dòng)起便,也可以理解為變成了 absolute 定位)棚贾,所以當(dāng)頁(yè)面超過一屏且滾動(dòng)時(shí),失效的 fixed 元素就會(huì)跟隨滾動(dòng)了榆综。

這便是 iOS 上 fixed 元素和輸入框的 bug 妙痹。其中不僅限于 type=text 的輸入框,凡是軟鍵盤(比如時(shí)間日期選擇鼻疮、select 選擇等等)被喚起怯伊,都會(huì)遇到同樣地問題。

4解決方案

既然在 iOS 下由于軟鍵盤喚出后判沟,頁(yè)面 fixed 元素會(huì)失效耿芹,導(dǎo)致跟隨頁(yè)面一起滾動(dòng),

那么假如——頁(yè)面不會(huì)過長(zhǎng)出現(xiàn)滾動(dòng)挪哄,那么即便 fixed 元素失效吧秕,也無法跟隨頁(yè)面滾動(dòng),也就不會(huì)出現(xiàn)上面的問題了迹炼。

那么按照這個(gè)思路砸彬,如果使 fixed 元素的父級(jí)不出現(xiàn)滾動(dòng),而將原 body 滾動(dòng)的區(qū)域域移到 main 內(nèi)部斯入,而 header 和 footer 的樣式不變拿霉,代碼如下:

header, footer, main {

display: block;

}

header {

position: fixed;

height: 50px;

left: 0;

right: 0;

top: 0;

}

footer {

position: fixed;

height: 34px;

left: 0;

right: 0;

bottom: 0;

}

main {

/* main絕對(duì)定位,進(jìn)行內(nèi)部滾動(dòng) */

position: absolute;

top: 50px;

bottom: 34px;

/* 使之可以滾動(dòng) */

overflow-y: scroll;

}

main .content {

height: 2000px;

}

可以看到咱扣,在原始輸入法下绽淘, fixed 元素可以定位在頁(yè)面的正確位置。滾動(dòng)頁(yè)面時(shí)闹伪,由于滾動(dòng)的是 main 內(nèi)部的 div沪铭,因此 footer 沒有跟隨頁(yè)面滾動(dòng)

上面貌似解決了問題壮池,但是如果在手機(jī)上實(shí)際測(cè)試一下,會(huì)發(fā)現(xiàn) main 元素內(nèi)的滾動(dòng)非常不流暢杀怠,滑動(dòng)的手指松開后椰憋,

滾動(dòng)立刻停止,失去了原本的流暢滾動(dòng)特性赔退。百度一下彈性滾動(dòng)的問題橙依,發(fā)現(xiàn)在 webkit 中,下面的屬性可以恢復(fù)彈性滾動(dòng)硕旗。

-webkit-overflow-scrolling: touch;


6 拓展思考

安卓下會(huì)出現(xiàn)這種情況嗎窗骑,存在的話怎么解決?

談到了 iOS 漆枚,也來簡(jiǎn)單說一下 Android 下的布局吧创译。



在 Android2.3+ 中,因?yàn)椴恢С?overflow-scrolling 墙基,因此部分瀏覽器內(nèi)滾動(dòng)會(huì)有不流暢的卡頓软族。但是目前發(fā)現(xiàn)在 body 上的滾動(dòng)還是很流暢的,因此使用第一種在 iOS 出現(xiàn)問題的 fixed 定位的布局就可以了残制。如果需要考慮 Android2.3 以下系統(tǒng)立砸,因?yàn)椴恢С?fixed 元素,所以依然要需要考慮使用 isScroll.js 來實(shí)現(xiàn)內(nèi)部滾動(dòng)初茶。

其實(shí)在 fixed 和輸入框的問題上颗祝,基本思路就是: > 由于 fixed 在軟鍵盤喚起后會(huì)失效,導(dǎo)致在頁(yè)面可以滾動(dòng)時(shí)纺蛆,會(huì)跟隨頁(yè)面一起滾動(dòng)吐葵。因此如果頁(yè)面無法滾動(dòng)规揪,那么 fixed 元素即使失效桥氏,也不會(huì)滾動(dòng),也就不會(huì)出現(xiàn) bug 了

7.參考文獻(xiàn)

參考一:http://blog.csdn.net/ly2983068126/article/details/49306427"target="_blank">移動(dòng)端Web頁(yè)面使用fixed總結(jié)

參考二:http://www.grycheng.com/?p=1534"target="_blank">移動(dòng)端position:fixed總結(jié)

8.更多討論

1 fixed在各種瀏覽器中會(huì)有不同的表現(xiàn)么猛铅?

2 position:absolute/relative在移動(dòng)端也會(huì)出現(xiàn)不同的現(xiàn)象么字支?

PPT


使用fixed的時(shí)候,在手機(jī)上看是否會(huì)有問題奸忽,怎么解決堕伪?_騰訊視頻
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栗菜,隨后出現(xiàn)的幾起案子欠雌,更是在濱河造成了極大的恐慌,老刑警劉巖疙筹,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件富俄,死亡現(xiàn)場(chǎng)離奇詭異禁炒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)霍比,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門幕袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悠瞬,你說我怎么就攤上這事们豌。” “怎么了浅妆?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵望迎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我狂打,道長(zhǎng)擂煞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任趴乡,我火速辦了婚禮对省,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晾捏。我一直安慰自己蒿涎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布惦辛。 她就那樣靜靜地躺著劳秋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胖齐。 梳的紋絲不亂的頭發(fā)上玻淑,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音呀伙,去河邊找鬼补履。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剿另,可吹牛的內(nèi)容都是我干的箫锤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼雨女,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谚攒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氛堕,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤馏臭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后讼稚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體括儒,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪耘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塑崖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片七冲。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖规婆,靈堂內(nèi)的尸體忽然破棺而出澜躺,到底是詐尸還是另有隱情,我是刑警寧澤抒蚜,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布掘鄙,位于F島的核電站,受9級(jí)特大地震影響嗡髓,放射性物質(zhì)發(fā)生泄漏操漠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一饿这、第九天 我趴在偏房一處隱蔽的房頂上張望浊伙。 院中可真熱鬧,春花似錦长捧、人聲如沸嚣鄙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哑子。三九已至,卻和暖如春肌割,著一層夾襖步出監(jiān)牢的瞬間卧蜓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工把敞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弥奸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓先巴,卻偏偏與公主長(zhǎng)得像其爵,于是被迫代替她去往敵國(guó)和親冒冬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伸蚯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 移動(dòng)端業(yè)務(wù)開發(fā)简烤,iOS 下經(jīng)常會(huì)有 fixed 元素和輸入框(input 元素)同時(shí)存在的情況剂邮。 但是 fixed...
    新林吃遍世界閱讀 4,471評(píng)論 0 0
  • 今天給大家分享一下fixed布局在移動(dòng)端出現(xiàn)的問題及解決方案。 1.背景介紹 移動(dòng)端業(yè)務(wù)開發(fā)横侦,iOS 下經(jīng)常會(huì)有...
    slashnie閱讀 7,265評(píng)論 0 2
  • 我叫阿刁,今年23歲引瀑,是個(gè)很沒有存在的人狂芋。我曾經(jīng)喜歡過一個(gè)女孩。她叫阿春憨栽,是隔壁班的同學(xué)帜矾。她可能不是最美最耀眼的那...
    曾樑閱讀 900評(píng)論 3 4
  • 幼時(shí),漲紅了臉屑柔,是因?yàn)榭摁[屡萤。 少年,漲紅了臉掸宛,是與同學(xué)的爭(zhēng)吵死陆。 青春,漲紅了臉唧瘾,是因?yàn)槌鯌俚那酀?而現(xiàn)在措译,不管你...
    小蝸先生閱讀 334評(píng)論 0 1