詳解移動(dòng)端網(wǎng)頁(yè)設(shè)計(jì)實(shí)現(xiàn)內(nèi)滾動(dòng)的四種解決方案
這篇文章主要介紹了關(guān)于移動(dòng)端實(shí)現(xiàn)內(nèi)滾動(dòng)的四種解決方案,實(shí)現(xiàn)的效果就是在一個(gè)區(qū)域內(nèi)只允許部分區(qū)域產(chǎn)生滾動(dòng)的效果,而其余部分則不能移動(dòng),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。...
發(fā)現(xiàn)需求
如果在一個(gè)區(qū)域內(nèi)只允許部分區(qū)域產(chǎn)生滾動(dòng)的效果,而其余部分不能移動(dòng),你會(huì)采用什么方法呢?
首先我們可以把這個(gè)需求分解為兩個(gè)小的問(wèn)題來(lái)解決。
部分區(qū)域固定
其余區(qū)域滾動(dòng)
部分區(qū)域固定
為頁(yè)面的body部分設(shè)置height: 100%以及overflow: hidden,即禁用頁(yè)面原生的滾動(dòng),保證只會(huì)顯示一屏的內(nèi)容。
固定區(qū)域采用絕對(duì)定位。
其余區(qū)域滾動(dòng)
核心屬性overflow-y
mdn對(duì)于overflow-y的定義
The overflow-y property specifies whether to clip content, render a scroll bar, or display overflow content of a block-level element, when it overflows at the top and bottom edges.
overflow-y屬性指定或是裁剪內(nèi)容并且渲染一個(gè)滾動(dòng)條,或是當(dāng)塊級(jí)元素在其頂部或底部溢出時(shí)顯示溢出的內(nèi)容。
簡(jiǎn)單來(lái)說(shuō),overflow-y屬性在垂直方向上存在溢出的時(shí)候,通過(guò)設(shè)置不同的值會(huì)產(chǎn)生不同的表現(xiàn)。為了實(shí)現(xiàn)滾動(dòng)功能我們需要將該屬性設(shè)置為scroll,之后,無(wú)論塊級(jí)元素的內(nèi)容是否溢出,瀏覽器都會(huì)生成一個(gè)滾動(dòng)條并且隱藏容器中內(nèi)容溢出的部分,只有在滾動(dòng)之后才會(huì)顯示。
舉個(gè)例子:
.test{ width: 200px; /* 關(guān)鍵樣式 */ height: 200px; overflow-y: scroll; /* 以下無(wú)關(guān)樣式 */ background: #f14c5c; color: #fff;}
效果圖如下:
通過(guò)剛才的例子我們可以得出結(jié)論,只要限制塊級(jí)元素的高度,自然就可以實(shí)現(xiàn)只有該元素的內(nèi)容可滾動(dòng)而不影響其它內(nèi)容。但是在實(shí)現(xiàn)過(guò)程中遇到了新的問(wèn)題,如何實(shí)現(xiàn)對(duì)設(shè)計(jì)圖的精確還原?
設(shè)計(jì)圖如下:
整個(gè)彈出框高度是隨頁(yè)面高度自適應(yīng)的,標(biāo)題部分和底部按鈕部分位置是固定的,中間列表需要占滿(mǎn)剩余高度,并且內(nèi)容可滾動(dòng)。整個(gè)彈窗被最外層div包裹,底部按鈕相對(duì)于它進(jìn)行定位。經(jīng)過(guò)思考后,嘗試了四種方案,分享給大家。
方案說(shuō)明
我們需要確定的核心問(wèn)題就是中間內(nèi)容的高度,也即是height在不同尺寸屏幕下的精確高度。
vh
相對(duì)于視口的高度,視口被均分為100單位,即1vh等于視口高度的1%。
但是vh單位對(duì)低版本安卓和iOS支持不夠好,微信瀏覽器X5內(nèi)核不支持,雖然已經(jīng)升級(jí)到blink內(nèi)核,但是為了確保萬(wàn)無(wú)一失,放棄采用這種方案。另外也無(wú)法精確控制和底部按鈕邊距。
height百分比
和vh類(lèi)似,無(wú)法精確控制和底部按鈕的邊距,自適應(yīng)效果不好。
calc
對(duì)于以上兩種方案的存在的問(wèn)題,calc計(jì)算屬性可以很好的解決,只需要設(shè)置height:calc(100% - 60px),就可以精準(zhǔn)的占滿(mǎn)中間部分,并且保持和底部按鈕的邊距。
可惜的是對(duì)于低版本的安卓瀏覽器、ios瀏覽器包括微信瀏覽器在內(nèi)的主流瀏覽器支持都不好,依然只能棄用。
如果兼容性再好一點(diǎn)的話,calc方案應(yīng)該是最好用且最優(yōu)雅的一種實(shí)現(xiàn)方式。
js
單純的使用css無(wú)法實(shí)現(xiàn),就只能借助js來(lái)動(dòng)態(tài)計(jì)算內(nèi)容所需要的高度來(lái)進(jìn)行設(shè)置。同時(shí)這種方法也幾乎不會(huì)遇到兼容性的問(wèn)題,是對(duì)優(yōu)雅降級(jí)的一種實(shí)踐。
題外話
隱藏難看的滾動(dòng)條。
如果直接設(shè)置overflow-y:scroll在ios下始終會(huì)出現(xiàn)很丑的滾動(dòng)條,我們可以對(duì)該元素設(shè)置以下屬性:
margin-right: -20px;padding-right: 20px;
對(duì)滾動(dòng)條進(jìn)行一個(gè)小小的hack,它就再也不會(huì)出現(xiàn)了,用戶(hù)交互時(shí)會(huì)有和原生滾動(dòng)一樣的感覺(jué),體驗(yàn)更佳。
@prototype 經(jīng)大大提醒,設(shè)置webkit瀏覽器的私有屬性::-webkit-scrollbar能更靈活的控制滾動(dòng)條,在此感謝。如果只需要隱藏,如下代碼即可:
::-webkit-scrollbar{ display: none}
雖然移動(dòng)端的瀏覽器webkit內(nèi)核居多,不過(guò)還是要在真機(jī)測(cè)試后再得出結(jié)論,如果有些瀏覽器不支持這個(gè)屬性的話,依然可以使用上面的小hack。
-webkit-overflow-scrolling: touch
在ios設(shè)備中,利用overflow來(lái)模擬滾動(dòng)會(huì)出現(xiàn)卡頓的情況,可以通過(guò)設(shè)置-webkit-overflow-scrolling: touch來(lái)解決,原因是設(shè)置后ios會(huì)為其創(chuàng)建一個(gè)UIScrollView,利用硬件來(lái)加速渲染。
這個(gè)問(wèn)題本身并不復(fù)雜,甚至需求更改后,實(shí)現(xiàn)變的非常簡(jiǎn)單。但是希望能通過(guò)這個(gè)小例子能讓每一個(gè)前端人在思考需求時(shí)都能夠盡可能的去想更多樣的方法來(lái)解決問(wèn)題,即使因?yàn)榧嫒菪曰蚱渌驎簳r(shí)無(wú)法實(shí)現(xiàn),在這個(gè)過(guò)程中獲得的成長(zhǎng)也是非常有益的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)。
- 移動(dòng)端開(kāi)發(fā)教程之像素的顯示問(wèn)題匯總
- 關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法教程
- CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色
- 微軟Your Phone初體驗(yàn):移動(dòng)端和桌面端現(xiàn)可同步照片
- 美國(guó)黑色星期五網(wǎng)購(gòu)達(dá)33.4億美元 12億來(lái)自移動(dòng)端
- 移動(dòng)端訪問(wèn)量超越桌面之后 Google搜索引擎將全面移動(dòng)
- 微星Z170 KRAIT GAMING 999 移動(dòng)端特價(jià)
- 直播大廳升級(jí)改版 樂(lè)視視頻移動(dòng)端V6.7煥新上線
- 移動(dòng)端也能盡興玩?20款最佳VR游戲推薦
- 移動(dòng)站點(diǎn)優(yōu)化:移動(dòng)端導(dǎo)航的七種設(shè)計(jì)模式
移動(dòng)端開(kāi)發(fā)教程之像素的顯示問(wèn)題匯總
最近在開(kāi)發(fā)中,發(fā)現(xiàn)了移動(dòng)端像素的一些問(wèn)題,是之前一直沒(méi)注意過(guò)的,這篇文章主要給大家介紹了關(guān)于移動(dòng)端開(kāi)發(fā)教程之像素顯示問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。...
關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法教程
由于移動(dòng)端的屏幕大小不一,所以我們?cè)谧鲆苿?dòng)端頁(yè)面的時(shí)候,在不同分辨率的手機(jī)屏幕下,手機(jī)端的圖片會(huì)顯示模糊不清,嚴(yán)重影響了用戶(hù)體驗(yàn),所以這篇文章主要給大家介紹了關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。...
CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色
文章主要介紹了CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色,代碼很簡(jiǎn)單,需要的朋友跟隨小編一起看看吧在點(diǎn)擊產(chǎn)生背景色的元素的css樣式上加上以下代碼: -webkit-tap-highlight...
微軟Your Phone初體驗(yàn):移動(dòng)端和桌面端現(xiàn)可同步照片
在最新版本中,微軟為Skip Ahead通道的Windows 10用戶(hù)帶來(lái)了全新的Your Phone應(yīng)用程序。正如今年Build開(kāi)發(fā)者大會(huì)上所演示的,微軟允許Windows 10用戶(hù)將Android或者iOS設(shè)備上的...
美國(guó)黑色星期五網(wǎng)購(gòu)達(dá)33.4億美元 12億來(lái)自移動(dòng)端
Recode中文站11月27日?qǐng)?bào)道 據(jù)Adobe的估計(jì),在今年的黑色星期五,美國(guó)市場(chǎng)的在線購(gòu)物交易額創(chuàng)下了史上新高紀(jì)錄,達(dá)到了33.4億美元,同時(shí)也...
移動(dòng)端訪問(wèn)量超越桌面之后 Google搜索引擎將全面移動(dòng)化
雖然Google業(yè)務(wù)方向越來(lái)越龐雜,但搜索引擎依然是Google未來(lái)發(fā)展的核心支柱業(yè)務(wù)之一;而且,作為Google的根基業(yè)務(wù),它從來(lái)沒(méi)有停止過(guò)進(jìn)...
微星Z170 KRAIT GAMING 999 移動(dòng)端特價(jià)
微星Z170AKRAITGAMING主板的黑白配色外觀真的是非常吸引眼球,好多玩家都因此搭建出一個(gè)黑白配色的MOD主機(jī),當(dāng)然這款主板可不是一個(gè)繡花枕頭,微星的優(yōu)秀做工和軍規(guī)組件保證了整個(gè)主板的質(zhì)量。目前這款主板在京東。...
直播大廳升級(jí)改版 樂(lè)視視頻移動(dòng)端V6.7煥新上線
近幾年,直播領(lǐng)域成為兵家必爭(zhēng)之地,各大視頻網(wǎng)站除了花費(fèi)大量財(cái)力購(gòu)買(mǎi)直播內(nèi)容版權(quán)之外,也在不停地升級(jí)直播平臺(tái),為用戶(hù)提供最極致的觀看體驗(yàn)。此次樂(lè)視視頻APP...
移動(dòng)端也能盡興玩?20款最佳VR游戲推薦
買(mǎi)到了VR眼鏡,卻選不出來(lái)一款合適的VR游戲?現(xiàn)在好了,如果你已經(jīng)入手了Oculus或者HTCVive,那么這里有很多VR游戲供你選擇,PC和移動(dòng)端也能盡興暢玩哦,有沒(méi)有你喜歡的呢?(圖源:techradar)...
移動(dòng)站點(diǎn)優(yōu)化:移動(dòng)端導(dǎo)航的七種設(shè)計(jì)模式
看了很多總結(jié)導(dǎo)航的文章,其實(shí)都基本雷同,但是都覺(jué)得不夠細(xì)致,也不是從我們常用的產(chǎn)品去分析的,因此用自己的思路重新分析了一遍,某些段落來(lái)自引用,比如拇指熱區(qū),某些...