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