“自动栅格”为锐电网-使用JavaScript创建自适应网格
6月25日,在下午04:39 2008年由基督教海尔曼| 开发 | 8评论我爱YUI的网格 。 我知道我的CSS,我知道如何解决浏览器的不同问题,但我也很无聊修复和测试,并创建这些变通办法,一遍又一遍。 虽然锐网格未必适合所有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 - 两列,左边窄,300像素
- YUI-T4 - 两列,右边窄,180px
- YUI-T5 - 两列,右边窄,240px
- 。YUI-T6 - 两列,右边窄,300像素
把这些在一起,你可以创建一个灵活的网格您的计划:
- 当可用的屏幕空间是大于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-左/)){ 侧边栏='左'; } (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定制'); (容器){
首先,我们检查是否存在实际上是一个在当前文档中的YUI的电网,通过正确的ID存在测试。 如果有,我们执行的代码的其余部分。
侧边栏= NULL; VAR类container.className; (classes.match(/ YUI-T [1-3] | YUI-左/)){ 侧边栏='左'; } (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() 在尼古拉斯Zakas的博客详细的解释 。
}; 返回{ 开关:switchGrid }; }();
随着油门的方法需要我们setTimeout()调用的公共方法返回一个指针switchGrid 。
这一切。 你可以尝试的演示页上的效果。 如果你定义你的侧边栏的大小无关,你可以创造一些奇妙的动态和灵活的网站与这个小脚本。
共享和扩展: 书签del.icio.us Digg它! | reddit!
8评论
很抱歉,评论已被封闭,在这个时候。


非常光滑,非常实用,整体非常不错。
这是技术正交YUI布局管理器使用吗?
我爱,YUI的,因此可以利用干净,以提高易用性。
评论αlexander - 6月25日,2008 #
亚历山大
对我来说,这似乎是光除了网格,而布局管理器是一个更强大,应用式的方式来呈现和管理嵌套的内容框架。 在布局管理器,窗格是hideable的/可调整大小和暴露了丰富的JS API控制基础上,规划布局内发生了什么......许多不同的系统和方法。
的问候,
埃里克
评论由 Eric 米拉利亚 - 6月25日,2008 #
有趣。 我已经喜欢看到它类似于CSS 3媒体更紧密虽然查询。 对于习惯的想法的缘故。
评论WILCO - 6月26日,2008 #
我同意你亚历山大,锐允许干净,以提高易用性。
费利佩
锐博客(葡萄牙) - http://www.yuiblog.com.br
评论费利佩·卢纳尔迪法里亚斯 - 6月26日,2008 #
[...]自己的基督教海尔曼创建了一个新的JavaScript库自动栅格结婚YUI的网格,基地CSS库,允许智能调整:我爱YUI的网格。 我[...]
由pingback的才算是Ajax»YUI的“自动栅格:正确调整电网 - 2008年6月26日, #
[...]要变通围绕锐电网一定的决议进行了优化的问题,我用博客这里以前的autogrids伎俩。 [...]
通告的由一个锐网格为基础的WordPress主题-自动栅格最小锐»雅虎的用户界面博客 - 7月2日,2008 #
你的页面上的代码为指针
switchGrid使用保留字switch,而例如页面没有。 这一点在第一混乱,并造成了一些错误,当我试图使它在本地工作。这页
演示页
斯科特Plumlee - 2008年11月18日, #
[...]使用此我可以写一个脚本,显示完美的YUI为每个浏览器的大小电网。 [...]
通告的由等着我回来! »博客存档»介绍:专业网页开发工具 - 5月31日,2009 #