YUI的網格-使用JavaScript創建自適應網格的“自動柵格 “
2008年6月25日,日下午04:39基督教海爾曼 | 開發| 8評論我愛YUI的網格 。 我知道我的CSS,我知道如何解決不同的瀏覽器的問題,但我也非常關注無聊的修復和測試,並創建這些變通辦法,一遍又一遍。 雖然 YUI的網格可能不適合所有Web開發的情況下有,我很高興,採取務實的態度,只是創建,可與他們做的網站(現在你也知道,為什麼我不是一個設計師)。
我一直當我把一些YUI的網格為基礎的網站生活的一個問題是,人們抱怨我期待著一個特定的屏幕分辨率或視口大小。 YUI的網格可以是100%廣,它可以是非常愚蠢的高解析度,或優化,無論是800 × 600或1024 × 768分辨率的。 當你優化決議較高的人會抱怨頁面長度為 800像素,當您為 1024人說,他們已經滾動到您的側欄上看到800 × 600。 你不能贏。
或者你能嗎? CSS是動態的 - 它有一個固定的的狀態,你只能希望瀏覽器不正確的事,你給它(IE瀏覽器的條件很好,有意見,但技術上它們是HTML,當然也有媒體查詢CSS3和其他物品,但讓我們的說法而說支持IE6的基地)。 另一方面,JavaScript中,是非常有活力,你可以讀出並檢查發生了什麼事,以目前使用的瀏覽器和反應。
把這個 JavaScript功能,您可以創建一個 YUI的網格為基礎的佈局,保持靈活和變化,根據需要用好。 所有你需要做的的是使用一些YUI DOM魔術和相應變化ID和類。
YUI的網格總寬度由容器DIV的ID定義,有幾種口味:
- #DOC - 750px居中(800 × 600)
- #doc2 - 950px居中(1024 × 768)
- #doc3 - 100%液(大家好)
- #doc4 - 974px液(1024 × 768)
- #DOC自定義 - 自定義寬度
這裡有一點要記住的是,即使doc3有一個最小寬度為750像素,這就是為什麼你需要重寫一個完全靈活的網格:
#doc3 最小寬度:0; }
容器內的DIV,你可以有兩大塊,和他們的寬度和邊欄的位置是由容器DIV的類定義:
- YUI - T1 - 兩列,左邊窄,160px【
- YUI - T2 - 兩列,左邊窄,180px
- YUI - T3 - 兩列,左邊窄,為 300px
- YUI - T4 - 兩列,狹義上的權利,180px
- YUI - T5 - 兩列,右邊窄,240px
- 。YUI - T6 - 兩列,法權的狹隘,為 300px
把這些在一起,你可以創建一個靈活的網格為您的計劃:
- 當屏幕的可用空間大於 950像素,使用doc2和最廣泛的側邊欄 - 向左或向右
- 如果你有小於 950像素,使用DOC和中等規模的側邊欄
- 如果您有小於 760像素,使用doc3和最小的側邊欄
- 如果你有更少 - 說 600像素 - 在您的處置,顯示了以下主要內容的邊欄
讓這個腳本是不是真的火箭科學。 它需要做的是讀出的網格設置,可用的瀏覽器窗口的寬度,然後相應地改變 ID和類。
YAHOO.example.autoGrid =函數(){ 容器= YAHOO.util.Dom.get(“DOC”)| | YAHOO.util.Dom.get('doc2“)| | YAHOO.util.Dom.get('doc4“)| | YAHOO.util.Dom.get('doc3“)| | YAHOO.util.Dom.get(DOC定制“); (容器){ 側邊欄 = NULL; VAR類 = container.className; (classes.match(/ YUI - T [1-3] | YUI左/)){ VAR側邊欄 =“左”; } (classes.match(/ YUI - T [4-6] | YUI /右)){ 側邊欄 =“正確的”; } 函數 switchGrid(){ currentWidth = YAHOO.util.Dom.getViewportWidth(); (currentWidth> 950){ container.id =“doc2”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T3”:“YUI - T6”; } } (currentWidth <950){ container.id =“DOC”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T2”:“YUI - T5”; } } (currentWidth <760){ container.id =“doc3”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T1”:“YUI - T4”; } } (currentWidth <600){ container.id =“doc3”; container.className = ''; } }; switchGrid(); / * 由Nicholas Zakas油門解決 MSIE中的調整大小的臟東西。 http://www.nczonline.net/blog/2007/11/30/the_throttle_function * / 功能油門(方法,範圍){ clearTimeout(method._tId); method._tId = setTimeout的(函數(){ method.call(範圍); },100); }; YAHOO.util.Event.on(窗口,“調整大小”,函數(){ 油門(YAHOO.example.autoGrid.switch,窗口); }); }; 返回{ 開關:switchGrid }; ();
讓我們通過它一步一步:
YAHOO.example.autoGrid =函數(){ 容器= YAHOO.util.Dom.get(“DOC”)| | YAHOO.util.Dom.get('doc2“)| | YAHOO.util.Dom.get('doc4“)| | YAHOO.util.Dom.get('doc3“)| | YAHOO.util.Dom.get(DOC定制“); (容器){
首先,我們檢查是否存在實際上是一個銳電網在當前文檔中,通過測試正確的ID存在。 如果有,我們執行的代碼的其餘部分。
側邊欄 = NULL; VAR類 = container.className; (classes.match(/ YUI - T [1-3] | YUI左/)){ VAR側邊欄 =“左”; } (classes.match(/ YUI - T [4-6] | YUI /右)){ 側邊欄 =“正確的”; }
我們定義為NULL sidebar欄,檢索容器元素的類的名稱,並檢查是否有被定義的列結構。 除了 預設的YUI網格類,我們yui-left yui-right在這裡。 這些樣式,讓你不會有一個側邊欄沒有腳本功能,但得到一個腳本確定後,有一個足夠的空間。
函數 switchGrid(){ currentWidth = YAHOO.util.Dom.getViewportWidth(); (currentWidth> 950){ container.id =“doc2”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T3”:“YUI - T6”; } } (currentWidth <950){ container.id =“DOC”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T2”:“YUI - T5”; } } (currentWidth <760){ container.id =“doc3”; (邊欄){ container.className =側邊欄 ==='左'的? “YUI - T1”:“YUI - T4”; } } (currentWidth <600){ container.id =“doc3”; container.className = ''; } }; switchGrid();
switchGrid()方法,我們定義的所有工作。 我們設立申請的ID和類不同的情況,並呼叫後,立即被定義的方法。
/ * 由Nicholas Zakas油門解決 MSIE中的調整大小的臟東西。 http://www.nczonline.net/blog/2007/11/30/the_throttle_function * / 功能油門(方法,範圍){ clearTimeout(method._tId); method._tId = setTimeout的(函數(){ method.call(範圍); },100); }; YAHOO.util.Event.on(窗口,“調整大小”,函數(){ 油門(YAHOO.example.autoGrid.switch,窗口); });
充分的靈活性,我們也適用於一個事件監聽器,重新檢查電網的規格,當用戶調整瀏覽器。 作為Internet Explorer有一個觸發resize事件的壞習慣,而用戶調整窗口的大小, switchGrid()執行switchGrid()。這是在尼古拉斯Zakas“博客上詳細解釋。
}; 返回{ 開關:switchGrid }; ();
隨著油門的方法,我們需要一個公共setTimeout()方法來調用返回一個指針switchGrid 。
這是所有。 您可以嘗試的演示頁上的效果。 如果你定義側邊欄的大小無關,你可以創造一些奇妙的動態和靈活的的網站與這個小腳本。
分享和擴展: 書籤del.icio.us | Digg它! | 書籤交易!
8評論
抱歉,評論形式此時關閉。


非常光滑,非常實用,整體非常漂亮。
這是技術正交使用YUI佈局管理 ?
我愛 YUI可以槓桿,乾淨,以提高易用性。
評論αlexander - 2008年6月25日#
亞歷山大
對我來說,這似乎是光除了網格,而佈局管理器是一個更強大,應用樣式的方法介紹和管理嵌套的內容框架。 在佈局管理器,窗格hideable /可調整大小和揭露為您豐富的JS API來控制他們的基礎上,什麼佈局內發生的事情... ...一個非常不同的系統和方法。
此致
埃里克
評論由 Eric 米拉利亞 - 2008年6月25日#
有趣的。 我會喜歡看到類似的CSS 3媒體查詢更加緊密地雖然。 為了習慣的想法。
評論WILCO - 2008年6月26日#
我同意你亞歷山大,銳允許乾淨,以提高易用性。
費利佩
銳志(葡萄牙) - http://www.yuiblog.com.br
評論費利佩Lunardi法里亞斯 - 2008年6月26日, #
[...]自己的基督教海爾曼創建了一個新的JavaScript庫自動柵格結婚 YUI的網格,基CSS庫,允許智能調整大小:我愛 YUI的網格。 我[...]
Pingback Ajaxian » YUI的自動柵格:正確調整電網 - 2008年6月26日, #
[...]為了解決一定的決議 YUI的網格優化的問題,我用博客這裡以前autogrids把戲。 [...]
Pingback由一個YUI的網格為基礎的WordPress主題- YUI的自動柵格最小»雅虎的用戶界面博客- 7月2日,2008 年 #
此頁面上的代碼為
switchGridswitchGrid,使用switch字開關,而例如頁面沒有。 有點混亂,並造成了一些錯誤,當我試圖使它在本地工作。這頁
演示頁
評論由斯科特Plumlee - 2008年11月18日,日#
[...]使用此我可以寫一個腳本,顯示完美的YUI為每一個瀏覽器大小的網格。 [...]
Pingback由等待,直到我來了 ! »博客存檔»介紹:專業的Web開發工具- 5月31日,2009 年 #