新聞中心
當然像亞馬遜首頁那一種布局會更個性化一些,它會根據(jù)用戶持有設備的屏幕大小而現(xiàn)實內(nèi)容。例如:一部PC機上可能一排現(xiàn)實5個商品,一部iPad上可能顯示3個商品,而一部手機上可能一排只顯示1個商品。至少不要 出現(xiàn)如下這種情況,在符合W3C標準的瀏覽器中顯示正常,而在IE6,7中頁面亂套,因為IE6,7仍然擁有很龐大的用戶群;即使你做的Web應用是面向某些企業(yè)用戶的,這種情況下用戶較少,但你也不能強求用戶使用哪一種瀏覽器。要解決這個問題,這就需要用到頁面布局中的自適應,雖然這個問題看起來很簡單。

我在這里將會介紹三種我最近在項目中用到的自適應:
◆ 頁面整體寬度自適應
◆ iframe寬高自適應
◆ jqgrid高度自適應
頁面整體寬度自適應
先看看下面的頁面基本布局圖
頁面分為三個部分:
(1) Header,這一部分寬度自適應
(2) Left 左邊欄,為定寬200px,一般為菜單或?qū)Ш?/p>
(3) Right右側(cè)主內(nèi)容區(qū)域,寬度自適應
既然做了分解,我們就把它當做需求來一步一步實現(xiàn)它吧,首先是Header區(qū)域。
請看代碼1:
關鍵的代碼只有一行,我已經(jīng)標出。
現(xiàn)在有一個問題了,如果Header的內(nèi)容也比較豐富,可能Logo + Banner的總寬度為1000px了,但有些小屏幕卻看不完整,這時我們得為這個Header 加個最小寬度限制。在IE 7 +和W3C瀏覽器中,擁有一個min-width屬性可以實現(xiàn)這個效果,但是IE6不支持(參照各版本IE瀏覽器CSS兼容性列表)。不過css expression可以幫我們解決這個問題,請看代碼2:
Header自適應 ![]()
在代碼2中我并沒有直接更改#header用margin屬性來控制,雖說margin:0 auto可以來控制居中自適應,但是如果需要頁邊距為30像素時用margin: 0 30px則不行了了(在Firefox滿屏是可以的,但瀏覽器縮小時,左側(cè)nargin是存在的,而右側(cè)被吃掉了)
#p#
OK,現(xiàn)在已經(jīng)實現(xiàn)Header部分的居中自適應了,下面的Left和Right也不會麻煩。雖然上面的Header層使用了expression來實現(xiàn)寬度自適應,但是下面的Right層則不能使用同樣的方式,因為Header層依賴的是body,而Right層則不是。如果不考慮IE6的存在,則用如下代碼就可以實現(xiàn)本文開頭的布局圖。請看代碼3:
![]()
Left
Right
紅色部分標出的是關鍵代碼,又回到之前的問題了,min-width屬性在IE6中不支持,所以你在IE6中運行代碼3將得不到我們預期的結(jié)果。那么,現(xiàn)在就要借助js來實現(xiàn)這個效果了。請看代碼4:
View Code
"container">
"header">
"header_content">"http://images.cnblogs.com/logo_small.gif" alt="">
"main">
"left">
Left
"width: 1049px; " id="right">
Right
代碼中有幾處要注意的地方,我在下圖中有標注出來,要查看運行結(jié)果,請復制上面的代碼保存為html,所有url都是外部鏈接。
***部分終于講完了,呼~~~。
#p#
iframe寬高自適應
有了前面的基礎,要做iframe的寬高自適應就很簡單了。iframe高度自適應是根據(jù)屏幕的高度來的(無滾動條),寬度自適應已經(jīng)通過前面的方式實現(xiàn)了,高度自適應只需要對height屬性進行計算處理就可以實現(xiàn)。
根據(jù)上面提供的代碼,要更改的地方很少。這里有一個完整的iframe例子下載:iframe auto width and height demo,代碼可以直接看里面的。
無圖無真相,還是截個圖看看吧。
jqgrid高度自適應
jqgrid是一個較為強大的表格控件,對于它的介紹為不再贅述,至于它的用法和結(jié)合asp.net進行ajax分頁的方式我將在下一篇講述(不是loading once的方式,loading once存在一些bug)。由于上面的iframe高度已經(jīng)根據(jù)屏幕的高度做了限制,而jqgrid提供了一頁顯示10,20,30條這種類似的選項,原有的高度是不可能讓30條數(shù)據(jù)顯示完全的。這就需要為jqgrid限制一個***高度,例如300px,當內(nèi)容的高度超出300px時,jqgrid就得以豎向滾動條滑動來顯示內(nèi)容。
假定我們已經(jīng)為jqgrid綁定好數(shù)據(jù)源,jqgrid的高度為360px。要實現(xiàn)兼容所有瀏覽器的jqgrid高度自適應,我們現(xiàn)在還需借助一個東西,http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/,其實還是為了解決IE resize的bug。
還是截兩個效果圖,圖1每頁顯示10條,圖2每頁顯示30條。
總結(jié)
上面的代碼中實際還是有一些問題的,在IE8中已經(jīng)不支持expression表達式了,而且這種腳本式的css也影響代碼的整體美觀。除了最普通的一行式寬度自適應,其它種類的自適應都需要借助腳本來實現(xiàn),想必大家現(xiàn)在已經(jīng)知道最終的解決方案了,通過jquery + wresize插件能夠做到兼容所有瀏覽器的寬高自適應。
原文:http://www.cnblogs.com/keepfool/archive/2011/12/26/2302186.html
當前標題:Web布局中的幾種寬高自適應
鏈接URL:http://m.fisionsoft.com.cn/article/dpgoejp.html


咨詢
建站咨詢
