<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Ruby's Louvre</title><subtitle type="text">The Crankiness of Belief achieves Great , not the Trick of Regulation. </subtitle><id>http://feed.cnblogs.com/blog/u/57731/rss</id><updated>2012-02-11T10:11:39Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/57731/rss"/><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/02/06/2340115.html</id><title type="text">javascript 瀑布流</title><summary type="text">现在图片网与商城流行一种叫“瀑布流”的布局，我们公司也不小心得了“流行性感冒”，要搞这个。于是我就写了一个，现在再用我的框架mass重写一下，发布出来，顺便宣传一下我的框架。瀑布流其实没什么东西，就是列布局与无限拖的结合。由于要支持IE6就没有CSS3，直接对列进行绝对定位。列就是一个DIV。然后就是列中每个板块的添加问题，我管它为砖头。每添加一块砖头前，比较一下哪列最短，就往哪里塞。最后就是无限拖，太easy了。加之，我的框架对样式，事件等设置非常简单，比jQuery更方便。下面就是源码，用到了并行加载技术，预设时加载了random,ready,css,event这几个模块，它们就会自行加载</summary><published>2012-02-06T06:43:00Z</published><updated>2012-02-06T06:43:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/06/2340115.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/06/2340115.html"/><content type="html">&lt;p&gt;现在图片网与商城流行一种叫“瀑布流”的布局，我们公司也不小心得了“流行性感冒”，要搞这个。于是我就写了一个，现在再用我的框架mass重写一下，发布出来，顺便宣传一下我的框架。&lt;/p&gt;&#xD;
&lt;p&gt;瀑布流其实没什么东西，就是列布局与无限拖的结合。由于要支持IE6就没有CSS3，直接对列进行绝对定位。列就是一个DIV。然后就是列中每个板块的添加问题，我管它为砖头。每添加一块砖头前，比较一下哪列最短，就往哪里塞。最后就是无限拖，太easy了。加之，我的框架对样式，事件等设置非常简单，比jQuery更方便。&lt;/p&gt;&#xD;
&lt;p&gt;下面就是源码，用到了并行加载技术，预设时加载了random,ready,css,event这几个模块，它们就会自行加载其依赖模块了。&lt;/p&gt;&#xD;
&lt;pre &gt;$.require("more/random,ready,css,event",function(random){&#xD;
                //容器的CSS表达式，列数，每列的宽度&#xD;
                var Waterfall = function(expr, col, colWidth){&#xD;
                    //构建整体轮廓&#xD;
                    var container = this.container = $(expr);&#xD;
                    var pw = container.width();//容器的宽&#xD;
                    var gw = (pw - col * colWidth)/(col-1);//列间距离&#xD;
                    this.colWidth = colWidth;&#xD;
                    this.cols = [];&#xD;
                    for(var i = 0; i &amp;lt; col ; i++){//随机生成列&#xD;
                        this.cols[i] = $("&amp;lt;div class='waterfall' /&amp;gt;").css({&#xD;
                            position: "absolute",&#xD;
                            top: 0,&#xD;
                            left: (colWidth + gw) * i,&#xD;
                            width: colWidth,&#xD;
                            backgroundColor: random.hex()&#xD;
                        }).appendTo(container);&#xD;
                    }&#xD;
                }&#xD;
                Waterfall.prototype = {&#xD;
                    //添加板块&#xD;
                    addBlocks : function(){&#xD;
                        for(var i = 0; i &amp;lt; 40; i++){//随机生成40个板砖&#xD;
                            $("&amp;lt;div class='waterfall_block' /&amp;gt;").css({&#xD;
                                margin: 5,&#xD;
                                width: this.colWidth - 10 ,&#xD;
                                height: random.num(80, 300),&#xD;
                                backgroundColor: random.hex()&#xD;
                            }).appendTo( this.whichCol() );&#xD;
                        }&#xD;
                    },&#xD;
                    //计算出最短的栏栅&#xD;
                    whichCol:function(el, ret, h){&#xD;
                        for(var i = 0, shortest = 0; el = this.cols[i]; i++){&#xD;
                            h = el.height();&#xD;
                            if(i == 0){&#xD;
                                shortest = h;&#xD;
                                ret = el;&#xD;
                            }&#xD;
                            if(h &amp;lt; shortest ){&#xD;
                                shortest = h;&#xD;
                                ret = el;&#xD;
                            }&#xD;
                        }&#xD;
                        return ret;&#xD;
                    }&#xD;
                };&#xD;
&#xD;
                var waterfall = new Waterfall("body",4,300)&#xD;
                waterfall.addBlocks();&#xD;
                $(window).scroll(function(){&#xD;
                    var clientHeight = $(window).height(),&#xD;
                    scrollTop = $(window).scrollTop(),&#xD;
                    scrollHeight = $(document).height();&#xD;
                    if(clientHeight + scrollTop &amp;gt;=  scrollHeight ){&#xD;
                        waterfall.addBlocks();&#xD;
                    }&#xD;
                })&#xD;
            })&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;源码放于&lt;a href="https://github.com/RubyLouvre/mass-Framework/tree/master/client"&gt;github&lt;/a&gt;中，暂时我们只有到client这部分的代码。&lt;/p&gt;&#xD;
&lt;P&gt;IE下如果报错，请它刷新页面&lt;/p&gt;&#xD;
&lt;textarea id="runcode1" style="width:80%" rows="10"&gt; &#xD;
&amp;lt;!doctype html&amp;gt;&#xD;
&amp;lt;html&amp;gt;&#xD;
    &amp;lt;head&amp;gt;&#xD;
        &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;&#xD;
        &amp;lt;title&amp;gt;瀑布流&amp;lt;/title&amp;gt;&#xD;
        &amp;lt;script src="https://raw.github.com/RubyLouvre/mass-Framework/master/client/mass.js"&amp;gt;&amp;lt;/script&amp;gt;&#xD;
        &amp;lt;script&amp;gt;&#xD;
            window.onerror = function(){&#xD;
               location.reload();//如果报错，请它自动刷新。&#xD;
            }&#xD;
            $.require("more/random,ready,css,event",function(random){&#xD;
                //容器的CSS表达式，列数，每列的宽度&#xD;
                var Waterfall = function(expr, col, colWidth){&#xD;
                    //构建整体轮廓&#xD;
                    var container = this.container = $(expr);&#xD;
                    var pw = container.width();//容器的宽&#xD;
                    var gw = (pw - col * colWidth)/(col-1);//列间距离&#xD;
                    this.colWidth = colWidth;&#xD;
                    this.cols = [];&#xD;
                    for(var i = 0; i &amp;lt; col ; i++){//随机生成列&#xD;
                        this.cols[i] = $("&amp;lt;div class='waterfall' /&amp;gt;").css({&#xD;
                            position: "absolute",&#xD;
                            top: 0,&#xD;
                            left: (colWidth + gw) * i,&#xD;
                            width: colWidth,&#xD;
                            backgroundColor: random.hex()&#xD;
                        }).appendTo(container);&#xD;
                    }&#xD;
                }&#xD;
                Waterfall.prototype = {&#xD;
                    //添加板块&#xD;
                    addBlocks : function(){&#xD;
                        for(var i = 0; i &amp;lt; 40; i++){//随机生成40个板砖&#xD;
                            $("&amp;lt;div class='waterfall_block' /&amp;gt;").css({&#xD;
                                margin: 5,&#xD;
                                width: this.colWidth - 10 ,&#xD;
                                height: random.num(80, 300),&#xD;
                                backgroundColor: random.hex()&#xD;
                            }).appendTo( this.whichCol() );&#xD;
                        }&#xD;
                    },&#xD;
                    //计算出最短的栏栅&#xD;
                    whichCol:function(el, ret, h){&#xD;
                        for(var i = 0, shortest = 0; el = this.cols[i]; i++){&#xD;
                            h = el.height();&#xD;
                            if(i == 0){&#xD;
                                shortest = h;&#xD;
                                ret = el;&#xD;
                            }&#xD;
                            if(h &amp;lt; shortest ){&#xD;
                                shortest = h;&#xD;
                                ret = el;&#xD;
                            }&#xD;
                        }&#xD;
                        return ret;&#xD;
                    }&#xD;
                };&#xD;
&#xD;
                var waterfall = new Waterfall("body",4,300)&#xD;
                waterfall.addBlocks();&#xD;
                $(window).scroll(function(){&#xD;
                    var clientHeight = $(window).height(),&#xD;
                    scrollTop = $(window).scrollTop(),&#xD;
                    scrollHeight = $(document).height();&#xD;
                    if(clientHeight + scrollTop &amp;gt;=  scrollHeight ){&#xD;
                        waterfall.addBlocks();&#xD;
                    }&#xD;
                })&#xD;
            })&#xD;
        &amp;lt;/script&amp;gt;&#xD;
    &amp;lt;/head&amp;gt;&#xD;
    &amp;lt;body&amp;gt;&#xD;
        &amp;lt;p&amp;gt;&#xD;
            瀑布流 by 司徒正美&#xD;
        &amp;lt;/p&amp;gt;&#xD;
    &amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&#xD;
&lt;/textarea&gt; &#xD;
&#xD;
&lt;p&gt;&lt;button type="button" title="runcode1" &gt;运行代码&lt;/button&gt;&lt;/p&gt; &#xD;
&lt;p&gt;最后附上微博上对它的评论：Pinterest创造的瀑布流样式，有几个预设前提：1、图片极重要，文字不重要；2、用户浏览无明确目的，对复杂的索引无依赖性；3、图片整体美观度较高。因此恰恰适合Pinterest这样的“好图挖掘与收藏网站”。最近几个月国内跟风瀑布流，也太盲目了些。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2340115.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/02/06/2340115.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339324.html</id><title type="text">(转)HTML5 全屏 API</title><summary type="text">注：提 HTML5 只是说明他是一项新的东西，至于浏览器的 JavaScript API 应不应是 HTML5 的一个配套？我们不纠结。不如看这个接口能给我带来什么，思考可以如何给网页做个体验上的增强应用吧。一、说在前面的其实只是一个新的 JavaScript API，让 HTML 元素可以实现全屏显示。不过，这已经足够让我们兴奋。具体是怎样呢？其实这个从 iOS 和 Safari 5.0 就已经可以用在 &amp;lt;video&amp;gt; 上。看一下这个，在 iPhone 上访问 youku 上的一个视频：我们可以点击中间这个大大的放映按钮，这里 iOS 里的 safari 会把影片全屏显示，使用的</summary><published>2012-02-05T13:56:00Z</published><updated>2012-02-05T13:56:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339324.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339324.html"/><content type="html">&lt;p&gt;注：提 HTML5 只是说明他是一项新的东西，至于浏览器的 JavaScript API 应不应是 HTML5 的一个配套？我们不纠结。不如看这个接口能给我带来什么，思考可以如何给网页做个体验上的增强应用吧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、说在前面的&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实只是一个新的 JavaScript API，让 HTML 元素可以实现全屏显示。不过，这已经足够让我们兴奋。具体是怎样呢？其实这个从 iOS 和 Safari 5.0 就已经可以用在 &amp;lt;video&amp;gt; 上。看一下这个，在 iPhone 上访问 youku 上的一个视频：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="html5 fullscreen" src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_fullscreen-1.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span id="more-1959"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们可以点击中间这个大大的放映按钮，这里 iOS 里的 safari 会把影片全屏显示，使用的就是这个接口。只不过是 Safari 自己实现的接口。依然不是 W3C 标准。如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="html5 fullscreen" src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_fullscreen-2.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;二、FullScreen JavaScript API 具体使用&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1、JavaScript API&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FullScreen Javascript API 目前仍是草案，实现这个 API，更确切来说是具有这项功能的浏览器有：Chrome 15 / Firefox Nightly / Safari 5.1。对于 JS API 的前端调用，我们可以先看看下面的代码：&lt;/p&gt;&#xD;
&lt;pre &gt;// Webkit (works in Safari5.1 and Chrome 15)&#xD;
element.webkit&lt;strong&gt;&lt;span style="color: #080"&gt;Request&lt;/span&gt;&lt;/strong&gt;Full&lt;strong&gt;&lt;span style="color: rgb(51, 153, 102);"&gt;S&lt;/span&gt;&lt;/strong&gt;creen();&#xD;
document.webkit&lt;span style="color: rgb(51, 153, 102);"&gt;&lt;strong&gt;Cancel&lt;/strong&gt;&lt;/span&gt;Full&lt;span style="color: rgb(51, 153, 102);"&gt;&lt;strong&gt;S&lt;/strong&gt;&lt;/span&gt;creen(); &#xD;
&#xD;
// Firefox 10&#xD;
element.moz&lt;strong&gt;&lt;span style="color: rgb(51, 153, 102);"&gt;Request&lt;/span&gt;&lt;/strong&gt;Full&lt;strong&gt;&lt;span style="color: rgb(51, 153, 102);"&gt;S&lt;/span&gt;&lt;/strong&gt;creen();&#xD;
document.moz&lt;strong&gt;&lt;span style="color: rgb(51, 153, 102);"&gt;Cancel&lt;/span&gt;&lt;/strong&gt;Full&lt;span style="color: rgb(51, 153, 102);"&gt;&lt;strong&gt;S&lt;/strong&gt;&lt;/span&gt;creen(); &#xD;
&#xD;
// W3C 提议&#xD;
element.&lt;strong&gt;&lt;span style="color: rgb(51, 153, 102);"&gt;request&lt;/span&gt;&lt;/strong&gt;Full&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/span&gt;creen();&#xD;
document.&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;exit&lt;/span&gt;&lt;/strong&gt;Full&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/span&gt;creen();&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;只有两个方法，在需要调用全屏的元素调用 requestFullscreen() 方法，在需要退出时对 document 调用 exitFullscreen() 这个 API。问题不大，只是命名上的不同。&lt;/p&gt;&#xD;
&lt;p&gt;只是，厂商前缀，各浏览器的实现和 W3C 不一致，代码又得写得跟屎一样。我特意把不同用颜色标注出来。绿色的是相同的点，红色的是不同的点。在这一点上倒觉得 W3C 有点奇怪。好不容易 Webkit 和 Mozilla 是一致的，何必改掉命名。既然发，为什么不把 request 发成 enter 与 exit 对应？！。无论如何，至少可以实现，目前 IE 仍没有决定要不要实现这个草案，Johndyer 这样说：&amp;ldquo;I have an email from a IE team member saying they are discussing it, but have not made any decisions. &amp;rdquo; 。呃~&lt;/p&gt;&#xD;
&lt;p&gt;在这里吐槽也没什么用，我们返回正题。浏览器支持 &lt;code&gt;fullscreenchange 事件。让你可以为全屏做更多事。官方草案没有多提，只是略过，这一段来自 Johndyer 的代码，使用的是 Mozilla 的提案，具体使用还需要具体对待：&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;// Webkit-base: element.on&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;webkitfullscreenchange&lt;/strong&gt;&lt;/span&gt;&#xD;
// Firefox: element.on&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;strong&gt;mozfullscreenchange&lt;/strong&gt;&lt;/span&gt;&#xD;
&#xD;
// W3C Method:&#xD;
element.addEventListener('&lt;span style="color: rgb(51, 153, 102);"&gt;&lt;strong&gt;fullscreenchange&lt;/strong&gt;&lt;/span&gt;', function(e) {&#xD;
    if (document.fullScreen) {&#xD;
       /* make it look good for fullscreen */&#xD;
    } else {&#xD;
       /* return to the normal state in page */&#xD;
    }&#xD;
}, true);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. CSS 选择器：:fullscreen / :fullscreen-ancestor&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这两个选择器的作用是这样的：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;:fullscreen &amp;#8211; 当前全屏化的元素&lt;/li&gt;&#xD;
&lt;li&gt;:fullscreen-ancestor &amp;#8211; 所有全屏化元素的祖先元素&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;对于 :fullscreen 还是比较好理解的，但对于 fullscreen-ancestor 要选出它的全家，而不仅仅是父节点，似乎不能理解其他使用。其实，看一下官方草案提供的 Demo 代码，就知道了：可以隐藏或者什么的。但为什么不把全屏的内容设置为最高级别置顶的元素呢？这一点 W3C 的选择似乎也比较另令想吐槽。看官方 CSS Demo 代码吧：&lt;/p&gt;&#xD;
&lt;pre &gt;:fullscreen {&#xD;
  position:fixed;&#xD;
  top:0;&#xD;
  left:0;&#xD;
  right:0;&#xD;
  bottom:0;&#xD;
  z-index:2147483647;&#xD;
  background:black;&#xD;
  width:100%;&#xD;
  height:100%;&#xD;
}&#xD;
/* If there is a fullscreen element that is not the root then&#xD;
   we should hide the viewport scrollbar. */&#xD;
:fullscreen-ancestor:root {&#xD;
  overflow:hidden;&#xD;
}&#xD;
:fullscreen-ancestor {&#xD;
  /* Ancestors of a fullscreen element should not induce stacking contexts&#xD;
     that would prevent the fullscreen element from being on top. */&#xD;
  z-index:auto;&#xD;
  /* Ancestors of a fullscreen element should not be partially transparent,&#xD;
     since that would apply to the fullscreen element and make the page visible&#xD;
     behind it. It would also create a pseudo-stacking-context that would let content&#xD;
     draw on top of the fullscreen element. */&#xD;
  opacity:1;&#xD;
  /* Ancestors of a fullscreen element should not apply SVG masking, clipping, or&#xD;
     filtering, since that would affect the fullscreen element and create a pseudo-&#xD;
     stacking context. */&#xD;
  mask:none;&#xD;
  clip:none;&#xD;
  filter:none;&#xD;
  transform:none;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;3. HTML 标签属性: allowFullScreen&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;像 flash 使用的 &amp;lt;object&amp;gt; 和 &amp;lt;embed&amp;gt; 可以设置是否允许全屏，现在这个特性同样可以应用于 &amp;lt;iframe&amp;gt; 标签。只要添加 allowFullScreen 属性即可：&lt;/p&gt;&#xD;
&lt;pre &gt;&amp;lt;!-- content from another site that is allowed to use the fullscreen command --&amp;gt;&#xD;
&amp;lt;iframe width=&amp;quot;640&amp;quot; height=&amp;quot;360&amp;quot; src=&amp;quot;http://anothersite.com/video/123&amp;quot; allowfullscreen=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、解决方案&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一般来说，全屏主要应用还是在视频和游戏。当然，也可以实现像 Mac Lion 一样的全屏显示，就像 Preview.app，全屏的时候使用起来是非常爽的。游戏和视频可以使用 flash 来兼容旧的浏览器和不支持 fullScreen JavaScript API 的浏览器。像 Firefox Nightly( v10 会支持)，Chrome 15， Safari 5.1 可以使用 Johndyer 的 jQuery 插件：&lt;a href="https://gist.github.com/1354468" target="_blank"&gt;https://gist.github.com/1354468&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、总结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;目前遇到的问题可能是：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;IE 对这个功能的实现没有安排&lt;/li&gt;&#xD;
&lt;li&gt;全屏在 Mac 下是浏览器全屏还是内置实现的全屏？Chrome 实现的是 Lion 内置的全屏，而 Safari 本身实现的是浏览器自身的全屏。&lt;/li&gt;&#xD;
&lt;li&gt;安全问题，全屏下伪造一个系统登陆框？&lt;/li&gt;&#xD;
&lt;li&gt;是否所有元素都应该被全屏内容盖住？&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;似乎第 1 点和第 3 点是我们比较关注的，也需要去关注的。反而对于 API 的调用是比较简单的，不需要那么多思考。&lt;/p&gt;&#xD;
&lt;p &gt;引用 DEMO: &lt;a href="http://johndyer.name/lab/fullscreenapi/"&gt;Fullscreen JavaScript API&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;五、引用文档&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 参考事件的处理：&lt;a href="http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API"&gt;Let Your Content Do the Talking: Fullscreen API &lt;/a&gt;&lt;br /&gt;&#xD;
2. 大部分代码引用这篇文章：&lt;a href="http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/"&gt;Native Fullscreen JavaScript API (plus jQuery plugin) &lt;/a&gt;&lt;br /&gt;&#xD;
3. 历史和讨论：&lt;a href="http://www.thecssninja.com/javascript/fullscreen"&gt;Fullscreen HTML5 video &lt;/a&gt;&lt;br /&gt;&#xD;
4. 标准与厂商对比：&lt;a href="http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenenabled"&gt;W3C Draft: Fullscreen&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2339324.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339324.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339317.html</id><title type="text">(转)用CSS3移除点击交互元素的高亮背景</title><summary type="text">我在移动设备上测试前面教程的图表实例时发现，当手指点击图表出现ToolTip时，图表容器的会出现一个半透明的高亮背景。设备浏览器不一样，颜色也不一样，很是影响交互效果。试了一下用Javascript来移除，花了一天时间也没弄出来，最后不得不Google了，又花了几个小时，终于用CSS3搞定了。代码如下：-webkit-tap-highlight-color: rgba(255, 255, 255, 0);-webkit-user-select: none;-moz-user-focus: none;-moz-user-select: none;新加了禁止选择文本的功能。其中，前二句对WebKi</summary><published>2012-02-05T13:41:00Z</published><updated>2012-02-05T13:41:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339317.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339317.html"/><content type="html">&lt;p&gt;我在移动设备上测试前面教程的图表实例时发现，当手指点击图表出现ToolTip时，图表容器的会出现一个半透明的高亮背景。设备浏览器不一样，颜色也不一样，很是影响交互效果。试了一下用Javascript来移除，花了一天时间也没弄出来，最后不得不Google了，又花了几个小时，终于用CSS3搞定了。&lt;/p&gt;&#xD;
&lt;p&gt;代码如下：&lt;/p&gt;&#xD;
&lt;pre &gt;-webkit-tap-highlight-color: rgba(255, 255, 255, 0);&#xD;
-webkit-user-select: none;&#xD;
-moz-user-focus: none;&#xD;
-moz-user-select: none;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;新加了禁止选择文本的功能。其中，前二句对WebKit内核浏览器(Safari、Chrome、iPhone、iPad、Android等)有效，后二句对Gecko内核的浏览器(Firefox等)有效。&lt;/p&gt;&#xD;
&lt;p&gt;看来真该花些时间学学CSS3了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2339317.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2339317.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2338928.html</id><title type="text">新锐浏览器支持原生CustomEvent事件</title><summary type="text">在safari5, firefox6, opera1.60, chrome10？支持CustomEvent事件。 document.addEventListener(&amp;#39;ping&amp;#39;, function(ev) { alert(ev.detail[0]); }, false); var evt = document.createEvent(&amp;#39;CustomEvent&amp;#39;); evt.initCustomEvent(&amp;#39;ping&amp;#39;, false, f...</summary><published>2012-02-05T05:24:00Z</published><updated>2012-02-05T05:24:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2338928.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2338928.html"/><content type="html">&lt;p&gt;在safari5, firefox6, opera1.60, chrome10？支持CustomEvent事件。&lt;/p&gt;&#xD;
&lt;pre &gt;document.addEventListener('ping', function(ev) {&#xD;
                    alert(ev.detail[0]);&#xD;
                }, false);&#xD;
&#xD;
                var evt = document.createEvent('CustomEvent');&#xD;
                evt.initCustomEvent('ping', false, false, [30, 50 ]);&#xD;
                document.dispatchEvent(evt);&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;它会将initCustomEvent的第四个参数当作事件对象的detail属性。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2338928.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/02/05/2338928.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/02/03/2335946.html</id><title type="text">javascript题目，如何在重写alert后还能正常弹出alert</title><summary type="text">今天在群里遇到一道很有意思的题目，大家发挥所能，给出的答案五花八门。特意整理成博文发表出来：//原题目：window.alert = function(){};______;alert(1); 填空，使后面的alert(1)能正确弹出，至少列举两种不同思路。解法一，创建新的执行环境，使用iframe沙箱window.alert = function(){};window.alert=function(obj){ var iframe=document.createElement(&amp;quot;iframe&amp;quot;); iframe.src=&amp;quot;javascript:void(0);&amp;</summary><published>2012-02-03T01:21:00Z</published><updated>2012-02-03T01:21:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/03/2335946.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/02/03/2335946.html"/><content type="html">&lt;p&gt;今天在群里遇到一道很有意思的题目，大家发挥所能，给出的答案五花八门。特意整理成博文发表出来：&lt;/p&gt;&#xD;
&lt;pre &gt;//原题目：&#xD;
window.alert = function(){};______;alert(1); 填空，使后面的alert(1)能正确弹出，至少列举两种不同思路。&#xD;
&lt;/pre&gt;&#xD;
&lt;div id="answer" style="display:none;"&gt;&#xD;
&lt;p&gt;解法一，创建新的执行环境，使用iframe沙箱&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
window.alert=function(obj){&#xD;
    var iframe=document.createElement("iframe");&#xD;
    iframe.src="javascript:void(0);"&#xD;
    document.body.appendChild(iframe)&#xD;
    iframe.contentWindow.alert(obj);&#xD;
}&#xD;
alert(1)&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;解法二，创建新的执行环境，打开新窗口&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
window.alert = function(a){&#xD;
    window.open('','').alert(a)&#xD;
    //window.createPopup().document.parentWindow.alert(a) //IE only&#xD;
}&#xD;
alert(1);&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;解法三, 弄回原来的alert（IE下失败）&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
window.alert = function(a){&#xD;
    delete window.alert;&#xD;
    window.alert(a);&#xD;
}&#xD;
alert(1);&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;解法四，思路同三（IE下失败）&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
window.alert = function(a){&#xD;
   window.__proto__.alert.call(window,a);&#xD;
  //window.constructor.prototype.alert.call(window,a);&#xD;
}&#xD;
 alert(1);&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;解法五（IE only）&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
execScript('sub alert(msg):msgbox msg:end sub', 'vbscript');&#xD;
alert(1);&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;解法六，就是一晕招&lt;/p&gt;&#xD;
&lt;pre &gt;window.alert = function(){};&#xD;
window.alert = function(a){&#xD;
    window.confirm(a)&#xD;
}&#xD;
alert(1);&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;input type="button" onclick='document.getElementById("answer").style.display="block";' value="显示答案"/&gt;&lt;/p&gt;&#xD;
&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2335946.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/02/03/2335946.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/01/31/2332647.html</id><title type="text">mass Framework support模块 v2</title><summary type="text">这是统一进行各种特征检测的模块。这些检测的值，如果存在对应DOM API并且其行为与大多数标准浏览器的行为一致为true，否则为false。false值越多说明该浏览器越落后，在我的测试列表中，FF9是做得最好的，全部为true，最差的不用说是哪个吧。就算是IE9也不尽人意，我还是需要为它做N多兼容代码。webkit系的也没有想象中的好。标准化之路任重道远啊。本版本的改进:发现boxModel，inlineBlock，keepSize，cssPercentedMargin这些特征必须等到domReady后才能检测，因此做了迟时处理。一些特征进行了改名，cloneAll更名为cloneNode，</summary><published>2012-01-31T02:30:00Z</published><updated>2012-01-31T02:30:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/31/2332647.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/31/2332647.html"/><content type="html">&lt;p&gt;这是统一进行各种特征检测的模块。这些检测的值，如果存在对应DOM API并且其行为与大多数标准浏览器的行为一致为true，否则为false。false值越多说明该浏览器越落后，在我的测试列表中，FF9是做得最好的，全部为true，最差的不用说是哪个吧。就算是IE9也不尽人意，我还是需要为它做N多兼容代码。webkit系的也没有想象中的好。标准化之路任重道远啊。&lt;/p&gt;&#xD;
&lt;p&gt;本版本的改进:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;发现boxModel，inlineBlock，keepSize，cssPercentedMargin这些特征必须等到domReady后才能检测，因此做了迟时处理。&lt;/li&gt;&#xD;
&lt;li&gt;一些特征进行了改名，cloneAll更名为cloneNode，attrSelected更名为optSelected，inlineBlockNeedsLayout 更名为inlineBlock, shrinkWrapBlocks更名为keepSize。&lt;/li&gt;&#xD;
&lt;li&gt;去掉reliableHiddenOffsets，增加cssPercentedMargin,cloneHTML5,cloneChecked。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;下面是mass Framework需要嗅探的特征一览表:&lt;/p&gt;&#xD;
&#xD;
        &lt;table &gt;&#xD;
            &lt;thead&gt;&#xD;
  &lt;tr&gt;&lt;td&gt;名称&lt;/td&gt;&lt;td&gt;详明&lt;/td&gt;&lt;/tr&gt;&#xD;
            &lt;/thead&gt;&#xD;
            &lt;tbody&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;insertTbody&lt;/td&gt;&lt;td&gt;标准浏览器只有在table与tr之间不存在tbody的情况下添加tbody，而IE678则笨多了,即在里面为空也乱加tbody&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;checkOn&lt;/td&gt;&lt;td&gt;在大多数游览器中checkbox的value默认为on，唯有chrome返回空字符串&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;optSelected&lt;/td&gt;&lt;td&gt;当为select元素添加一个新option元素时，此option会被选中，但IE与早期的safari却没有这样做,需要访问一下其父元素后才能让它处于选中状态（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;optDisabled&lt;/td&gt;&lt;td&gt;判定disabled的select元素内部的option元素是否也有diabled属性，没有才是标准&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;attrHref&lt;/td&gt;&lt;td&gt;IE67无法区分href属性与特性（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;attrStyle&lt;/td&gt;&lt;td&gt;IE67是没有style特性（特性的值的类型为文本），只有el.style（CSSStyleDeclaration）(bug)&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;attrProp&lt;/td&gt;&lt;td&gt;对于一些特殊的特性，如class, for, char，IE67需要通过映射方式才能使用getAttribute才能取到值(bug)&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;cssOpacity&lt;/td&gt;&lt;td&gt;是否能正确返回opacity的样式值&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;traverseAll&lt;/td&gt;&lt;td&gt;IE678的getElementByTagName("*")无法遍历出Object元素下的param元素（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;createAll&lt;/td&gt;&lt;td&gt;IE678不能通过innerHTML生成link,style,script节点（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;cloneHTML5&lt;/td&gt;&lt;td&gt; IE6789由于无法识别HTML5的新标签，因此复制这些新元素时也不正确（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;cloneNode&lt;/td&gt;&lt;td&gt;在标准浏览器下，cloneNode(true)是不复制事件的，以防止循环引用无法释放内存，而IE却没有考虑到这一点，把事件复制了（inconformity）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;cloneChecked&lt;/td&gt;&lt;td&gt;IE6789的checkbox、radio控件在cloneNode(true)后，新元素没有继承原来的checked属性（bug）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;fastFragment&lt;/td&gt;&lt;td&gt;fastFragment 是否支持createContextualFragment API，此方法发端于FF3，因此许多浏览器不支持或实现存在BUG，但它是将字符串转换为文档碎片的最高效手段&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;inlineBlock&lt;/td&gt;&lt;td&gt;在IE678中，非替换元素在设置了大小与hasLayout的情况下，会将其父级元素撑大（inconformity）&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;cssPercentedMargin&lt;/td&gt;&lt;td&gt;getComputedStyle API是否能支持将margin的百分比原始值自动转换为像素值&lt;/td&gt;&lt;/tr&gt;&#xD;
                &lt;tr&gt;&lt;td&gt;boxModel&lt;/td&gt;&lt;td&gt;是否遵循w3c的盒子boxModel去计算元素的大小(IE存在怪异模式,inconformity)&lt;/td&gt;&lt;/tr&gt;&#xD;
&#xD;
            &lt;/tbody&gt;&#xD;
        &lt;/table&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="https://github.com/RubyLouvre/mass-Framework/blob/master/client/support.js"&gt;源码地址&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2332647.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/01/31/2332647.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/01/30/2329342.html</id><title type="text">我的模块加载系统 v15</title><summary type="text">本次改进是沿着上次的思路，让定义模块名尽量的短，然后只要保证请求时路径正确，那么它就会内部非常智能修正这个模块的名字，自动加上路径。至于这些模块叫什么名字，有什么属性，可以查看框架的系统属性@modules。尽管v14做得的改进非常人性化，但毕竟初次试水，还有许多不足与BUGs。v15就是在这方面进行了改良，原先模块名的修正逻辑是写define方法中，现在转移到一个叫innerDefine的方法中，并让其在临时生成的iframe沙箱环境中执行，确保没有改错。另外，v15，还对许多内部函数与私有属性进行更名，让其更加秀气易懂。下面是改进详情： 用于保存需要处理的模块名列表的内部数组 names </summary><published>2012-01-30T12:17:00Z</published><updated>2012-01-30T12:17:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/30/2329342.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/30/2329342.html"/><content type="html">&lt;p&gt;本次改进是沿着上次的思路，让定义模块名尽量的短，然后只要保证请求时路径正确，那么它就会内部非常智能修正这个模块的名字，自动加上路径。至于这些模块叫什么名字，有什么属性，可以查看框架的系统属性@modules。尽管v14做得的改进非常人性化，但毕竟初次试水，还有许多不足与BUGs。v15就是在这方面进行了改良，原先模块名的修正逻辑是写define方法中，现在转移到一个叫innerDefine的方法中，并让其在临时生成的iframe沙箱环境中执行，确保没有改错。另外，v15，还对许多内部函数与私有属性进行更名，让其更加秀气易懂。下面是改进详情： &lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;用于保存需要处理的模块名列表的内部数组 names 改名为 tokens（令牌集）。&lt;/li&gt;&#xD;
&lt;li&gt;相对应，原来叫name或_name的变量与属性名也改名为 token(令牌)。&lt;/li&gt;&#xD;
&lt;li&gt;用于收集各个模块的返回值的内部对象 rets  改名为 transfer(中转器)。&lt;/li&gt;&#xD;
&lt;li&gt;用于保存每个模块的信息的对象map 更名 mapper。&lt;/li&gt;&#xD;
&lt;li&gt;用于转换iframe执行环境中生成的函数的内部函数 safeEval 改名为assemble（装配）。assemble比原来的safeEval 职责更加单一，收集依赖列表对应模块的返回值，传入目标模块中执行。&lt;/li&gt;&#xD;
&#xD;
&lt;li&gt;添加innerDefine 方法，它用于处理iframe沙箱环境中通过script节点加载回来的$.define，它也相当于一个中转器，但会将其第一个参数（模块名）修正一下，加上相对路径，并且将callback重新解析为父窗口的函数实例（这相当于原来safeEval的工作），最后才交给父窗口的命名空间对象的define方法去处理。&lt;/li&gt;&#xD;
&#xD;
&#xD;
&lt;li&gt;用于创建沙箱环境加载子模块的内部方法 loadModule 更名为 load， 并且在其内部字符串拼接部分进行大重构。&lt;/li&gt;&#xD;
&lt;li&gt;用于判定某一模块的依赖列表是否都加载成功的内部函数_resolveCallbacks，更名为_checkDeps。&lt;/li&gt;&#xD;
&lt;li&gt;另外，_checkFail方法也做了些许改良，确保命名空间改名后报“找不到对象”错误。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;v15借助于innerDefine来校正模块名的思路，其实已经很好地解决了业界AMD的匿名模块难题。但mass Framework作为一个大规模开发的框架，还要考虑一下JS文件合并的情况。因此$.define的第一个参数——模块名还是保留下来。这也有出于向前兼容的考虑。&lt;/p&gt;&#xD;
&lt;p&gt;最后举个例子说明v14与v15做了什么魔术吧。在KISSY中定义一个位于另一个文件夹的JS模块，需要指定路径，来防止重名。如aaa文件夹下有个test模块，bbb文件夹下也有一个test模块。定义时是这样进行区分的：&lt;/p&gt;&#xD;
&lt;pre &gt;KISSY.add('aaa/test', function () {&#xD;
//....aaa/test略&#xD;
});&#xD;
KISSY.add('bbb/test', function () {&#xD;
//....bbb/test略&#xD;
});&#xD;
KISSY.use('aaa/test', function () {&#xD;
//....略&#xD;
});&#xD;
KISSY.use('bbb/test', function () {&#xD;
//....略&#xD;
});&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;而从mass Framework的v14开始，则可以省略路径，如果不考虑服务器合并JS文件的情况，模块名叫什么也没所谓，因为请求模块时的路径就会被innerDefine改为其“正确”的模块名！它这种特性非常有利于我们在项目对目录结构的重构。&lt;/p&gt;&#xD;
&lt;pre &gt;$.define('test', function () {&#xD;
//....aaa/test略&#xD;
});&#xD;
$.define('test', function () {&#xD;
//....bbb/test略&#xD;
});&#xD;
$.require("aaa/test",function(){&#xD;
//....略&#xD;
});&#xD;
$.require("bbb/test",function(){&#xD;
//....略&#xD;
});&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;a href="https://github.com/RubyLouvre/mass-Framework/blob/master/client/mass.js"&gt;源码地址&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;相关链接:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/12/19/2293878.html"&gt;我的模块加载系统 v14&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/11/17/2251868.html"&gt;我的模块加载系统 v13&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/10/27/2226228.html"&gt;我的模块加载系统 v12&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/10/09/2203826.html"&gt;我的模块加载系统 v11&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/09/25/2189529.html"&gt;我的模块加载系统 v10&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/08/22/2147058.html"&gt;我的模块加载系统 v9&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/08/08/2129951.html"&gt;我的模块加载系统 v8&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/08/05/2127791.html"&gt;我的模块加载系统 v7&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/07/12/2104777.html"&gt;我的模块加载系统 v6&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/04/12/2011175.html"&gt;我的模块加载系统 v5&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/03/01/1968397.html"&gt;我的模块加载系统 v4&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2011/02/11/1951104.html"&gt;我的模块加载系统 v3&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2329342.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/01/30/2329342.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/01/21/2180109.html</id><title type="text">css3 变形</title><summary type="text">CSS3从IE滤镜偷窍过来的创意，但易用性明显提高了许多。利用这个，我们可以对某个元素进行旋传，缩放，倾斜与位移，并且区分元素类型，无论对块状元素还是内联元素都有效。rotate(旋转) rotate(angle) rotate3d(x ,y ,z ,angle) rotateX(angle) 单独设定 rX 轴的角度。 rotateY(angle) 单独设定 rY 轴的角度。 rotateZ(angle) 单独设定 rZ 轴的角度。 其中angle是指旋转角度，如果设置的值为正数表示顺时针旋转，如果设置的值为负数，则表示逆时针旋...</summary><published>2012-01-21T04:54:00Z</published><updated>2012-01-21T04:54:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/21/2180109.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/21/2180109.html"/><content type="html">&lt;p&gt;CSS3从IE滤镜偷窍过来的创意，但易用性明显提高了许多。利用这个，我们可以对某个元素进行旋传，缩放，倾斜与位移，并且区分元素类型，无论对块状元素还是内联元素都有效。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;rotate(旋转)&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;rotate(angle)&lt;/li&gt;&#xD;
      &lt;li&gt;rotate3d(x ,y ,z ,angle)&lt;/li&gt;&#xD;
      &lt;li&gt;rotateX(angle) 单独设定 rX 轴的角度。&lt;/li&gt;&#xD;
      &lt;li&gt;rotateY(angle) 单独设定 rY 轴的角度。&lt;/li&gt;&#xD;
      &lt;li&gt;rotateZ(angle) 单独设定 rZ 轴的角度。&lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
&lt;p&gt;其中angle是指旋转角度，如果设置的值为正数表示顺时针旋转，如果设置的值为负数，则表示逆时针旋转。如：transform:rotate(30deg):&lt;/p&gt;&#xD;
&lt;p&gt;IE下可以使用BasicImage滤镜，但其rotate参数有个天然的缺陷只能取四个值&lt;/p&gt;&#xD;
   &lt;ul&gt;&#xD;
      &lt;li&gt;0 不旋转&lt;/li&gt;&#xD;
      &lt;li&gt;1 顺时钟旋转90度&lt;/li&gt;&#xD;
      &lt;li&gt;2 顺时钟旋转180度&lt;/li&gt;&#xD;
      &lt;li&gt;3 顺时钟旋转270度&lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/260956/o_transform_rotate.png" alt="by 司徒正美"/〉&lt;/p&gt;&#xD;
 &lt;textarea id="runcode1" style="width:80%" rows="10"&gt; &#xD;
&#xD;
&amp;lt;!DOCTYPE html&amp;gt;&#xD;
&amp;lt;html&amp;gt;&#xD;
  &amp;lt;head&amp;gt;&#xD;
    &amp;lt;meta charset="utf-8"&amp;gt;&#xD;
    &amp;lt;title&amp;gt;dom Framework by 司徒正美&amp;lt;/title&amp;gt;&#xD;
    &amp;lt;style&amp;gt;&#xD;
      .box{&#xD;
        width:200px;&#xD;
        height: 200px;&#xD;
        background: red;&#xD;
&#xD;
        -webkit-transform: rotate(45deg);&#xD;
        -moz-transform: rotate(45deg);&#xD;
        -o-transform: rotate(45deg);&#xD;
        filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);&#xD;
        -ms-filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);&#xD;
      }&#xD;
    &amp;lt;/style&amp;gt;&#xD;
  &amp;lt;/head&amp;gt;&#xD;
  &amp;lt;body&amp;gt;&#xD;
    &amp;lt;h3&amp;gt;CSS3 transfrom rorate旋转 by 司徒正美&amp;lt;/h3&amp;gt;&#xD;
&#xD;
    &amp;lt;div &amp;gt;&#xD;
      测试&#xD;
    &amp;lt;/div&amp;gt;&#xD;
  &amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&#xD;
    &lt;/textarea&gt; &#xD;
&#xD;
&lt;p&gt;&lt;button type="button" title="runcode2" &gt;运行代码&lt;/button&gt;&lt;/p&gt; &#xD;
&lt;p&gt;这时我们就要动用万能的矩阵滤镜了DXImageTransform.Microsoft.Matrix。&lt;p&gt;&lt;pre &gt;//在IE旋转任意角度 by 司徒正美&#xD;
      function rorateIt(node,deg){&#xD;
        //取得末变形前矩形的中点&#xD;
        var rect = node.getBoundingClientRect(),&#xD;
        cx1 = (rect.right  - rect.left) / 2, // center x&#xD;
        cy1 = (rect.bottom - rect.top)  / 2, // center y&#xD;
        deg2rad =  Math.PI / 180,//角度转弧度&#xD;
        rad = deg * deg2rad ,&#xD;
        cos = Math.cos(rad),&#xD;
        sin = Math.sin(rad);&#xD;
        var ident  = "DXImageTransform.Microsoft.Matrix";&#xD;
        node.style.filter = "progid:"+ident +"(M11='1.0',sizingmethod='auto expand')";&#xD;
        //http://www.satzansatz.de/cssd/onhavinglayout.html&#xD;
        if(!node.currentStyle.hasLayout){//在IE7中，如果没有获得hasLayout，滤镜会失效&#xD;
          node.style.writingMode  = "tb-rl";&#xD;
        }   &#xD;
        var filter = node.filters.item(ident);&#xD;
        //  +-------+-------+&#xD;
        //  |  M11  |  M12  |&#xD;
        //  +-------+-------+&#xD;
        //  |  M21  |  M22  |&#xD;
        //  +-------+-------+&#xD;
        filter.M11 = cos;          &#xD;
        filter.M12 = -sin;         &#xD;
        filter.M21 = sin;           &#xD;
        filter.M22 = cos;          &#xD;
        //取得当前中心&#xD;
        rect = node.getBoundingClientRect();&#xD;
        var cx = (rect.right  - rect.left) / 2;&#xD;
        var cy = (rect.bottom - rect.top)  / 2;&#xD;
        //调整此元素的坐标系，实现CSS3 transform-origin的功能&#xD;
        node.style.marginLeft = cx1 - cx + "px";&#xD;
        node.style.marginTop  = cy1 - cy + "px";&#xD;
   &#xD;
      }&#xD;
&lt;/pre&gt;&#xD;
&lt;textarea id="runcode2" style="width:80%" rows="10"&gt; &#xD;
&#xD;
&amp;lt;!DOCTYPE html&amp;gt;&#xD;
&amp;lt;html&amp;gt;&#xD;
  &amp;lt;head&amp;gt;&#xD;
    &amp;lt;meta charset="utf-8"&amp;gt;&#xD;
    &amp;lt;title&amp;gt;dom Framework by 司徒正美&amp;lt;/title&amp;gt;&#xD;
    &amp;lt;script&amp;gt;&#xD;
      function rorateIt(node,deg){&#xD;
        //取得末变形前矩形的中点&#xD;
        var rect = node.getBoundingClientRect(),&#xD;
        cx1 = (rect.right  - rect.left) / 2, // center x&#xD;
        cy1 = (rect.bottom - rect.top)  / 2, // center y&#xD;
        deg2rad =  Math.PI / 180,//角度转弧度&#xD;
        rad = deg * deg2rad ,&#xD;
        cos = Math.cos(rad),&#xD;
        sin = Math.sin(rad);&#xD;
        var ident  = "DXImageTransform.Microsoft.Matrix";&#xD;
        node.style.filter = "progid:"+ident +"(M11='1.0',sizingmethod='auto expand')";&#xD;
        //http://www.satzansatz.de/cssd/onhavinglayout.html&#xD;
        if(!node.currentStyle.hasLayout){//在IE7中，如果没有获得hasLayout，滤镜会失效&#xD;
          node.style.writingMode  = "tb-rl";&#xD;
        }   &#xD;
        var filter = node.filters.item(ident);&#xD;
        //  +-------+-------+&#xD;
        //  |  M11  |  M12  |&#xD;
        //  +-------+-------+&#xD;
        //  |  M21  |  M22  |&#xD;
        //  +-------+-------+&#xD;
        filter.M11 = cos;          &#xD;
        filter.M12 = -sin;         &#xD;
        filter.M21 = sin;           &#xD;
        filter.M22 = cos;          &#xD;
        //取得当前中心&#xD;
        rect = node.getBoundingClientRect();&#xD;
        var cx = (rect.right  - rect.left) / 2;&#xD;
        var cy = (rect.bottom - rect.top)  / 2;&#xD;
        //调整此元素的坐标系，实现CSS3 transform-origin的功能&#xD;
        node.style.marginLeft = cx1 - cx + "px";&#xD;
        node.style.marginTop  = cy1 - cy + "px";&#xD;
   &#xD;
      }&#xD;
    &amp;lt;/script&amp;gt;&#xD;
    &amp;lt;style&amp;gt;&#xD;
      .box{&#xD;
        width:200px;&#xD;
        height: 200px;&#xD;
        background: red;&#xD;
&#xD;
        -webkit-transform: rotate(45deg);&#xD;
        -moz-transform: rotate(45deg);&#xD;
        -o-transform: rotate(45deg);&#xD;
      }&#xD;
    &amp;lt;/style&amp;gt;&#xD;
  &amp;lt;/head&amp;gt;&#xD;
  &amp;lt;body&amp;gt;&#xD;
    &amp;lt;h3&amp;gt;CSS3 transfrom rorate旋转 v2 by 司徒正美&amp;lt;/h3&amp;gt;&#xD;
    &amp;lt;div  onclick="rorateIt(this,45);rorateIt=function(){}"&amp;gt;&#xD;
      IE中请点一下&#xD;
    &amp;lt;/div&amp;gt;&#xD;
  &amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&#xD;
    &lt;/textarea&gt; &#xD;
&#xD;
&lt;p&gt;&lt;button type="button" title="runcode2" &gt;运行代码&lt;/button&gt;&lt;/p&gt; &#xD;
&#xD;
    &lt;p&gt;&lt;strong&gt;scale(缩放)&lt;/strong&gt;&lt;/p&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;scale(x,y) 设定 X 轴与 Y 轴的缩放量。&lt;/li&gt;&#xD;
      &lt;li&gt;scale3d(z) 设定 X 轴、Y 轴与 Z 轴的缩放量。&lt;/li&gt;&#xD;
      &lt;li&gt;scaleX(x) 单独设定 X 轴的缩放量。&lt;/li&gt;&#xD;
      &lt;li&gt;scaleY(y) 单独设定 Y 轴的缩放量。&lt;/li&gt;&#xD;
      &lt;li&gt;scaleZ(z) 单独设定 Z 轴的缩放量。&lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
&lt;p&gt;在IE下，我们可以使用zoom对元素按比例缩放，如果是图片我们还可以使用DXImageTransform.Microsoft.AlphaImageLoader&lt;/p&gt;&#xD;
&lt;textarea id="runcode3" style="width:80%" rows="10"&gt; &#xD;
&#xD;
&amp;lt;!DOCTYPE html&amp;gt;&#xD;
&amp;lt;html&amp;gt;&#xD;
  &amp;lt;head&amp;gt;&#xD;
    &amp;lt;meta charset="utf-8"&amp;gt;&#xD;
    &amp;lt;title&amp;gt;dom Framework by 司徒正美&amp;lt;/title&amp;gt;&#xD;
    &amp;lt;script&amp;gt;&#xD;
      function scaleIt(node,scaleX,scaleY){&#xD;
        //取得末变形前矩形的中点&#xD;
        var rect = node.getBoundingClientRect(),&#xD;
        cx1 = (rect.right  - rect.left) / 2, // center x&#xD;
        cy1 = (rect.bottom - rect.top)  / 2, // center y&#xD;
        deg2rad =  Math.PI / 180,//角度转弧度&#xD;
        deg = 0,scaleX = scaleX || 1,scaleY = scaleY || 1,&#xD;
        rad = deg * deg2rad ,&#xD;
        cos = Math.cos(rad),&#xD;
        sin = Math.sin(rad);&#xD;
        var ident  = "DXImageTransform.Microsoft.Matrix";&#xD;
        node.style.filter = "progid:"+ident +"(M11='1.0',sizingmethod='auto expand')";&#xD;
        //http://www.satzansatz.de/cssd/onhavinglayout.html&#xD;
        if(!node.currentStyle.hasLayout){//在IE7中，如果没有获得hasLayout，滤镜会失效&#xD;
          node.style.writingMode  = "tb-rl";&#xD;
        }   &#xD;
        var filter = node.filters.item(ident);&#xD;
        //  +-------+-------+&#xD;
        //  |  M11  |  M12  |&#xD;
        //  +-------+-------+&#xD;
        //  |  M21  |  M22  |&#xD;
        //  +-------+-------+&#xD;
        filter.M11 = cos * scaleX;          &#xD;
        filter.M12 = -sin * scaleY;         &#xD;
        filter.M21 = sin * scaleX;           &#xD;
        filter.M22 = cos * scaleY;          &#xD;
        //取得当前中心&#xD;
        rect = node.getBoundingClientRect();&#xD;
        var cx = (rect.right  - rect.left) / 2;&#xD;
        var cy = (rect.bottom - rect.top)  / 2;&#xD;
        //调整此元素的坐标系，实现CSS3 transform-origin的功能&#xD;
        //  node.style.marginLeft = cx1 - cx + "px";&#xD;
        //  node.style.marginTop  = cy1 - cy + "px";&#xD;
   &#xD;
      }&#xD;
      window.onload = function(){&#xD;
        if(window.VBArray){&#xD;
          var dom = function(id){&#xD;
            return document.getElementById(id)&#xD;
          }&#xD;
          scaleIt(dom("box1"),2,2)&#xD;
          scaleIt(dom("box2"),2,1)&#xD;
          scaleIt(dom("box3"),-2,1)&#xD;
        }&#xD;
      }&#xD;
    &amp;lt;/script&amp;gt;&#xD;
    &amp;lt;style&amp;gt;&#xD;
      .box{&#xD;
        width:40px;&#xD;
        height: 40px;&#xD;
        background: red;&#xD;
        border: 1px solid green;&#xD;
        margin: 40px;&#xD;
      }&#xD;
&#xD;
      #box1{&#xD;
        /* box1元素的宽和高都会被放大双倍 */&#xD;
        -webkit-transform: scale(2);&#xD;
        -moz-transform: scale(2);&#xD;
      }&#xD;
&#xD;
      #box2 {&#xD;
        /* box2元素的宽会是双倍，而高度保持不变 */ &#xD;
        -webkit-transform: scale(2, 1); &#xD;
        -moz-transform: scale(2, 1);&#xD;
      }&#xD;
      #box3 {&#xD;
        /* box3的宽度将是双倍，并且水平翻转，但是高度保持不变 */ &#xD;
        -webkit-transform: scale(-2, 1); &#xD;
        -moz-transform: scale(-2, 1); &#xD;
      }&#xD;
    &amp;lt;/style&amp;gt;&#xD;
  &amp;lt;/head&amp;gt;&#xD;
  &amp;lt;body&amp;gt;&#xD;
    &amp;lt;h3&amp;gt;CSS3 transfrom rorate缩放 by 司徒正美&amp;lt;/h3&amp;gt;&#xD;
    &amp;lt;div  id="box1" &amp;gt;&#xD;
      box1&#xD;
    &amp;lt;/div&amp;gt;&#xD;
    &amp;lt;div  id="box2" &amp;gt;&#xD;
      box1&#xD;
    &amp;lt;/div&amp;gt;&#xD;
    &amp;lt;div  id="box3" &amp;gt;&#xD;
      box1&#xD;
    &amp;lt;/div&amp;gt;&#xD;
&#xD;
&#xD;
  &amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&#xD;
    &lt;/textarea&gt; &#xD;
&#xD;
&lt;p&gt;&lt;button type="button" title="runcode3" &gt;运行代码&lt;/button&gt;&lt;/p&gt; &#xD;
 &lt;p&gt;&lt;strong&gt;translate(位移)&lt;/strong&gt;&lt;/p&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;translate(x,y) 设定 X 轴与 Y 轴的偏移量。&lt;/li&gt;&#xD;
      &lt;li&gt;translate3d(x,y,z) 设定 X 轴、Y 轴与 Z 轴的偏移量。&lt;/li&gt;&#xD;
      &lt;li&gt;translateX(x) 单独设定 X 轴的偏移量。&lt;/li&gt;&#xD;
      &lt;li&gt;translateY(y) 单独设定 Y 轴的偏移量。&lt;/li&gt;&#xD;
      &lt;li&gt;translateZ(z) 单独设定 Z 轴的偏移量。&lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
&lt;p&gt;这相当CSS2.1时原有的相对定位。&lt;/p&gt;&#xD;
&lt;textarea id="runcode4" style="width:80%" rows="10"&gt; &#xD;
&#xD;
&amp;lt;!DOCTYPE html&amp;gt;&#xD;
&amp;lt;html&amp;gt;&#xD;
  &amp;lt;head&amp;gt;&#xD;
    &amp;lt;meta charset="utf-8"&amp;gt;&#xD;
    &amp;lt;title&amp;gt;dom Framework by 司徒正美&amp;lt;/title&amp;gt;&#xD;
    &amp;lt;script&amp;gt;&#xD;
   &#xD;
    &amp;lt;/script&amp;gt;&#xD;
    &amp;lt;style&amp;gt;&#xD;
      .box,.clone{&#xD;
        width:200px;&#xD;
        height: 200px;&#xD;
        border: 1px solid green;&#xD;
        margin: 40px;&#xD;
      }&#xD;
      .box{&#xD;
        position: relative;&#xD;
        background: red;&#xD;
      }&#xD;
      .clone{&#xD;
        position: absolute;&#xD;
        background: blue;&#xD;
        z-index: 10;&#xD;
        /* 这会将nav元素向左移动10像素并向下移动20像素 */&#xD;
        -moz-transform: translate(10px, 20px);&#xD;
        -webkit-transform: translate(10px, 20px); &#xD;
      }&#xD;
    &amp;lt;/style&amp;gt;&#xD;
  &amp;lt;/head&amp;gt;&#xD;
  &amp;lt;body&amp;gt;&#xD;
    &amp;lt;h3&amp;gt;CSS3 transfrom translate位移 by 司徒正美&amp;lt;/h3&amp;gt;&#xD;
    &amp;lt;div  id="box1" &amp;gt;&#xD;
      box1&#xD;
      &amp;lt;div &amp;gt;&#xD;
&#xD;
      &amp;lt;/div &amp;gt;&#xD;
    &amp;lt;/div&amp;gt;&#xD;
    &#xD;
&#xD;
  &amp;lt;/body&amp;gt;&#xD;
&amp;lt;/html&amp;gt;&#xD;
&#xD;
    &lt;/textarea&gt; &#xD;
&#xD;
&lt;p&gt;&lt;button type="button" title="runcode4" &gt;运行代码&lt;/button&gt;&lt;/p&gt; &#xD;
&lt;p&gt;参考&lt;/p&gt;&#xD;
&lt;pre&gt;http://blog.hinablue.me/entry/CSS3-note-css3-transform-matrix-note&#xD;
http://blog.beyes.tw/500&#xD;
http://jquery.org.cn/css/css3preview/Transform.html&#xD;
http://www.useragentman.com/IETransformsTranslator/&#xD;
https://github.com/heygrady/transform&#xD;
&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2180109.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/01/21/2180109.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/01/20/2322895.html</id><title type="text">Windows 上使用 Github</title><summary type="text">安装使用 1.下载msysgit http://code.google.com/p/msysgit/ 2.下载tortoisegit客户端安装 http://code.google.com/p/tortoisegit/ 最新版TortoiseGit好像已经包含了Puttygen项目（用于生成SSH密钥的）如果自己没有github，则先到上面注册个帐号，然后搞个项目。这些都很简单，不详述。然后在window的开始菜单找到TortoiseGit，然后打开里面的Puttygen，点击生成按钮，最大的那个文本区就显示公钥，然后复制这些内容，打开Github中Account Setting页面里的SS.</summary><published>2012-01-20T06:05:00Z</published><updated>2012-01-20T06:05:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/20/2322895.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/20/2322895.html"/><content type="html">&lt;p&gt;安装使用 &lt;/p&gt;&#xD;
&lt;p&gt;1.下载msysgit &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://code.google.com/p/msysgit/"&gt;http://code.google.com/p/msysgit/ &lt;/a&gt;&lt;/p&gt; &#xD;
&lt;p&gt;2.下载tortoisegit客户端安装&lt;/p&gt; &#xD;
&lt;p&gt;&lt;a href="http://code.google.com/p/tortoisegit/"&gt;http://code.google.com/p/tortoisegit/&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;最新版TortoiseGit好像已经包含了Puttygen项目（用于生成SSH密钥的）&lt;/p&gt;&#xD;
&lt;p&gt;如果自己没有github，则先到上面注册个帐号，然后搞个项目。这些都很简单，不详述。&lt;/p&gt;&#xD;
&lt;p&gt;然后在window的开始菜单找到TortoiseGit，然后打开里面的Puttygen，点击生成按钮，最大的那个文本区就显示公钥，然后复制这些内容，打开Github中Account Setting页面里的SSH Public Key 选项卡，选择 Add another public key ，将刚才复制的公钥复制进去，随便起个名字，提交；&lt;/p&gt;&#xD;
&lt;p&gt;再点击Puttygen下方“保存私钥”的按钮，随便改个名字保存到本地，然后在TortoiseGit目录中找到Pageant，将刚才私钥文件提交上去。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在Github的 Dashboard 页面的 Your Repositories 栏目下可以找到自己创建的那个项目，点击进去。能得到该项目的 Git 地址，比如我创建的 /mass-Framework 地址就是：&lt;/p&gt;&#xD;
&lt;pre &gt;git@github.com:RubyLouvre/mass-Framework.git&#xD;
&lt;/pre&gt;&#xD;
&lt;center&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/199042/o_github.jpg" /&gt;&lt;/center&gt;&#xD;
&lt;p&gt;找到你要放置项目的地方，右键选择 Git Clone , Url 处填入刚才那个地址，点击 “OK” ，项目就应该在本地成功建立了。&lt;/p&gt;&#xD;
&lt;p&gt;相关链接&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://interjc.net/archives/2011/09/05/using-github-on-windows.html&lt;br/&gt;"&gt;http://interjc.net/archives/2011/09/05/using-github-on-windows.html&lt;br/&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://software.krimnet.com/windows-xp/command-line-less-github-with-windows-fully-gui-github-quick-start-guide.htm&lt;br/&gt;"&gt;http://software.krimnet.com/windows-xp/command-line-less-github-with-windows-fully-gui-github-quick-start-guide.htm&lt;br/&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2322895.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/01/20/2322895.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rubylouvre/archive/2012/01/18/2325443.html</id><title type="text">（转）透彻理解块级元素的宽度</title><summary type="text">作者按：又翻出来一篇5年前（2006年12月28日）写的关于盒模型的文章，都不知道参考了哪本书了。只能凭印象感谢 Eric Meyer 的《CSS权威指南（第2版）》（The Definitive Guide, 2nd Edition）——因为当时作为练习刚翻译完这本书。 内容提要 透彻掌握CSS可视化模型的原理，可以让我们准确判断某个意外行为到底是因为CSS样式问题，还是CSS解析引擎问题。本文要讨论的要点是，当margin-left、width和margin-right这三个属性分别取auto值或大于0的值，进而形成不同组合的情况下，如何确定块级元素中各个组成部分的宽度。块级元素和行...</summary><published>2012-01-18T05:25:00Z</published><updated>2012-01-18T05:25:00Z</updated><author><name>司徒正美</name><uri>http://www.cnblogs.com/rubylouvre/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/18/2325443.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rubylouvre/archive/2012/01/18/2325443.html"/><content type="html"> &lt;p&gt;&lt;strong&gt;作者按：&lt;/strong&gt;又翻出来一篇5年前（2006年12月28日）写的关于盒模型的文章，都不知道参考了哪本书了。只能凭印象感谢 Eric Meyer 的《CSS权威指南（第2版）》（&lt;em&gt;The Definitive Guide, 2nd Edition&lt;/em&gt;）——因为当时作为练习刚翻译完这本书。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
  &lt;p&gt;&lt;strong&gt;内容提要&lt;/strong&gt;&lt;br/&gt;&#xD;
  透彻掌握CSS可视化模型的原理，可以让我们准确判断某个意外行为到底是因为CSS样式问题，还是CSS解析引擎问题。本文要讨论的要点是，当&lt;code&gt;margin-left&lt;/code&gt;、&lt;code&gt;width&lt;/code&gt;和&lt;code&gt;margin-right&lt;/code&gt;这三个属性分别取auto值或大于0的值，进而形成不同组合的情况下，如何确定块级元素中各个组成部分的宽度。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;块级元素和行内元素&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;CSS把处在正常文档流中的不同html元素区分为块级元素（block element）和行内元素（inline element）。一般来说，所谓块级元素就是指当它们显示在浏览器中时，会在自身前后各插入一个空行，而使自身在页面中占据一个相对独立的块状区域的元素。因此，HTML文档中连续的块级元素的典型显示方式就是“堆叠”。块级元素的例子有&lt;code&gt;h1&lt;/code&gt;到&lt;code&gt;h6&lt;/code&gt;、&lt;code&gt;div&lt;/code&gt;、&lt;code&gt;p&lt;/code&gt;等。而行内元素则是指以自身所包含的内容决定在页面中占据空间的大小，并且可以与其他行内元素共处一行的元素。行内元素的典型显示方式就是“连接”。行内元素的例子有&lt;code&gt;a&lt;/code&gt;、&lt;code&gt;img&lt;/code&gt;、&lt;code&gt;span&lt;/code&gt;、&lt;code&gt;input&lt;/code&gt;等。对于行内元素，又可以进一步分为可替换行内元素和不可替换行内元素，两者的区别在于元素中所包含的内容是否直接显示在页面中。不可替换的行内元素，如&lt;code&gt;a&lt;/code&gt;元素中的链接文本会直接显示在网页中；而可替换的行内元素，如&lt;code&gt;img&lt;/code&gt;，当它在网页中显示时会被其&lt;code&gt;src&lt;/code&gt;属性指向的图像替代。本文讨论的是块级元素，有关行内元素的更多内容请参考其他资料。&lt;/p&gt;&#xD;
&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
  &lt;p&gt;&lt;strong&gt;正常文档流&lt;/strong&gt;&lt;br/&gt;&#xD;
  指的是HTML文档元素在进行内容布局时所遵循的从左到右、从上到下的表现方式。这种文档流布局的方式对于某些语言可能会有所不同（比如从右往左阅读的语言）。HTML中的大多数元素都处在正常的文档流中，而一个元素要脱离正常流的唯一途径就是浮动或定位。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;块级元素的宽度&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;块级元素的宽度是指块级元素内容区、左右内边距、左右边框和左右外边距的宽度之和。而块级元素内容区的宽度由该元素的&lt;code&gt;width&lt;/code&gt;属性来表示（或设置）。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/345658/o_layout1.gif" alt="enter image description here"/&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;图1简单的盒模型示意图&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;有一个简单的规则，就是块级元素的宽度总是等于其父元素内容区的宽度。如果一个&lt;code&gt;div&lt;/code&gt;元素的父元素是&lt;code&gt;body&lt;/code&gt;，那么这个&lt;code&gt;div&lt;/code&gt;元素的宽度就等于body的宽度，也就是浏览器中窗口的宽度。一个处在正常文档流中的块级元素，其宽度是由七个部分共同决定的。可以称为块级元素的水平“七属性”，它们分别是：&lt;/p&gt;&#xD;
&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;code&gt;margin-left&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;border-left&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;padding-left&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;width&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;padding-right&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;border-right&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;margin-right&lt;/code&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/345658/o_layout2.gif" alt="enter image description here"/&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;图2 块级元素的水平“七属性”&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如图2所示，块级元素在水平方向上的宽度是由七个CSS属性共同决定的。例如，一个div元素中包含一个p元素。而&lt;code&gt;div&lt;/code&gt;元素的宽度是500px，那么这个&lt;code&gt;p&lt;/code&gt;元素内容区的宽度（&lt;code&gt;width&lt;/code&gt;）加上其左右内边距、左右边框和左右外边距之和就等于500px。这个计算过程用公式表示，就是：&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;&lt;code&gt;margin-left + &#xD;
border-left + &#xD;
padding-left + &#xD;
width + &#xD;
padding-right + &#xD;
border-right + &#xD;
margin-right &#xD;
= 500px&#xD;
&lt;/code&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;自动水平属性如何决定块级元素的宽度&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在块级元素的水平七属性中，只有三个属性可以使用&lt;code&gt;auto&lt;/code&gt;（自动）值，如图3所示。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/345658/o_layout3.gif" alt="enter image description here"/&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;图3  可以取&lt;code&gt;auto&lt;/code&gt;值的水平属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;也就是说，只有&lt;code&gt;margin-left&lt;/code&gt;、&lt;code&gt;width&lt;/code&gt;和&lt;code&gt;margin-right&lt;/code&gt;这三个属性可以使用auto值。这正是本文要讨论的核心问题，即在上述三个属性分别取不同的auto值和长度值，形成不同组合的情况下，相应块级元素盒子中各部分的宽度是如何确定的？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在掌握了各种组合的可能性和相应结果的基础上，我们就可以在遇到意外的情况时，对到底是CSS样式的问题，还是CSS解析引擎的问题作出正确的判断。并根据判断来决定是修改CSS样式、向浏览器提供商报告bug，还是采取过滤或hack手段来解决问题。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;现在举例子说明，假设有如下简单的html代码：&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;&#xD;
    &amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&#xD;
&amp;lt;/div&amp;gt;&#xD;
&lt;/code&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;而相应有8种可能的CSS规则：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;1. p { margin-left:auto;width:auto;margin-right:auto; }&#xD;
2. p { margin-left:50px;width:auto;margin-right:auto; }&#xD;
3. p { margin-left:auto;width:auto;margin-right:50px; }&#xD;
4. p { margin-left:50px;width:auto;margin-right:50px; }&#xD;
5. p { margin-left:auto;width:200px;margin-right:auto; }&#xD;
6. p { margin-left:50px;width:200px;margin-right:auto; }&#xD;
7. p { margin-left:auto;width:200px;margin-right:50px; }&#xD;
8. p { margin-left:50px;width:200px;margin-right:50px; }&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;将这8种可能的CSS规则应用到上面的标记以后，会得到如图3所示的结果（图中为父元素&lt;code&gt;div&lt;/code&gt;添加了边框，而为了表示内容区的宽度，也为&lt;code&gt;p&lt;/code&gt;元素添加了背景）。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/345658/o_layout4.gif" alt="enter image description here"/&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;图4 自动宽度的8种可能性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;下面，我们就来逐一分析这8种情况：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第一种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:auto;width:auto;margin-right:auto; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;即，三个属性全都取&lt;code&gt;auto&lt;/code&gt;值。如图3所示，结果是&lt;code&gt;p&lt;/code&gt;元素的内容区的宽度和父元素&lt;code&gt;div&lt;/code&gt;的宽度相等。根据前面的公式（此例未考虑左右边框和内边距，假设它们全取默认值0）我们知道，此时的&lt;code&gt;margin-left:auto&lt;/code&gt;和&lt;code&gt;margin-right:auto&lt;/code&gt;等同于&lt;code&gt;margin-left:0&lt;/code&gt;和&lt;code&gt;margin-right:0&lt;/code&gt;。或者说此时的左右外边距都等于0。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第二种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:50px;width:auto;margin-right:auto; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;即，把左外边距明确设置为50像素，&lt;code&gt;width&lt;/code&gt;和&lt;code&gt;margin-right&lt;/code&gt;的值仍然是&lt;code&gt;auto&lt;/code&gt;。如图3所示，结果是&lt;code&gt;p&lt;/code&gt;元素的内容区宽度等于&lt;code&gt;div&lt;/code&gt;元素的宽度减去50像素。也就是说，此时左外边距是50像素，而&lt;code&gt;margin-right:auto&lt;/code&gt;相当于&lt;code&gt;margin-right:0&lt;/code&gt;，即右外边距为0。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第三种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:auto;width:auto;margin-right:50px; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;与第二种情况类似，只不过是把右外边距而不是左外边距明确设置为50像素。图3所示的结果告诉我们，此时右外边距是50像素，而左外边距为0。&lt;br/&gt;&#xD;
（以上三种情况，值为auto的外边距都被重置为默认值0）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第四种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:50px;width:auto;margin-right:50px; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这次是把左、右外边距都明确地设置为50像素，而只有&lt;code&gt;width&lt;/code&gt;属性是&lt;code&gt;auto&lt;/code&gt;。如图3所示，结果是&lt;code&gt;p&lt;/code&gt;元素内容区的宽度等于&lt;code&gt;div&lt;/code&gt;的宽度减去（50+50=）100像素。也就是说，50像素的左、右外边距是有效的。&lt;code&gt;p&lt;/code&gt;元素内容区在左右外边距之间以自动适应的宽度值补足了&lt;code&gt;div&lt;/code&gt;元素的宽度。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第五种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:auto;width:200px;margin-right:auto; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这次把左、右外边距都设置为&lt;code&gt;auto&lt;/code&gt;，而把&lt;code&gt;width&lt;/code&gt;明确地设置为200像素。如图3所示，结果是&lt;code&gt;p&lt;/code&gt;元素的内容区宽度就是设置的200像素，而且，由于左右外边距同为&lt;code&gt;auto&lt;/code&gt;，使得&lt;code&gt;p&lt;/code&gt;元素在&lt;code&gt;div&lt;/code&gt;元素中水平居中。这种情况也是网页布局中最常用的居中块级元素居的主要手段。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第六种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:50px;width:200px;margin-right:auto; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这次&lt;code&gt;margin-left&lt;/code&gt;和&lt;code&gt;width&lt;/code&gt;分别明确设置成了50px和200px，只有右外边距的值是&lt;code&gt;auto&lt;/code&gt;。从图3中可以看到，结果是&lt;code&gt;p&lt;/code&gt;元素的内容区就是设置的200像素，而左外边距也是设置的50像素。但右外边距此时在前两个部分之后以自动适应的宽度值补足了&lt;code&gt;div&lt;/code&gt;元素的宽度。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第七种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:auto;width:200px;margin-right:50px; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;与第六种情况相似，但这次是左外边距在后两个部分之前以自动适应的宽度值补足了&lt;code&gt;div&lt;/code&gt;元素的宽度。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;第八种情况：&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;规则是 &lt;code&gt;p { margin-left:50px;width:200px;margin-right:50px; }&lt;/code&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这是一种典型的情况，即三个属性都明确地设置相应的值。从图3的结果中我们看到，只有左外边距和&lt;code&gt;p&lt;/code&gt;元素内容区的宽度是设置的值。右外边距虽然也明确设置了50像素的值，但实际情况就像是使用了&lt;code&gt;auto&lt;/code&gt;的第六种情况一样。实际上，在三个属性都明确设置了值，但其中一个值在没有解的情况下－－即在不能满足三者之和等于&lt;code&gt;div&lt;/code&gt;元素宽度的情况下－－在从左往右阅读的语言中，会把右外边距重置为自动适应的宽度值，也就是&lt;code&gt;auto&lt;/code&gt;。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;通过对以上8种可能情况的逐一分析，我们可以得出如下结论：&lt;/p&gt;&#xD;
&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;在&lt;code&gt;width&lt;/code&gt;属性的值设置成&lt;code&gt;auto&lt;/code&gt;的情况下，块级元素内容区的宽度取决于左右外边距是否明确设置了值。如果左右外边距值都是&lt;code&gt;auto&lt;/code&gt;，则左右外边距的值都会被重置为默认的值0；如果左右外边距中只有一个值是&lt;code&gt;auto&lt;/code&gt;，则该值被重置为0，另一个值有效；如果左右外边距都设置了明确的值，两个值都将有效，此时元素内容区的宽度就是父元素的宽度减去左右外边距后的值。需要说明的是，左右外边距的默认值是0，这意味着如果没有在CSS规则中声明&lt;code&gt;margin-left&lt;/code&gt;或者&lt;code&gt;margin-right&lt;/code&gt;，它们就会使用默认值0。&lt;/li&gt;&#xD;
&lt;li&gt;在&lt;code&gt;width&lt;/code&gt;属性的值设置为大于0的值的情况下，块级元素内容区的宽度就是由&lt;code&gt;width&lt;/code&gt;属性设置的值。此时，左右外边距的值如果都是&lt;code&gt;auto&lt;/code&gt;，则会使块级元素在其父元素中居中；如果左右外边距中只有一个值是&lt;code&gt;auto&lt;/code&gt;，则明确设置的值有效，&lt;code&gt;auto&lt;/code&gt;值会自动适应剩余的宽度；如果左右外边距都设置了明确的值，那么在从左往右阅读的语言中，会把右外边距的值重置为&lt;code&gt;auto&lt;/code&gt;。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
  &lt;p&gt;&lt;strong&gt;（注：本文所说“设置明确的值”，是指设置了大于0的值）&lt;/strong&gt;&lt;/p&gt;&#xD;
  &#xD;
  &lt;p&gt;以下是今天（2012年1月17日）在Chrome中做的一个测试的截图。&lt;br/&gt;&#xD;
  &lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/345658/o_layout5.png" alt="enter image description here"/&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&#xD;
&lt;img src="http://www.cnblogs.com/rubylouvre/aggbug/2325443.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rubylouvre/archive/2012/01/18/2325443.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
