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