成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺議內滾動布局

移動開發
隨著顯示器設備越大越寬越密,以及現代web技術的發展。web站點已經開始有了從傳統的瀑布式網頁向類桌面軟件風格站點轉變的趨勢

cover4

一、什么是內滾動布局?

所謂“內滾動布局”,顧名思義就是主滾動條在頁面內部的布局,是相對于傳統的<html>滾動而言的,例如,下圖所示滾動條,是從頭部下方開始:

淺議內滾動布局

傳統的頁面滾動,基本上是相對于整個瀏覽器窗體,例如,QQ視頻首頁:

淺議內滾動布局

二、為什么會有內滾動布局?

隨著顯示器設備越大越寬越密,以及現代web技術的發展。web站點已經開始有了從傳統的瀑布式網頁向類桌面軟件風格站點轉變的趨勢。比方說,QQ音樂的首頁目前是這樣子的:

淺議內滾動布局

以后可能就會變成這樣子:

淺議內滾動布局

“納尼,這不就是現在的QQ音樂軟件界面截圖?”“這位同學眼神很犀利,沒錯,這就是有著全國最大的正版高質量樂庫的QQ音樂PC版截圖”。

我們可以局部放大,會發現,是個實打實的內滾動布局。

淺議內滾動布局

不僅是QQ音樂,其他很多桌面軟件都是這種內滾動布局,比方說QQ軟件管家等等。

淺議內滾動布局

有此可見,一旦強交互的傳統web頁面桌面軟件化,內滾動布局是繞不開的一堵墻,了解之還是很有必要的。

三、如何實現內滾動布局?

既然是內滾動,就有必要干掉瀏覽器原生<html>的滾動條,這個很簡單:

  1. html { overflow: hidden; } 

“然后呢?”我想了想,好像然后就沒有“然后”了,讓一個div容器滾動就完事了。

然而,事非經過不知難,原理雖然簡單沒說頭,但是細節操作還是有些上手成本的。

為了更好理解,我們拿實例說話。最近半年一直在參與企業QQ賬戶中心改版的項目,你可以看成是企業后臺管理系統。這里有幾個關鍵字,一是企業,二是管理系統。

#p#

1. 企業

這里為什么要強調是“企業”呢?因為企業產品的用戶一般都是購買了企業QQ產品的企業的員工,有一定IT技能的人。因此,用戶的瀏覽器的現代感就比Qzone用戶強不少。下圖為同事在2015-05-20這個愛意滿滿的日子拉的userAgent數據:

淺議內滾動布局

如果我們將支持CSS3 animation的瀏覽器稱之為現代瀏覽器,可以發現,企業產品的用戶,70%~80%的用戶都是使用的現代瀏覽器。親們,近8成的用戶都是使用現代瀏覽器,這就意味著,企業產品其實可以作為現代web技術的試驗田,在為用戶提供更好體驗更高質量產品的同時,為日后其他產品的現代化改造提供了寶貴的借鑒經驗。而本文的內滾動布局,就是萬千經驗中的一小個。

2. 管理系統

“管理系統”意味著站點以強交互為主,會有很多類似辦公軟件的交互操作在里面。如果是更偏重瀏覽的站點,例如企業QQ官網,顯然,傳統的垂直瀑布式的網站是更適合的,滾動瀏覽,再滾動,再瀏覽。但是,企業管理系統如此龐大,操作如此頻繁,交互如此之多,傳統的上下式網站顯然很難讓用戶用得非常得心應手。下圖為以前企業QQ賬戶中心組織結構頁面(測試頁面)的真容:

淺議內滾動布局

看著此頁面,立馬讓我想起了6年前剛畢業那會的青蔥歲月,那時候的頁面的基本上就是這樣的調調,小小的空間里有著小小的世界。時代發展,再輝煌的過去,如果沒有改變,終將會被埋汰。

正是由于以上兩點,設計師設計的時候,大膽創新,設計成了全屏自適應、半響應、類PC軟件風格(內滾動)的管理站點,下圖為上面老頁面同樣數據的新測試頁面截圖:

淺議內滾動布局

回到內滾動布局本身。

新版企業賬戶中心全站,頂部以及左側固定,不跟隨滾動,右側主體內滾動,如何實現呢?

由于企業產品不用管0.4%的IE6用戶,因此,事件就變得簡單地多了。我們可以利用絕對定位元素的拉伸特性,使內滾動容器高度自適應匹配。HTML主結構示意如下:

  1. body 
  2.  -- page 
  3.     -- header 
  4.     -- side 
  5.     -- content 

其中page扮演傳統頁面<body>的角色。這是一個預留設計,防止為了滿足某些功能或交互體驗需要,一個頁面同時出現多個類似結構頁面的情況。或者這么說吧,把所有頁面內容放在一個page中,此時page就好比一個可以移動的房子,回頭你跳槽來騰訊了,房子可以一起帶過來,原來的位置可以被其他房子代替。但是,你如果直接放在<body>中,由于<body>只能是一個,不動產,此時想要做整體遷移,難度就較大,同時項目幾乎成型,全局修改成本高高風險大。不過凡事都有兩面性,這樣的折騰可以減少你白頭發的數目,因為你會因操勞過度頭發直接脫掉的。

page相關CSS如下:

  1. .page { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } 

應該很好理解,絕對定位,滿屏拉伸,等同于:

  1. .page { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 

由于省了好幾個字節,所以我舍棄了IE6使用了上面寫法。

對于固定的頭部header或者固定的側邊side, 你可以使用語義明確的position:fixed定位,或者直接使用position:absolute,因為滾動容器跟他們平級,所以,absolute其實就是fixed效果。

講到這里就不得不說點題外話,很多人會遇到移動端position:fixed的底部輸入框定位的頭疼問題,如何解決?就是使用本文介紹的內滾動布局,然后底部使用position:absolute模擬fixed效果。 [[143267]]

代碼方面,同樣就是拉伸拉伸:

  1. .header { height: 62px; position: absolute; top: 0; right: 0; left: 0; } 
  2. .side { width: 200px; position: absolute; top: 62px; bottom: 0; left: 0; } 

最后就是高能的content, 還是一樣的套路:

  1. .content { position: absolute; top: 62px; right: 0; bottom: 0; left: 200px; overflow: auto; } 

主體內容全部都在content里面玩耍。于是,一個高寬均自適應瀏覽器窗體的內滾動布局就成型了。

四、內滾動布局的賞與罰

我們站在上帝視角審視一下內滾動布局,本質上就是滾動容器的遷移,職能下發。所以絕大部分情況下,跟我們平常玩轉頁面的路數沒什么區別。

但是,畢竟江山易主,差異還是存在的。最簡單的例子就是對滾動事件的影響。很多滾動插件,包括以前的腳本,我們可能都是這么寫的:

  1. $(window).scroll(function() { 
  2.     // 跟我一起翻滾吧,騷年…… 
  3. }); 

但是,在內滾動布局下,由于滾動的容器不是window窗體,不是<html>元素,因此,上面滾動事件八輩子都不會執行。我們需要調整,由于現在,頁面的主滾動條是.content, 因此,我們可以:

  1. $(".content").scroll(function() { 
  2.     // 跟我一起翻滾吧,騷年 again…… 
  3. }); 

#p#

你以為事情就這么完了嗎?太天真了!以前我們的滾動條是跟瀏覽器上邊緣是靠在一起的,但是,自從變成了內滾動,滾動條是跟網站公用頭部下邊緣排排站,這會造成什么問題呢?就是一些offset的計算要發生一些變化。舉個例子,我們希望表格頭部操作區域有類似position:sticky效果,也就是視區內一起翻滾,要被滾出去的時候,fixed固定,不跟隨。

淺議內滾動布局

此時,我們的最大滾動高度值,就需要把網站頭部的高度考慮進去(傳統窗體滾動不需要,因為值是0):

  1. var maxScrollTop = $("#tableHeader").offset().top - $(".header").height(); 

以上這個,我們可以稱之為“變化”,與原本的實現相比無功無過,一種變化一種轉移。實際上,內滾動布局還會帶來帶有質變性質的一些特性。

無法滾動的彈出層

基本上,是個像樣的web2.0網站都會有彈框web組件,一個黑色半透明的overlay層,上面搖曳著彈框面板,例如這樣的:

淺議內滾動布局

對于黑色半透明覆蓋層,傳統實現是這樣的:如果要兼容IE6瀏覽器,一般是absolute絕對定位,高度由JS計算賦予;如果不需要管IE6, 則可以使用fixed固定定位。

然而,在內滾動布局下,“賞”就出來了,就算需要兼容IE6瀏覽器,黑色半透明高寬100%自適應覆蓋也不需要任何JS計算的幫助,也不需要監聽window的resize事件,直接CSS就可以搞定。很簡單:

  1. .overlay { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } 

為啥一行CSS就能搞定所有場景?因為使用的是內滾動布局,如下圖示意,屏幕就這么高,滾動在里面,自然自適應:

淺議內滾動布局

看上去是內滾動布局帶來的一個小小的“賞”,但是,實際上,埋下了一個不小的“罰”。

隨意改變滾動容器最大的問題在于,當存在覆蓋層的時候,會影響背后頁面內容的滾動。

100%尺寸的position:absolute/fixed的覆蓋層,會覆蓋任何非<html>元素(包括<body>)(包括這些元素的滾動條),因此,只要覆蓋+滾動容器改變,頁面就無法滾動。

內滾動布局是典型的改變瀏覽器默認滾動容器的布局,自然覆蓋層一出現,就沒法滾動。不過這也沒什么,對吧,彈框出現時候,頁面背景沒法滾也挺好的。

但是,麻煩的事情是,如果彈框自身高度很高,卻又沒法滾動呢(瀏覽器可用高度700像素,彈框有900像素高)?

傳統布局下的彈框,如果高度很高,直接設置彈框容器position:absolute就可以愉快地上下翻滾了。但是,在內滾動布局下,彈框根本就不在滾動容器里面,翻滾一說從何談起?

大危機!怎么辦!?

我們新版企業賬戶中心就遇到這個問題,我是這么解決的——overlay和dialog合體。

合體與滾動

合體是什么意思呢?基本上,90%+的彈框組件,半透明覆蓋層overlay和彈框dialog是兩個并列的兄弟關系的獨立的元素,這種設計的好處在于overlay組件可以復用。實際上,我們要實現一個彈框效果,只要一層div標簽就可以了,核心就是使用兼容的RGBA背景色技巧,然后彈框HTML放在里面:

  1. .container { 
  2.     position: absolute; top: 0; left: 0; bottom: 0; width: 100%; 
  3.     background-color: rgba(0,0,0,.5); 
  4.     filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7F000000,endcolorstr=#7F000000); 
  5.     overflow: auto; 
  6. :root .container { 
  7.     /* IE9 無 filter */ 
  8.     filter: none; 

HTML結構示意如下:

  1. <div class="container"
  2.     <dialog></dialog> 
  3. </div> 

此時,彈框在一個可滾動的容器之中,媽媽再也不用擔心我不能愉快地翻滾了!

淺議內滾動布局

五、結束語

由于傳統窗體滾動已經深入人心,所以我們可能會覺得內滾動布局似乎有些坑;但是,如果當年是內滾動布局天下,我們又該如何看待新興的窗體滾動布局呢?然后,從產品的角度講,內滾動布局在操作如此頻繁的重交互項目中所帶來的交互體驗上的改進,要遠比經驗不足帶來的額外開發成本要大很多很多。

我相信,這種交互形式以及web布局上的創新一定會帶來很多正面的反饋和積極的影響,產品即將上線,我們可以拭目以待。

內滾動布局,更現代,更移動,如果您的項目合適,不妨也試試這種看似新穎的布局方式。

感謝閱讀,歡迎交流!

出處:騰訊ISUX (http://isux.tencent.com/inner-scroll-layout.html)

責任編輯:倪明 來源: 騰訊ISUX
相關推薦

2010-04-29 16:46:59

Unix進程

2022-08-09 18:08:36

Firefox瀏覽器多賬戶容器

2015-09-08 14:42:17

Android性能優化

2011-07-15 14:46:18

PHP

2021-11-03 10:52:39

數據庫

2009-07-07 18:41:00

電纜故障

2009-07-06 21:11:04

2013-07-23 10:23:27

阿里巴巴新浪微博云計算

2009-08-20 10:13:49

ASP.NET和C#的

2012-12-10 10:21:36

2015-08-03 10:40:15

云計算大數據開源

2011-09-02 10:14:10

JQuery滾動Xslider

2013-05-13 10:28:26

X86服務器廠商轉型

2017-01-22 11:30:54

2011-07-15 09:26:04

.NET第三方控件

2013-04-03 15:45:51

Android瀑布流android_wat

2010-08-27 10:59:11

DIVTable

2024-01-22 09:28:23

CSS前端滾動驅動

2011-09-02 10:03:40

jQuery滾動圖片

2018-01-23 08:30:03

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人网99 | 国产二区三区 | 国产精品视频免费观看 | 国产丝袜一区二区三区免费视频 | 四虎在线播放 | 请别相信他免费喜剧电影在线观看 | 日韩手机在线看片 | 日韩精品久久久 | 亚州精品天堂中文字幕 | 国产精品美女在线观看 | a毛片视频网站 | 欧美久久久久 | 精品中文字幕一区二区三区 | 狼色网| 久久大陆 | 日韩成人在线播放 | 狠狠爱综合网 | 国产一二三区精品视频 | 成人午夜激情 | 五月婷婷婷 | 手机av在线 | www.三级| 久久精品日产第一区二区三区 | 97偷拍视频 | 99精品在线观看 | 91麻豆产精品久久久久久 | 日韩一区二区三区av | 九九综合 | 亚洲第一av网站 | 国产日韩欧美精品一区二区三区 | 国产四区 | 日韩毛片在线免费观看 | 久久精品一区 | 大学生a级毛片免费视频 | 免费观看av网站 | 亚洲激情在线视频 | 亚洲精品一区二区三区在线 | 日日夜夜精品视频 | h片在线观看免费 | 毛片在线免费播放 | 成在线人视频免费视频 |