<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>飞鱼 ^_^ 浆抱罗斯‘s blog &#187; 代码浅谈</title>
	<atom:link href="http://qilei.org/category/webskill/feed/" rel="self" type="application/rss+xml" />
	<link>http://qilei.org</link>
	<description>这里是一个非专业交互设计师 - 飞鱼 的blog。飞鱼的生活就像吃一盘螺丝, 你得努力吸才能品尝到快乐^_^</description>
	<lastBuildDate>Thu, 02 Feb 2012 03:07:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>vertical-align 图片文字水平对齐分析</title>
		<link>http://qilei.org/201109/vertical-align-in-different-browser/</link>
		<comments>http://qilei.org/201109/vertical-align-in-different-browser/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 17:26:17 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://qilei.org/?p=1298</guid>
		<description><![CDATA[最近接触了许多 关于图片文字水平对齐的需求，然后发现如果单单将vertical-align 设置为middle 的话，不同浏览器下居中对齐的位置有偏移，让人好不蛋疼~ =，= 网上搜了下好像也没有搜到相关的分析，大部分都是垂直居中的案例 于是专门针对vertical-align 做了次分析，功夫不负有心人，分析结果还是挺好玩的，对vertical-align 又有了一次深入的了解。给力~~~ demo 传送门： vertical-align 各属性分析 有错误欢迎回复纠正哦 ^__^ 一些心得体会： vertical-align 定义 最初我认为的vertical-align 解释 跟text-align 一样，是容器内部的非block 元素居中对齐，但~~ 我理解错了 从w3c 官方对 vertical-align 各属性的解释来看，vertical-align 是定义当前节点，跟外围内容的对齐方式，跟text-align 的解释是不一样的。 vertical-align:baseline 基线对齐 分析所得，发现baseline不是在中文字的可见部分最下方，而是在英文字的可见部分最下方。 然后发现图片对齐的时候是以图片的最下方同相邻文字的 baseline 对齐。一直觉得为啥图片下方会有4像素的空白，现在明白了 不同字体会有不同效果 我这个demo 用的Tahoma 字体，发现如果使用类似 Yahei 等中文字体，在IE低版本下会有出现一些奇怪的现象，详细可以看demo。 vertical-align 最好不要混用 从定义来理解，就发现这个vertical-align 最好不要混用。因为本身不同属性会产生各种各样的兼容问题，如果混用，估计会出现更复杂的现象。虽然我也没有深入研究，但我觉得混用不太靠谱。 vertical-align: px 定位最稳定 这个属性一直都没怎么用，原先一直用middle 来实现水平对齐，在一次偶尔的项目代码里发现的。 相对定位是相对于baseline的偏差定位，负值代表图片相对baseline往下移。 在研究中发现使用相对定位兼容性最好，只有IE7会有2px的偏差，但基本可以无视，因为目前IE7的用户可以忽略不计。 不过这种方法也不是万能的， 因为是相对于baseline的相对定位，如果文字变大后，图片的对齐位置 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://qilei.org/wp-content/uploads/2011/09/0905.jpg" alt="" title="vertical-align" width="600" height="240" class="alignnone size-full wp-image-1300" /></p>
<p>最近接触了许多 关于图片文字水平对齐的需求，然后发现如果单单将vertical-align 设置为middle 的话，不同浏览器下居中对齐的位置有偏移，让人好不蛋疼~ =，=<br />
网上搜了下好像也没有搜到相关的分析，大部分都是垂直居中的案例<br />
于是专门针对vertical-align 做了次分析，功夫不负有心人，分析结果还是挺好玩的，对vertical-align 又有了一次深入的了解。给力~~~</p>
<p>demo 传送门： <a href="http://qilei.org/demo/vertical-align/" target="_blank">vertical-align 各属性分析</a> <em>有错误欢迎回复纠正哦 ^__^</em></p>
<p>一些心得体会：</p>
<h3>vertical-align 定义</h3>
<p>最初我认为的vertical-align 解释 跟text-align 一样，是容器内部的非block 元素居中对齐，但~~  <strong>我理解错了</strong><br />
从w3c 官方对 vertical-align 各属性的解释来看，vertical-align 是定义当前节点，跟外围内容的对齐方式，跟text-align 的解释是不一样的。</p>
<h3>vertical-align:baseline 基线对齐</h3>
<p>分析所得，发现baseline不是在<strong>中文字</strong>的可见部分最下方，而是在<strong>英文字</strong>的可见部分最下方。<br />
然后发现图片对齐的时候是以图片的最下方同相邻文字的 baseline 对齐。<em>一直觉得为啥图片下方会有4像素的空白，现在明白了</em></p>
<h3>不同字体会有不同效果</h3>
<p>我这个demo 用的Tahoma 字体，发现如果使用类似 Yahei 等中文字体，在IE低版本下会有出现一些奇怪的现象，详细可以看demo。</p>
<h3>vertical-align 最好不要混用</h3>
<p>从定义来理解，就发现这个vertical-align 最好不要混用。因为本身不同属性会产生各种各样的兼容问题，如果混用，估计会出现更复杂的现象。虽然我也没有深入研究，但我觉得混用不太靠谱。</p>
<h3>vertical-align: px 定位最稳定</h3>
<p>这个属性一直都没怎么用，原先一直用middle 来实现水平对齐，在一次偶尔的项目代码里发现的。<br />
相对定位是相对于baseline的偏差定位，负值代表图片相对baseline往下移。<br />
在研究中发现使用相对定位兼容性最好，<em>只有IE7会有2px的偏差，但基本可以无视，因为目前IE7的用户可以忽略不计</em>。<br />
不过这种方法也不是万能的，<br />
因为是相对于baseline的相对定位，如果文字变大后，图片的对齐位置 看起来就不会跟着移动区别于middle属性，不过个人觉得这样的情况出现概率不大，并且字大了再针对调整也没问题。<br />
另外图片大小不一样大相应的负值也不相同，<em>详细见demo</em>。</p>
<h3>高潮：vertical-align 最佳兼容方案</h3>
<p>前面说了这次研究没有白费，个人推荐的vertical-align 用法如下：<br />
1. 尽量保持主内容的 vertical-align 是baseline 即默认的，不要把vertical-align 当text-align 来理解使用。<br />
2. 针对 内部需要调整位置的 图片等 进行 px 定位。<br />
优点：保证外围的vertical-align 是默认值，不产生混用现象。<br />
缺点：针对不同尺寸的图片要针对进行定位，不过一般ico 大小差不多大，可以统一调整。</p>
<p>下一步研究方向：表单元素的vertical-align: px 是否同样适用 ？</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201202/how-to-make-well-when-position-absolute/" title="position:absolute 的一些兼容心得。">position:absolute 的一些兼容心得。</a></li><li><a href="http://qilei.org/201111/ie6-reflow-bug/" title="IE6 reflow bug 经验因素收集">IE6 reflow bug 经验因素收集</a></li><li><a href="http://qilei.org/201110/zoom1-cause-a-bug/" title="zoom:1 引起的bug 一则 ">zoom:1 引起的bug 一则 </a></li><li><a href="http://qilei.org/201106/thinking-about-position-relative-on-ie/" title="css心得之善用 position:relative ">css心得之善用 position:relative </a></li><li><a href="http://qilei.org/201009/ie8-bug-table-cell-and-max-width/" title="IE8 不定尺寸图片垂直居中引起的 bug">IE8 不定尺寸图片垂直居中引起的 bug</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201109/vertical-align-in-different-browser/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>那些新增的标签 &#8212; html5 学习笔记</title>
		<link>http://qilei.org/201108/learn-about-new-tags-in-html5/</link>
		<comments>http://qilei.org/201108/learn-about-new-tags-in-html5/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 04:27:12 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://qilei.org/?p=1289</guid>
		<description><![CDATA[html5已经出来有一段时间了，虽然万恶的IE面对其赤果果的色诱也硬不起来，但还是有很多优秀的网站开始应用了，毕竟大势所趋嘎嘎。 最近在啃html5动物书，虽然动物书讲的好多东西，在网络上的一些杂文里都看到过，不过毕竟是动物书，会有一些小细节是值得去翻阅的。 好了 切入主题，讲讲心得： section 是有语义的div 很多人很费解 为什么html5 放着div 那么短小精干的东西不用，非要用section呢？ 我的理解是div 依然有用，只是它可以代表无语义的东西。section像是一个沙盒子，将不同的部分，区块，模块，区分开。 header 不是一定要唯一 首先要说的就是这个header标签，之前看了好多关于html5的杂文，给人的感觉就像是 header 标签是 网站头部进化过来的，其实不然，就像以前很多人认为 h1只允许有一个一样。 因为 header 可以包含在 article 里作为 文章的头部标签。见(49页) hgroup 在header 标签中充当目录指引作用 原先一直很不明白hgroup 的作用，因为w3cschool 上表现的例子中hgroup中都是些h* 标签集合，这种东西在实际应用中的应用场景非常狭隘。但当发现 article 里可以丢header 标签后 这个问题就解决了。 其实个人觉得这个标签的重心在目录指引，在内容为王的时代，hgroup标签会给seo带来一定贡献。 有了沙箱后，网站结构变得不是那么虎头蛇尾 很多人认为 一个web 中 只能用一个h1 不能用太多 h2，以及少量h3， 甚至都找不到 h4的踪迹。 事实告诉我们，我们甚至可以在 nav 标签中使用h1。 那么这样写不但不会混淆seo 抓重点。而且能让web 看着更加婀娜多姿，凹凸有致。 顺便普及一下html5 标志中的一些寓意以及新特性：HTML5标志 您可能还对这些日志感兴趣壹周一嘀咕: [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://qilei.org/wp-content/uploads/2011/08/20110814-html5.jpg" alt="" title="html5" width="600" height="240" class="alignnone size-full wp-image-1291" /><br />
html5已经出来有一段时间了，虽然万恶的IE面对其赤果果的色诱也硬不起来，但还是有很多优秀的网站开始应用了，毕竟大势所趋嘎嘎。<br />
最近在啃<a href="http://book.douban.com/subject/4143105/" title="英文版" target="_blank">html5动物书</a>，虽然动物书讲的好多东西，在网络上的一些杂文里都看到过，不过毕竟是动物书，会有一些小细节是值得去翻阅的。</p>
<p>好了 切入主题，讲讲心得：</p>
<h3>section 是有语义的div </h3>
<p>很多人很费解 为什么html5 放着div 那么短小精干的东西不用，非要用section呢？<br />
我的理解是div 依然有用，只是它可以代表无语义的东西。section像是一个沙盒子，将不同的部分，区块，模块，区分开。</p>
<h3>header 不是一定要唯一</h3>
<p>首先要说的就是这个header标签，之前看了好多关于html5的杂文，给人的感觉就像是 header 标签是 网站头部进化过来的，其实不然，就像以前很多人认为 h1只允许有一个一样。<br />
因为 <strong>header 可以包含在 article 里作为 文章的头部标签</strong>。见(49页)</p>
<h3>hgroup 在header 标签中充当目录指引作用</h3>
<p>原先一直很不明白hgroup 的作用，因为w3cschool 上表现的例子中hgroup中都是些h* 标签集合，这种东西在实际应用中的应用场景非常狭隘。但当发现 article 里可以丢header 标签后 这个问题就解决了。<br />
其实个人觉得这个标签的重心在目录指引，在内容为王的时代，hgroup标签会给seo带来一定贡献。</p>
<h3>有了沙箱后，网站结构变得不是那么虎头蛇尾 </h3>
<p>很多人认为 一个web 中 只能用一个h1 不能用太多 h2，以及少量h3， 甚至都找不到 h4的踪迹。<br />
事实告诉我们，我们甚至可以在 nav 标签中使用h1。<br />
那么这样写不但不会混淆seo 抓重点。而且能让web 看着更加婀娜多姿，凹凸有致。</p>
<p><em>顺便普及一下html5 标志中的一些寓意以及新特性</em>：<a href="http://www.elviscai.com/view/html5-logo-released/" target="_blank">HTML5标志</a></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201112/digu-20111220/" title="壹周一嘀咕: 2011/12/20">壹周一嘀咕: 2011/12/20</a></li><li><a href="http://qilei.org/201103/html5-in-the-future/" title="html5 新思路的开始 – web标准化交流会 (杭州站第三期)">html5 新思路的开始 – web标准化交流会 (杭州站第三期)</a></li><li><a href="http://qilei.org/200810/flashdevelop-build-up/" title="AS3-学习笔记-flashdevelop平台-搭建-配置">AS3-学习笔记-flashdevelop平台-搭建-配置</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201108/learn-about-new-tags-in-html5/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>css心得之善用 position:relative</title>
		<link>http://qilei.org/201106/thinking-about-position-relative-on-ie/</link>
		<comments>http://qilei.org/201106/thinking-about-position-relative-on-ie/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 17:35:53 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://qilei.org/?p=1223</guid>
		<description><![CDATA[发现 最近 可以吐槽的东西越来越少 =，= 大概是工作有些忙了~ blog 都杂草丛生了 = = 技术文，看不懂可以提问哇，实在看不懂就挑好玩的看^__^ 很湿~ 此文章堆在后台好久了，一直都没找到配图，思路也没理清楚，于是都快臭了~ 好吧进入正文~~ =========================华丽的吐槽线====================== 可能是个人习惯吧，我个人在写css 样式的时候 position:relative 都很少用。不到逼不得已不用，因为这东西在面对IE大叔的时候总是会各种被推到，比如多个positon 嵌套的的时候 会产生 类似 z-index 优先级的失控，不知道其他coder们碰到过这个问题没？反正我是碰到不下1次了。 举个栗子如下：html 代码 节略写法，你懂的 ul.pp li 大宝 span 大宝的屁屁 li 二宝 span 二宝的屁屁 li 三宝 span 三宝的屁屁 从上面 的代码 本来没啥问题，问题在于给他穿上衣服(css)之后，因为一些需求，你讲li 的css position:relative 了， 那么li 就傻逼了，这个时候你怎么设置li 的z-index 为多大 都盖不过 之后下一个li 的内容。 不理解上面表达的意思可以见下图。 css代码 .pp{ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://qilei.org/wp-content/uploads/2011/06/position.png" alt="" title="position" width="600" height="240" class="alignnone size-full wp-image-1260" /><br />
发现 最近 可以吐槽的东西越来越少 =，= 大概是工作有些忙了~  blog 都杂草丛生了 = =</p>
<p><em>技术文，看不懂可以提问哇，实在看不懂就挑好玩的看^__^ 很湿~</em><br />
此文章堆在后台好久了，一直都没找到配图，思路也没理清楚，于是都快臭了~</p>
<p>好吧进入正文~~<br />
=========================华丽的吐槽线======================<br />
可能是个人习惯吧，我个人在写css 样式的时候 position:relative 都很少用。不到逼不得已不用，因为这东西在面对IE大叔的时候总是会各种被推到，比如多个positon 嵌套的的时候 会产生 类似 z-index 优先级的失控，不知道其他coder们碰到过这个问题没？反正我是碰到不下1次了。</p>
<p>举个栗子如下：html 代码 <em>节略写法，你懂的</em><span id="more-1223"></span></p>
<pre><code>ul.pp
    li 大宝   span 大宝的屁屁
    li 二宝   span 二宝的屁屁
    li 三宝   span 三宝的屁屁
</code></pre>
<p>从上面 的代码 本来没啥问题，问题在于给他穿上衣服(css)之后，因为一些需求，你讲li 的css position:relative 了，<br />
那么li 就傻逼了，这个时候你怎么设置li 的z-index 为多大 都盖不过 之后下一个li 的内容。<br />
不理解上面表达的意思可以见下图。<br />
<img src="http://qilei.org/wp-content/uploads/2011/06/IE6-7.png" alt="" title="IE6-7" width="600" height="240" class="alignnone size-full wp-image-1255" /></p>
<p><strong>css代码</strong></p>
<pre><code>.pp{
	width:300px;
	margin:50px auto;
	background:#fff;
	height:300px;
	padding:10px;
}
.pp li{
	border:1px solid #ccc;
	margin-bottom:10px;
	height:30px;
	position:relative;
	background:#fff;
	z-index:9;
}

.pp span{
	display:block;
	width:40px;
	height:40px;
	background:#f09;
	position:absolute;
	right:10px;
	bottom: -20px;
	z-index:10;
}</code></pre>
<p>如图，左边是chrome 下的效果，右侧是IE6的效果，可见，当给li 设置positon:relative 后无论 里面的 元素设置z-index 为多大，都改不过之后的li 内容。(<em>爷的我又把上面的字重新打了一遍 = =</em>) </p>
<h3>解决方案</h3>
<p>从视觉上面理解，这样的情况就像 AI(Illustrator)里的图层一样，一层比一层高，也像个沙箱，内部的z-index 是怎么也不能超越下一层的z-index。<br />
<strong>最好不要</strong>给列表型的li 或者 div 添加 position:relative，一直以来针对IE这样头疼的bug，都是以避开这样的情况来解决。(其实应该不算bug，应该是浏览器开发者理解性上的不同)。</p>
<p>当然<strong>还有一种办法</strong>，由于是因为下一个li 设置了position 盖住了前一个position 的 li，那么只要避免position盖住position就可以勉强实现这样的情况。所以你只需要在position:absolute的dom外面套一层div，做到不盖住前一个li中的 position:absolute就可以。</p>
<p><strong>另外一种方法</strong>是在特定的情况下如hover事件，如触发式 弹出浮窗(显示更多信息)，<br />
这个时候我是这样来实现，  当hover的时候 给 li 添加一个class  “hover”， 然后只要定义hover 的时候是position:relative就可以了，这样的好处是hover 的时候其他 li 没有position:relative ，那么就没有之前的bug了。<br />
<em>对于高级浏览器 可以直接写:hover 甚至都可以脱离 js  效率会更高 </em></p>
<h3>position:relative 在:hover 上的妙用</h3>
<p>先看下图，左侧这样的按钮不知道应该会在一些效果里接触过吧？类似向左向右的按钮，<br />
<img src="http://qilei.org/wp-content/uploads/2011/06/pp.png" alt="" title="pp" width="600" height="117" class="alignnone size-full wp-image-1257" /><br />
仔细观察发现按钮中间的线是共享的，但是按下去的时候颜色会变深。<br />
实现办法很多，我一般是对其中一个按钮使用负边距，然后在:hover效果上动手脚(<em>由于IE6只支持a上的hover，所以一般都是使用a</em>)，其实很简单就是在hover 的时候，给它设置position:relative，然后将z-index 设置一个数字就可实现。</p>
<p>以此类推，上图中apple 的导航也可以使用这样的办法来实现效果。是不是挺带感^__^</p>
<p>好了，要是有更好的idea 可以留言评论。</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201202/how-to-make-well-when-position-absolute/" title="position:absolute 的一些兼容心得。">position:absolute 的一些兼容心得。</a></li><li><a href="http://qilei.org/201111/ie6-reflow-bug/" title="IE6 reflow bug 经验因素收集">IE6 reflow bug 经验因素收集</a></li><li><a href="http://qilei.org/201110/zoom1-cause-a-bug/" title="zoom:1 引起的bug 一则 ">zoom:1 引起的bug 一则 </a></li><li><a href="http://qilei.org/201109/vertical-align-in-different-browser/" title="vertical-align 图片文字水平对齐分析">vertical-align 图片文字水平对齐分析</a></li><li><a href="http://qilei.org/201009/ie8-bug-table-cell-and-max-width/" title="IE8 不定尺寸图片垂直居中引起的 bug">IE8 不定尺寸图片垂直居中引起的 bug</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201106/thinking-about-position-relative-on-ie/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>闭包式 js架构 前端书写心得(上)</title>
		<link>http://qilei.org/201105/the-closure-alike-javascript-platform/</link>
		<comments>http://qilei.org/201105/the-closure-alike-javascript-platform/#comments</comments>
		<pubDate>Tue, 24 May 2011 15:30:26 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[交流会]]></category>

		<guid isPermaLink="false">http://qilei.org/?p=1238</guid>
		<description><![CDATA[5月份的杭州区w3c标准化交流会 带着感冒 去了口碑做了次分享，分享的内容是最近刚接触到的并且用的比较爽快的《闭包式js架构》 顺便吐槽一下，这次来的人不多，不知道是不是不太好意思来交流还是怎么了，是不屑么~？，就当交朋友么~ 其实我也很菜的，听了就知道。 以下是我最近在做新系统的时候用到的一种 闭包式js架构 书写方法，大家慢慢看，有些地方似曾相识，说不定有你想要的东西，仅仅是分享，也许又更好的实现方法。 1. 说说闭包 因为这样的架构思想又一些类似 javascript 的闭包概念。所以我在分享的时候做了下闭包的引导。 分享前做PPT的时候特意去百度娘那里看了下关于闭包的知识补习一下。百科 分享的时候因为主要讲的不是闭包所以顺便带过一下，不过会后，似乎有人反而对闭包感兴趣，嘎嘎。真是指哪哪不响哇。 回来又抽空查了下 《javascript 高级程序设计》中的闭包解释，似乎比百度娘上面的更浅显一些，百科上的是一种比较极端的闭包，(有空朋友可以翻阅一下：p56)。 最简单的闭包 就是全局变量。 2. 利用匿名函数解决$冲突 很多朋友应该会碰到过 一个老系统页面里好多js库的情况吧。神嘛 prototype jQuery mootools 会时不时暂用$符号，导致各种冲突。 记得jquery 有个方法是把$让出来。 这里给出一个比较好用的匿名函数 来形成 封闭作用域来实现。 很多jquery 插件就是这样来书写的 (function($){ /*** * make $ in Closed Scope */ $(function(){ //do something on dom ready }); })(jQuery); 利用匿名函数把，jQuery 引入匿名函数，这样在匿名函数的作用域里，你就可以自由的使用$了，并且这样也同样试用与其他库。 3. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://qilei.org/wp-content/uploads/2011/05/201105-bb.jpg" alt="" title="201105-bb" width="600" height="240" class="alignnone size-full wp-image-1245" /></p>
<h3>5月份的杭州区w3c标准化交流会</h3>
<p>带着感冒 去了口碑做了次分享，分享的内容是最近刚接触到的并且用的比较爽快的《闭包式js架构》<br />
<em>顺便吐槽一下，这次来的人不多，不知道是不是不太好意思来交流还是怎么了，是不屑么~？，就当交朋友么~ 其实我也很菜的，听了就知道。</em></p>
<p>以下是我最近在做新系统的时候用到的一种 闭包式js架构 书写方法，大家慢慢看，有些地方似曾相识，说不定有你想要的东西，仅仅是分享，也许又更好的实现方法。</p>
<h3>1. 说说闭包</h3>
<p>因为这样的架构思想又一些类似 javascript 的闭包概念。所以我在分享的时候做了下闭包的引导。<br />
分享前做PPT的时候特意去百度娘那里看了下关于闭包的知识补习一下。<a href="http://baike.baidu.com/view/648413.htm" target="_blank" rel="help">百科</a><br />
分享的时候因为主要讲的不是闭包所以顺便带过一下，不过会后，似乎有人反而对闭包感兴趣，嘎嘎。真是指哪哪不响哇。</p>
<p>回来又抽空查了下 《javascript 高级程序设计》中的闭包解释，似乎比百度娘上面的更浅显一些，百科上的是一种比较极端的闭包，(<em>有空朋友可以翻阅一下：p56</em>)。 最简单的闭包 就是全局变量。</p>
<h3>2. 利用匿名函数解决$冲突</h3>
<p>很多朋友应该会碰到过 一个老系统页面里好多js库的情况吧。神嘛 prototype  jQuery mootools 会时不时暂用$符号，导致各种冲突。<br />
记得jquery 有个方法是把$让出来。<br />
这里给出一个比较好用的匿名函数 来形成 封闭作用域来实现。 <em>很多jquery 插件就是这样来书写的</em></p>
<pre><code>(function($){

/***
 * make $ in Closed Scope
*/
$(function(){
    //do something on dom ready
});

})(jQuery);
</code></pre>
<p>利用匿名函数把，jQuery 引入匿名函数，这样在匿名函数的作用域里，你就可以自由的使用$了，并且这样也同样试用与其他库。</p>
<h3>3. 怎样不污染命名空间</h3>
<p><span id="more-1238"></span><br />
这个问题曾经困扰我挺久的，因为原现公司老系统里遍地都是 全局变量 全局fun，命名空间污染的让人蛋疼菊紧。 =，=</p>
<p>那么经过我哥的教导，就是利用 变量类形式 只占用 一个全局变量。如下：</p>
<pre><code>(function($){

$.namespace('Platform.tms.home');

})(jQuery);
</code></pre>
<p>上面的namespace是一个jquery插件用来方便建立命名空间。<br />
其实它就等同于下面这段代码。是不是用插件看起来简单多了。</p>
<pre><code>var Platform = {}
    Platform.tms = {}
    Platform.tms.home = {}
</code></pre>
<h3>4. 所谓 闭包式 js 架构 前端书写</h3>
<p>以上其实都是铺垫啦。<br />
有了命名空间不污染全局变量，有了封闭空间匿名函数不会产生js库间的冲突，两者问题都良好解决。<br />
现在要把两者结合起来，形成现在的 架构形式。代码如下：</p>
<pre><code>/**
 * @ TMS Package
 *
 * @author qilei.weiql
 */
(function($, TMS) {

var util = TMS.util;

})(jQuery, Platform.tms);
</code></pre>
<p>从代码里可以看出，我将独立的全局变量类Platform 和 jQuery 引入 匿名函数。<br />
这样做的好处显而易见，就是利用 Platform 搭建桥梁，让 匿名函数内的 资源可以通过 Platform 访问到 其他匿名函数的资源。<br />
简单的说就是类似：一个应用 当它需要用到某组件，那么只要包含某组件js文件进来就可以。</p>
<h3>5. 说明下这样书写的好处</h3>
<p>好处除了前面说的，避免 命名空间污染，不产生库冲突，同时在封闭作用域内，你可以通过引用将全局变量类冗长的名字简化。如上面的代码中就用TMS 代表 Platform.tms，然后直接使用 TMS.util 来访问 Platform.tms.util，这样看起来是不是就简洁许多。<em>这个就是要懒得有风度的表现^_^</em><br />
甚至可以直接缓存你需要的组件，如：</p>
<pre><code>var util = TMS.util;
</code></pre>
<pre><code>var dialog= TMS.widgets.dialog;
</code></pre>
<h3>6. 从一个栗子 表现书写心得</h3>
<pre><code>(function($, TMS) {

/*************************
 *  Header 头部控制类
 */
var Header = {
	init : function(){
		this._initHover();
	},
	_initHover : function(){
		//do something
	}
}

TMS.home.header   = Header ;

})(jQuery, Platform.tms);
</code></pre>
<p>先丢一块代码给大家。上面的代码是渲染一个应用的头部js 文件。<br />
外围代码跟上面差不多。<br />
我的书写方法是 先 新建一个 Header 变量类，里面有一些子方法，如启动方法， 还有其他一切跟header 相关的方法都在里面。<br />
然后将 header 跟 TMS.home.header 对接，便于被其他组件引用， 当然(<em>如果你不像被外接影响，可以不用对接，这样就完全不受影响</em>)</p>
<h3>7. 方便的启动函数便于调试</h3>
<p>看了上面的那么多是不是发现写了那么多怎么启动。。。 现在就跟你说怎么启动，<br />
上面栗子中header 不是 init() 方法么，这个就是 启动函数用来初始化一些数据以及启动专用。<br />
那么一个应用里又很多区域需要启动那么代码就可以这样写。</p>
<pre><code>(function($, TMS) {

$(function(){
TMS.home.header.init();
TMS.home.cate.init();
TMS.home.slider.init();
});

})(jQuery, Platform.tms);
</code></pre>
<p>上面就是对3个模块进行启动操作，就像开关一样，有些人会习惯在 启动函数上添加一些参数神嘛的（类似插件那样），但是这就像是开关一样，开关追求的是一种简洁，讲复杂的东西都放在init()里去吧，会让代码更又层次。<br />
同时 当你需要只对一个模块进行调试的时候，你就只需要注释掉其他两行代码就可以不启动了。是不是很方便。</p>
<h3>8. 闭包式的由来</h3>
<p>说了这么多，这样的书写方法以及优点，闭包式 的名字 是因为 它的两个特性跟闭包有点相似，一个是 封闭的作用域，另外一个是有一个全局变量类， 从一个封闭的作用域中 能够访问到 外部 全局资源，这个就是类似闭包的概念。</p>
<p><em>当然这个名字还是我YY出来的，也许它已经又它的学名了，如果又谁知道的话就不要吝啬 分享一下哇^__^</em></p>
<h3>9. 其他一些可以扩展的东西</h3>
<p>上面的那么多心得都是在 我哥(<a target="_blank" rel="friend" href="http://bencode.org/">笨笨</a>) 虚心教导下产生的，<br />
本来这次分享是直接邀请他来分享的，不过似乎他更忙些。<br />
之后还会分享一些 进阶内容</p>
<ul>
<li>a. <strong>目录配置规范</strong>，为了让组件更规范，必须又它的目录规范</li>
<li>b. <strong>namespace 命名空间 的命名规范</strong>，一套好的命名规范能让整个架构非常又调理</li>
<li>c. <strong>Js 调试，合并方案</strong>，因为各个功能应用组件等都是分布在各个js 文件内的，在发布的时候需要又个合并方案，类似YUI</li>
</ul>
<p>好了这次分享就到这里了，又更好的idea 欢迎 留言 交流学习呢 ^__^</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/200907/jquery-navbar/" title="乱翻乱教- jQuery 制作N级导航菜单">乱翻乱教- jQuery 制作N级导航菜单</a></li><li><a href="http://qilei.org/200903/jquery-for-tab-change-effect/" title="菜鸟级: 标签切换效果 &#8211; JQuery实现">菜鸟级: 标签切换效果 &#8211; JQuery实现</a></li><li><a href="http://qilei.org/200903/jquery-extend-scroll/" title="滚动新闻 &#8211; jquery 扩展插件">滚动新闻 &#8211; jquery 扩展插件</a></li><li><a href="http://qilei.org/201101/ternary-tip-for-javascript/" title=" 三元运算符 使用小技巧一则 &#8211; javascript"> 三元运算符 使用小技巧一则 &#8211; javascript</a></li><li><a href="http://qilei.org/201009/jquery-plugin-of-lazyhover/" title="神经特长 &#8211; lazy hover  延迟激活jquery 插件">神经特长 &#8211; lazy hover  延迟激活jquery 插件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201105/the-closure-alike-javascript-platform/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>html5 新思路的开始 – web标准化交流会 (杭州站第三期)</title>
		<link>http://qilei.org/201103/html5-in-the-future/</link>
		<comments>http://qilei.org/201103/html5-in-the-future/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 05:10:36 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[生活琐碎]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=1146</guid>
		<description><![CDATA[飞鱼：等交流会洗照片中&#8230;……^__^ 掐指一算 发现又有一个多月没更新blog 了，我勒个去~~ = = 已经是第三次参加 web标准化交流会了，每次都还是有点收获的，更何况每次都是在不同公司感受不同的氛围。 本次交流会在 杭州东软的思科会议室里举行，依然由 蕃茄 主持会议，这家伙每次闲话都很多嘎嘎，是一个对web 情有独钟的淫啊。 闲话少说：大概 跟大伙回报一下 这次交流会的内容以及心得吧。 一、div section article 傻傻分不清楚 &#8211; by 蕃茄 蕃茄大概介绍了一下html5 的一些标签，引导大伙去讨论。分享了下自己对新增标签的理解。 不过似乎是思科太高档了，（会议室里大大的会议桌，水果···）大家显得比较拘谨，可能是杭州人都比较含蓄。也可能是 前端淫类 都比较 闷骚~~~ Orz 说到对标签的理解，正如我在交流会上说的 html5 新增的标签 如 header footer nav aside article section 等。新增的标签让原先赤裸裸的div 变得更加语义化。 那么更加语义化对web 有什么好处呢。 我自己总结了一下几点： 1. 页面结构更加清晰 。从标签的语义就可以看出 section 的中文意思是 地区，章节。让用户的体验是，预览网页更像是在看一本书(国外的例子 页面看起来就像一本书)，一本书有页眉页脚(header footer) ， 目录(nav) [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1154" title="20110228" src="http://qilei.org/wp-content/uploads/2011/03/20110228.jpg" alt="" width="600" height="240" /><br />
<em>飞鱼：等交流会洗照片中&#8230;……^__^</em><br />
掐指一算 发现又有一个多月没更新blog 了，我勒个去~~ = =<br />
已经是第三次参加 web标准化交流会了，每次都还是有点收获的，更何况每次都是在不同公司感受不同的氛围。</p>
<p>本次交流会在 杭州东软的思科会议室里举行，依然由 <strong>蕃茄</strong> 主持会议，这家伙每次闲话都很多嘎嘎，是一个对web 情有独钟的淫啊。</p>
<p>闲话少说：大概 跟大伙回报一下 这次交流会的内容以及心得吧。</p>
<h3>一、div section article 傻傻分不清楚 &#8211; by 蕃茄</h3>
<p>蕃茄大概介绍了一下html5 的一些标签，引导大伙去讨论。分享了下自己对新增标签的理解。<br />
不过似乎是思科太高档了，（会议室里大大的会议桌，水果···）大家显得比较拘谨，可能是杭州人都比较含蓄。也可能是 前端淫类 都比较 闷骚~~~ Orz</p>
<p><em>说到对标签的理解，正如我在交流会上说的</em><br />
html5 新增的标签 如 header footer nav aside article section 等。新增的标签让原先赤裸裸的div 变得更加语义化。<br />
那么更加语义化对web 有什么好处呢。<br />
我自己总结了一下几点：<br />
1. <strong>页面结构更加清晰</strong> 。从标签的语义就可以看出 section 的中文意思是 地区，章节。让用户的体验是，预览网页更像是在看一本书(<a rel="bookmark" href="http://diveintohtml5.org/">国外的例子</a> <em>页面看起来就像一本书</em>)，一本书有页眉页脚(header footer) ， 目录(nav) ，旁注(aside) ，章节(section)，正文(article)，区块(section) (article 是特殊的section) 蕃茄写的文章里有说明(<a href="http://www.qianduan.net/html5-differences-in-the-div-section-article.html">HTML5 中 div section article 的区别</a>)。</p>
<p>2. <strong>让爬虫更懂你要传递的内容</strong> 。在搜索引擎如此发达的未来，语义化web 能让web 说要传递的信息更加 清晰。比如爬虫可以有选择性的 抓取 正文以外的内容。让爬虫(在你的网站上)多飞一会儿，那么呈现给用户的就越多越快。</p>
<p>3. <strong>让前端代码更加对象化，模块化</strong> 。这个思想也是最近在接触很多后端语言，接触手持设备开发语言(android and iOS) 越发期待的。就是期待未来的web 页面制作应该像 xcode 那样制作前端界面的时候 根本不需要敲任何html5代码，(<em>虽然类似Dreamweaver 也能做到，但不是最优化</em>)。那么假如web标准化 慢慢成熟之后 是否直接可以 建立一套类似 那样的界面。<br />
那么我们前端的工作就不再是：</p>
<ul>
<li>a. 觉得 section 标签比 div 长 (<em>交流会上有人提出这样的疑惑，这个不是问题，因为有自动补全工具</em>); </li>
<li>b. article 标签里是否可以嵌套 section (这个是我突然对这两个标签是否可以交叉嵌套的疑惑).</li>
<li>c. 检查标签是否闭合，(前端的很多bug 都是标签 误删没有闭合造成的, 当然html5 你可以不闭合，但必须遵循它的标准)。</li>
</ul>
<p>以上就是我对前端工作的未来的设想。<br />
当然前端的工作还有 javascript 部分，这块东西就像玉伯说的，水很深，我们还在河沿。</p>
<h3>二、canvas 应用开发, 真3d引擎 &#8211; by 周杰 hehe123 思科网讯</h3>
<p>第二部分有些高端，因为涉及到图形算法。听得好多在场的前端大大们 一愣一愣，因为之前做过flash 对空间算法 还是有点接触，所以听起来不是非常累。<br />
之前我也写过一篇关于 javascript 3d 的介绍 &#8211;<a href="http://qilei.org/200902/javascrip-for-3d-program/">强悍的javascript — 3D效果</a>。<br />
canvas 是个怨念物。想掌握这个东西，还需要有一定的 图形算法能力。<br />
周杰给我介绍了下 web中的真3d 开发。我一直以为web上只能做做伪3d呢，不过就目前来讲，真3d 在性能上 跟伪3d 还有有挺大差距的，真3d相当耗资源。可能是研究得还不够深入吧。也许未来的 web 版山口山离我们不远了。<br />
具体 还是 不深入讨论了，这方面真的好深。有空自己做点 canvas 的真3d 出来 show 一下。</p>
<p>顺便放一个 canvas 的帅气应用 <a href="http://weavesilk.com/">http://weavesilk.com/</a><em>非常帅气，用cavas绘制类似极光一样的图，算法帝啊·~~ 膜拜</em></p>
<h3>三、感慨： 我们走得还不够快</h3>
<p>发现不同的公司对web开发的理念就是不一样，像商业为主的 网站 大多都是以 业务为导向，注重实用。觉得思科网讯这一点挺好，它们有个专门针对web的研发机制。以追求领先技术为导向，有点labs的感觉。</p>
<p>相对于这点，不禁 膜拜 来自日本的那些前端大牛。就像 周杰说的当我们还在讨论 html5标准的时候，才开始学习html5的时候，他们就已经开始在研究canvas 的3d 引擎了。这样导致的后果是，我们永远都会在技术研发上落后于他们。<br />
<em>我就感叹一下~~~~ ^__^</em></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201108/learn-about-new-tags-in-html5/" title="那些新增的标签 &#8212; html5 学习笔记">那些新增的标签 &#8212; html5 学习笔记</a></li><li><a href="http://qilei.org/201012/think-about-the-further-ue/" title="饭饭谈之“大交互”思想 &#8211; web 标准化交流会 杭州站">饭饭谈之“大交互”思想 &#8211; web 标准化交流会 杭州站</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201103/html5-in-the-future/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>三元运算符 使用小技巧一则 &#8211; javascript</title>
		<link>http://qilei.org/201101/ternary-tip-for-javascript/</link>
		<comments>http://qilei.org/201101/ternary-tip-for-javascript/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 05:01:31 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=1098</guid>
		<description><![CDATA[发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代，仅仅是未了让代码更简洁精辟，当然也有人说用三元可以让你有高潮的感觉。最近在写js 的时候也有这样的感觉，并且收集了一些小技巧，分享分享。 大鸟请跳过下面这段，大大鸟帮忙指正 ^__^ ====普及线==== 表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2，在 expr1 求值为 FALSE 时的值为 expr3。 ============ 普通用法 当你发现你经常用if else if(拜春哥 &#124;&#124; 拜考试帝){ 不挂科; }else{ 门门挂; } 那么三元的表示法就是 拜春哥 &#124;&#124; 拜考试帝 ? 不挂科 : 门门挂 很帅气的发现代码 精辟了 好多。 日常中经常会有这样的 if else 判断，特别是嵌套比较多的时候 用三元是比较和谐的，可以让你的代码看起来更加清爽，结构清晰。 稍微聪明点的用法 通过不断的变化，可以衍生出很多三元的用法。如下一段jquery代码 flag [...]]]></description>
			<content:encoded><![CDATA[<p>发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代，仅仅是未了让代码更简洁精辟，当然也有人说用三元可以让你有高潮的感觉。最近在写js 的时候也有这样的感觉，并且收集了一些小技巧，分享分享。<br />
<em>大鸟请跳过下面这段，大大鸟帮忙指正 ^__^</em><br />
====普及线====</p>
<pre><code>表达式 (expr1) ? (expr2) : (expr3)
在 expr1 求值为 TRUE 时的值为 expr2，在 expr1 求值为 FALSE 时的值为 expr3。</code></pre>
<p>============</p>
<h3>普通用法</h3>
<p>当你发现你经常用if else</p>
<pre><code>if(拜春哥 || 拜考试帝){
    不挂科;
}else{
    门门挂;
}
</code></pre>
<p>那么三元的表示法就是</p>
<pre><code>拜春哥 || 拜考试帝 ? 不挂科 : 门门挂</code></pre>
<p>很帅气的发现代码 精辟了 好多。</p>
<p>日常中经常会有这样的 if else 判断，特别是嵌套比较多的时候 用三元是比较和谐的，可以让你的代码看起来更加清爽，结构清晰。</p>
<h3>稍微聪明点的用法</h3>
<p>通过不断的变化，可以衍生出很多三元的用法。如下一段jquery代码</p>
<pre><code>flag ? $('body').addClass('hover') : $('body').removeClass('hover') ;</code></pre>
<h3>甚至更变态些的。</h3>
<pre><code>$('.item')[ flag ? 'addClass' : 'removeClass']('hover')</code></pre>
<p>上面的代码看着比较困惑。因为当flag = true 的时候 ，代码就变成以下代码：</p>
<pre><code>$('.item')['addClass']('hover')</code></pre>
<p>这样写法等同于。</p>
<pre><code>$('.item').addClass('hover')</code></pre>
<p>具体解释 详见 <a target="_blank" href="http://www.maisui99.com/javascript-object-literals-small-case/">豪妹的文章</a><br />
// <em>一开始我一直搞不懂为啥子可以这样写，经过沟通突然领悟了，咩哈哈</em></p>
<h3>再升华一下</h3>
<p>可以根据需要来调用自己想要的function来处理更多的事情。</p>
<pre><code>
function a(){
      do something
}
function b(){
      do something
}

flag ? a() : b();
</code></pre>
<h3>那么为师的完全体</h3>
<p>于是有了这么个案例，两个按钮 一个向前的行为，一个向后的行为。操作的功能都差不多。</p>
<pre><code>    var action_turn = function(e, type){
        var self = $(e).closest('li');
        var target = self[type === 'prev' ? 'prev' : 'next']();
        target.addClass('has-img');
        self.removeClass('has-img')
    }

    var btn_next = $('#item-photo-panel a.next')
    btn_next.click(function(){
        action_turn(this, 'next');
        return false;
    });
    var btn_prev = $('#item-photo-panel a.prev')
    btn_prev.click(function(){
        action_turn(this, 'prev');
        return false;
    });
</code></pre>
<h3>尽量避免的情况</h3>
<pre><code>alert( true ? 'true' : false ? 't' : 'f' )</code></pre>
<p>我指的是尽量避免如上嵌套的 三元，因为在js 中 语句是从右到左，上面的代码等同于</p>
<pre><code>alert( true ? 'true' : ( false ? 't' : 'f' ) )</code></pre>
<p>如php 中这个结果就完全不一样，三元嵌套的时候是优先左边的。</p>
<pre><code>echo (( true ? 'true' :  false ) ? 't' : 'f'  )  //php中</code></pre>
<p>tip：<br />
另外发现php中的三元有这样的提示</p>
<blockquote><p>Note: 注意三元运算符是个语句，因此其求值不是变量，而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用，以后的 PHP 版本会为此发出一条警告。</p></blockquote>
<p>但是经过试验，发现在javascript 中上面的做法是可以起作用的，大概是js 比较BT，严谨度没有php那么大的原因。</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201105/the-closure-alike-javascript-platform/" title="闭包式 js架构 前端书写心得(上)">闭包式 js架构 前端书写心得(上)</a></li><li><a href="http://qilei.org/201009/jquery-plugin-of-lazyhover/" title="神经特长 &#8211; lazy hover  延迟激活jquery 插件">神经特长 &#8211; lazy hover  延迟激活jquery 插件</a></li><li><a href="http://qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://qilei.org/201003/using-trigger-bind-function-in-jquery-2/" title="隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)">隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201101/ternary-tip-for-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>偏激害死人 &#8211; 再谈 OOCSS &#8211; 对象式书写规则</title>
		<link>http://qilei.org/201009/talking-about-the-oocss-for-web-site/</link>
		<comments>http://qilei.org/201009/talking-about-the-oocss-for-web-site/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 05:25:12 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=934</guid>
		<description><![CDATA[配图:最近 太宠 小3(mac book pro 374)了,大老婆抖去了, 闹脾气起不来了. 看这篇文章前可以先 去看下下面这篇文章. 精简高效的CSS命名准则/方法 当一个css 代码年龄超过 2年的淫都会想着怎样去偷懒,去节省那些重复的样式代码. 于是就出现了很多流派. (以下名字都湿我YY, 哥只是 非专业的) 比如 直肠流: 写css 属性不换行. e.g..class{color:red; } 短线流: 写css 喜欢用短词用中横线链接 e.g. .home-notice-tit{...} and so on.. 当然也有上面文章里的 大牛 使用分离 流 e.g. .pl4{padding-left:4px } 因为这样的分离流, 咱们 星罗 发飙了, 发扬愤青应有的愤怒. 的确, .pl4 .pl10 这样的做法 飞鱼我也是很鄙视的, 丫 跟内联样式 有啥区别, 如评论所说的, 这样写无非是再写天书, 缺点毛多. 就像星罗 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-935" title="blog20101922" src="http://www.qilei.org/wp-content/uploads/2010/09/blog20101922.jpg" alt="" width="600" height="200" /><br />
<em>配图:最近 太宠 小3(mac book pro 374)了,大老婆抖去了, 闹脾气起不来了.</em></p>
<p>看这篇文章前可以先 去看下下面这篇文章.  <a href="http://www.zhangxinxu.com/wordpress/?p=1098">精简高效的CSS命名准则/方法</a><br />
当一个css 代码年龄超过 2年的淫都会想着怎样去偷懒,去节省那些重复的样式代码.<br />
于是就出现了很多流派. (以下名字都湿我YY, 哥只是 非专业的)<br />
比如<br />
<strong>直肠流:</strong> 写css 属性不换行. e.g.<code>.class{color:red; }</code><br />
<strong>短线流: </strong>写css 喜欢用短词用中横线链接  e.g. <code>.home-notice-tit{...}</code><br />
and so on..<br />
当然也有上面文章里的 大牛 使用分离 流  e.g. <code>.pl4{padding-left:4px }</code><br />
因为这样的分离流, 咱们 <a href="http://h-yue.com">星罗 </a>发飙了, 发扬愤青应有的愤怒.<br />
的确, .pl4 .pl10 这样的做法 飞鱼我也是很鄙视的, 丫 跟内联样式 有啥区别,<br />
如评论所说的, 这样写无非是再写天书, 缺点毛多.<br />
<em>就像星罗 说的一样,因为尝试过了,之后发现大的问题, 然后放弃了.</em></p>
<h3>过分进行属性分离的后果</h3>
<ul>
<li>1.<strong>可读性:  1星</strong>, 还需要别人是很努力的记下你的缩写表.</li>
<li>2.<strong>可维护性: 1星</strong>, 曾经有个需求让哥去掉, 某tit(上左右1px border),的boder,然后给tit加 一个背景, 代码类似: <strong>bt1 bl1 br1</strong> .丫的, 搜了一下有他娘的40哥文件上百处. </li>
<li>3.<strong>CSS Sprites:1星</strong>, 用CSS Sprites 的时候,会很囧rz ,用了就知道</li>
<li>4.<strong>不可压缩及分布式调用</strong>: 随着需求越来越复杂, 公用样式包会越来越大, 又不能切分, 对于多样化的页面将是噩梦,会遇到 只有丁点样式,而不得不调用庞大样式得尴尬情况</li>
<li>5. 还有好多&#8230;</li>
</ul>
<p>以上只是过分 属性分离的后果.<br />
但是上文中张鑫旭的文章 中也有好的部分, 比如他的 oocss 对象式css 书写规则,<br />
这种对象式的书写方法也是我慢慢积累出来的一种方法.<br />
oocss 的 书写带来的效率及性能可以看这里: <a href="http://www.zhangxinxu.com/wordpress/?p=1045">翻译:同CSS技术及其CSS性能</a><br />
也可以查看我之前写的 <a href="http://www.qilei.org/201008/addon-class-do-not-run-on-ie-6/">又见IE6吐槽~ 并行结构式class引起的bug</a></p>
<p>好了回归主题, 说说我对 OOCSS 对象式css 书写的理解,还有心得.<br />
<span id="more-934"></span></p>
<h3>什么是OOCSS ( Object Oriented CSS ) </h3>
<p>其实我是个土人, 没有5车的学府, 这名字还是之前google 来的 .<br />
这个相信 接触过OO面向对象 思想的人, 马上就能明白 其中的奥义, 飞鱼不才, 大学的时候接触过 oo 的毛皮, 接触了一些as3的面向对象 思想,然后 是php , 最近又在折腾 小八的wince VC.<br />
<em>所以 对oo 还是略懂略懂. 大牛看到了不要取笑,就当是 学前班不懂事的娃</em></p>
<p>所谓面向对象简单的说就是 every thing is object . 其实这句话也挺抽象的 ^__^<br />
更简单的说就是 <strong> 用面向对象的思路 去 书写html 以及css 命名规则.</strong></p>
<h3>OOCSS 是如何在代码里体现的?</h3>
<p>虽然 html 是由div ul li 等dom节点组成, 但是你可以将它们YY 成一些抽象的东西. </p>
<p>比如 你可以把一个网页上的 公告栏 看成 一个 人.<br />
这家伙 的名字叫 lilei 于是 就又了 id=&#8221;lilei&#8221;  ,完了 我想起大猫的 李磊与韩妹妹的 H漫了.<br />
这家伙 是人<em>不废话么</em>,于是就了又了 class=&#8221;humen&#8221;<br />
这家伙 又是蓝种人 , 于是多了一种扩展属性  class=&#8221;humen blue-man&#8221;</p>
<p>于是 对象div 就生成了</p>
<pre><code>div class="humen blue-man" id="lilei"</code></pre>
<p>根据命名规则修正一下就 变成</p>
<pre><code>div class="panel red-style" id="home-notice-panel"</code></pre>
<p>这样来表现 即可以全局控制panel,又可以部分控制red-style, 还可以单独控制 home-notice-panel</p>
<p>然后说 这家伙 有什么 比如<br />
这家伙 又个头 于是 他多了 div class=&#8221;hd&#8221; (&#8220;<em>原先我喜欢用tit&#8221;, 但是yahoo 过分的 只用 hd ,于是我们就妥协了</em>),<br />
头上又什么? 头上写着他的名字丫 不然怎么杀他, 哥可是有死亡笔记加死神之眼滴 ^__^.<br />
对哦 还有个耳环.<em>我把尖括号去掉了,因为要转义,麻烦 应该看得懂吧,看不懂 拉出去 弹jj 10下 </em></p>
<pre><code>div class="humen blue-man" id="lilei"
    div class="hd"
          h2  我是李磊
          span class="more"  耳环
</code></pre>
<p>这个时候 突然: 李磊说话了 &#8221; 丫得 我的头圆角的 &#8221; 滚你丫的~~~ 给你写个 radius (css3属性)不就好啦.<br />
无奈,<br />
加了两个耳朵</p>
<pre><code>div class="humen blue-man" id="lilei"
    div class="hd"
          b class="bgl"  b class="bgr"  //学淘宝 用两个b 标签来实现左右圆角,css实现方法有好多.
          h2  我是李磊
          span class="more"  耳环
</code></pre>
<p>然后是身体部分. </p>
<pre><code>div class="humen blue-man" id="lilei"
    div class="hd"
         ....
    div class="bd"
         ul  li
</code></pre>
<p>李磊说话了: =,= 我叉,我怎么才一条腹肌(li) 而且还是平的,我是那种 8块 腹肌 还有点 古铜的那种<br />
Orz 好吧,给你加上.<br />
<code>ul class="list-mod red-style"</code><br />
这里的red-style <em>在ie6下会跟 上面的red-style 有冲突,所以要想一种命名方式避开冲突</em></p>
<p>好了 让我们 看一下完整的代码:</p>
<pre><code>div class="humen blue-man" id="lilei"
    div class="hd"
          b class="bgl"  b class="bgr"
          h2  我是李磊
          span class="more"  耳环
    div class="bd"
         ul  class="list-mod red-style"
             li
</code></pre>
<h3>OOCSS的优势在哪里 ?</h3>
<p>看了上面的代码 可能你还没了解 oocss 到底好处有哪些.<br />
其实很简单<br />
这个时候如果 你要些一个 韩妹妹 的时候 效果就体现出来了.<br />
你会发现 只要复制上面的代码,然后 修改 一下韩妹妹的特征就 可以了</p>
<pre><code>div class="humen white-man" id="hanmm"   //韩妹妹是白人
    div class="hd"
          //韩妹妹的头是方的,
          h2  我是韩妹妹
          //韩妹妹没有耳环,
          div class="hat" //韩妹妹有个帽子:比如下拉菜单, 可以用id来增强选择器.
    div class="bd"
         ul  //韩妹妹木有 腹肌 =,=
             li
    div class="fd" //韩妹妹有脚~~~~ 难道````李磊木有脚 囧rz~~~~
</code></pre>
<p>然后你应该就会发现,这两个东西有很多东西都是相似的.</p>
<p>他们公用了, humen 对象, 共有了 humen hd ,humen bd .<br />
这样的好处是 那天 人类变异了, 头都变长了, 这个时候只要调 humen hd 就能 把 李磊和韩妹妹的头都变长.</p>
<p>再谈谈 对 <strong>分离样式</strong>的 建议.</p>
<h3>适度合理,系统化的分离样式,</h3>
<p>分离样式我是推荐的, 但是 我不崇尚过度分离, 类似 开头说的那样是不太可取的.<br />
仔细想想我们平常已经又好多分离样式的存在,<br />
比如 clearfix 就是分离样式 还有类似 grid 都是分离样式<br />
可以根据 功能 来区分<br />
比如 clearfix 是用来清除浮动的, grid 是用来 制造栅格系统的.<br />
比如 我平常 做独立的小页面 时使用的 局域 分离样式</p>
<pre><code>.fl = float:left  .fr  float:right  来实现 浮动.
a.ico span.ico 来实现 图标化, 因为做系统的时候会将一些图标做成 CSS Sprites , 省去了ico 时需要写的 overflow:hidden ,text-indent:-999em 等属性.
.abs = position:absolute 绝对定位
.has-abs = postion: relative 绝对定位的容器.
.sp= margin-bottom:8px; //这个我一般会绑在 对象类的子属性上. 因为不同对象的sp 间隔不一样.
</code></pre>
<p>但是我不会写类似 pl4 = padding-left:4px; 这样的 分离样式命名.</p>
<p>好了 说了,这么多仅仅是 分享一下我的心得,有错误 还请指出.</p>
<p>PS: 顺路 关注了一下 css 渲染的东西 , 发现css 的渲染原理 跟之前理解的完全相反<br />
传送门:<a href="http://lushuncheng.cn/show.asp?ArticleID=854">深入学习浏览器CSS解析原理</a><br />
我也抽空研究一下, 这个原理 其实对我之前的css 书写有 冲突的.<br />
有兴趣的一起研究一下.</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201202/how-to-make-well-when-position-absolute/" title="position:absolute 的一些兼容心得。">position:absolute 的一些兼容心得。</a></li><li><a href="http://qilei.org/201111/ie6-reflow-bug/" title="IE6 reflow bug 经验因素收集">IE6 reflow bug 经验因素收集</a></li><li><a href="http://qilei.org/201110/zoom1-cause-a-bug/" title="zoom:1 引起的bug 一则 ">zoom:1 引起的bug 一则 </a></li><li><a href="http://qilei.org/201109/vertical-align-in-different-browser/" title="vertical-align 图片文字水平对齐分析">vertical-align 图片文字水平对齐分析</a></li><li><a href="http://qilei.org/201106/thinking-about-position-relative-on-ie/" title="css心得之善用 position:relative ">css心得之善用 position:relative </a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201009/talking-about-the-oocss-for-web-site/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>神经特长 &#8211; lazy hover  延迟激活jquery 插件</title>
		<link>http://qilei.org/201009/jquery-plugin-of-lazyhover/</link>
		<comments>http://qilei.org/201009/jquery-plugin-of-lazyhover/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 11:58:04 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=907</guid>
		<description><![CDATA[原图地址：淘宝tms里发现，偷过来用用，喜欢就去看看咩~~~ 做导航菜单的时候，有的时候希望，鼠标移到菜单上去过会儿才激活二级菜单，鼠标移出去之后过会儿才消失。jquery自带的 hover 事件是立马响应的。google了下网上好像没lazyhover的插件。于是 就华丽丽的诞生了这个lazyhover 的插件^__^。 闲话少说，先上代码： $(function(){ $.fn.lazyhover = function(fuc_on, fuc_out, de_on, de_out) { var self = $(this); var flag = 1; var h; var handle = function(elm){ clearTimeout(h); if(!flag) self.removeData('timer'); return flag ? fuc_on.apply(elm) : fuc_out.apply(elm); }; var time_on = de_on &#124;&#124; 0; var time_out = de_out &#124;&#124; 500; var timer = function(elm){ [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-915" title="20100907" src="http://www.qilei.org/wp-content/uploads/2010/09/20100907.jpg" alt="" width="600" height="200" /><br />
<em><a href="http://www.flickr.com/photos/dgkingdom/4910886550/in/pool-1142552@N25/">原图地址</a>：淘宝tms里发现，偷过来用用，喜欢就去看看咩~~~</em></p>
<p>做导航菜单的时候，有的时候希望，鼠标移到菜单上去过会儿才激活二级菜单，鼠标移出去之后过会儿才消失。jquery自带的 hover 事件是立马响应的。google了下网上好像没lazyhover的插件。于是 就华丽丽的诞生了这个lazyhover 的插件^__^。</p>
<p>闲话少说，先上代码：</p>
<pre><code>$(function(){
    $.fn.lazyhover = function(fuc_on, fuc_out, de_on, de_out) {
        var self = $(this);
        var flag = 1;
        var h;
        var handle = function(elm){
            clearTimeout(h);
            if(!flag) self.removeData('timer');
            return flag ? fuc_on.apply(elm) : fuc_out.apply(elm);
        };
        var time_on  = de_on  || 0;
        var time_out = de_out || 500;
        var timer = function(elm){
            h &amp;&amp; clearTimeout(h);
            h = setTimeout(function() { handle(elm);  }, flag ? time_on : time_out);
            self.data('timer', h);
        }
        self.hover(
            function(){
                flag = 1 ;
                timer(this);
            },
            function(){
                flag = 0 ;
                timer(this);
            }
        );
    }
});
</code></pre>
<p>插件使用方法我就不说了，直接贴带代码前就可以，当然jquery.js是必要的(<em>丫不用jquery就当看A-V =，=</em>)。<br />
<span id="more-907"></span><br />
算了，还是贴个使用方法吧：<strong>使用方法</strong>其实跟 jquery一样就是多了两个参数，一个是延迟进入的时间(毫秒)，还有一个是延迟退出的时间。</p>
<pre><code>$('#target').lazyhover(
    function(){
            $(this).addClass('unfold');
    },
    function(){
            $(this).addClass('unfold');
    },
    200,1000 //就多了2个参数
);
</code></pre>
<p>目前只是个初版，觉得有好多细节可以优化，<br />
待优化点：</p>
<ul>
<li>1. 比如当延迟时间是0的时候就要避开setTimeout，毕竟setTimeout是个比较耗资源的家伙。</li>
<li>2. 其次当操作对象过多的时候浏览器负载能力的处理，目前是单对象独立时间事件</li>
</ul>
<p>好了打完收工，有意见想射就射出来吧。<em>哥不怕，咩哈哈~~~~ 用脸接着</em><br />
开源才是真汉子。</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201105/the-closure-alike-javascript-platform/" title="闭包式 js架构 前端书写心得(上)">闭包式 js架构 前端书写心得(上)</a></li><li><a href="http://qilei.org/201101/ternary-tip-for-javascript/" title=" 三元运算符 使用小技巧一则 &#8211; javascript"> 三元运算符 使用小技巧一则 &#8211; javascript</a></li><li><a href="http://qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://qilei.org/201003/using-trigger-bind-function-in-jquery-2/" title="隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)">隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201009/jquery-plugin-of-lazyhover/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>又见IE6吐槽~ 并行结构式class引起的bug</title>
		<link>http://qilei.org/201008/addon-class-do-not-run-on-ie-6/</link>
		<comments>http://qilei.org/201008/addon-class-do-not-run-on-ie-6/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 12:29:04 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ie6]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=893</guid>
		<description><![CDATA[这个bug 在以前写代码的时候就碰到过了，因为觉得碰到的几率不高，所以就忽略不计了。 现在又碰上了，就努力的分析了一下，然后共享出来，晒晒更健康。 先说一下历史背景： 最近看了太多架构式的书，写出来的样式都比较戳。比如: 提交成功的提示框会这么写。 div class = "msg-mod error" //html标签就省略了，自己YY ^__^ 所有的信息提示框，用msg-mod 这个通用库来封装。然后 改 通用库包含了一些状态，如：error ，ok ，tip ，notice等来表现“错误，正确，提示，注意”等状态。 于是如果你想写一个输出的正确框就可以写成这样。 div class = "msg-mod ok" 这样做有什么好处呢， 1. 首先样式全局化，使用msg-mod 来全局控制， 2. 使用非常语义化的状态：error,ok ，来衍生出不同的样式(使用并行结构式方法来实现，后面会解释)。 3. 更适合功能的一些特性：有些时候需要使用js 动态的改变msg的样式，这样写出来的js 语义也更强，可读性也增强。 如何实现： 这个应该都清楚。我就一笔带过，贴个代码。 div.msg-mod{ //全局msg-mod 样式，并且有一种初始的样式，使用div开头，增加选择器效率。 padding:5px 7px; border:1px solid #92e577; background-color:#eefbed; } 然后通过结构式定义不同状态的样式，这种将两个class组合起来， 并行定义的样式，我称之为并行结构式 div.msg-mod.error{ //error 状态 border:1px [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-894" title="20100816" src="http://www.qilei.org/wp-content/uploads/2010/08/20100816.png" alt="" width="600" height="250" /><br />
这个bug 在以前写代码的时候就碰到过了，因为觉得碰到的几率不高，所以就忽略不计了。<br />
<em>现在又碰上了，就努力的分析了一下，然后共享出来，晒晒更健康。</em></p>
<p>先说一下历史背景：<br />
最近看了太多架构式的书，写出来的样式都比较戳。比如: 提交成功的提示框会这么写。</p>
<pre><code>div class = "msg-mod error" //html标签就省略了，自己YY ^__^</code></pre>
<p>所有的信息提示框，用msg-mod 这个通用库来封装。然后 改 通用库包含了一些状态，如：error ，ok ，tip ，notice等来表现“错误，正确，提示，注意”等状态。<br />
于是如果你想写一个输出的正确框就可以写成这样。</p>
<pre><code>div class = "msg-mod ok"</code></pre>
<p>这样做有什么好处呢，</p>
<ul>
<li>1. 首先样式全局化，使用msg-mod 来全局控制，</li>
<li>2. 使用非常语义化的状态：error,ok ，来衍生出不同的样式(<em>使用并行结构式方法来实现，后面会解释</em>)。</li>
<li>3. 更适合功能的一些特性：有些时候需要使用js 动态的改变msg的样式，这样写出来的js 语义也更强，可读性也增强。</li>
</ul>
<p><span id="more-893"></span></p>
<h2>如何实现：</h2>
<p>这个应该都清楚。我就一笔带过，贴个代码。</p>
<pre><code>div.msg-mod{  //全局msg-mod 样式，并且有一种初始的样式，使用div开头，增加选择器效率。
    padding:5px 7px;
    border:1px solid #92e577;
    background-color:#eefbed;
}</code></pre>
<p>然后通过结构式定义不同状态的样式，<em>这种将两个class组合起来， 并行定义的样式，我称之为并行结构式</em></p>
<pre><code>div.msg-mod.error{  //error 状态
    border:1px solid #ff8c40;
    background-color:#fff5e6;
}
div.msg-mod.notice{           //notice 状态
    border:1px solid #ffcc7f;
    background-color:#ffffe5;
}
</code></pre>
<h2>思维扩展：</h2>
<p>这样的表现形式还能接受吧？ 那么我们继续扩展。比如：如果想给一些msg-mod 添加图片来增加视觉效果(如配图^__^)。<br />
要想配图么，于是又给msg-mod 新加了个class属性 has-ico，<em>当然有人会说：默认为什么不给所有msg-mod都配图，给没图的配上属性no-ico，嘎嘎随你~~~</em>，因为后面还有，慢慢看下去就知道了。</p>
<pre><code>div class = "msg-mod has-ico ok"
  h2  提交成功
  p   订单已成功递交，请进入我的订单查看订单状态。</code></pre>
<p>如上面的代码 当有 大字的时候就使用 大的ico图标，当只有小字的时候，使用小ico。(如配图=，=)<br />
于是乎我又添加了个属性 has-sml-ico。</p>
<pre><code>div class = "msg-mod has-sml-ico ok"
  p   订单已成功递交，请进入我的订单查看订单状态。</code></pre>
<p><em>然后在css样式实现的时候又重现了这个IE6bug，就是IE6下用并行结构式实现不了大小图配置。</em></p>
<h2>分析原因：</h2>
<p>经过分析，发现原因是，IE6在解析并行结构式的时候会出现解析错乱现象。比如</p>
<pre><code>div.msg-mod.notice.has-ico{  //notice 有has-ico 的时候显示notice 图标
     background:...
}
div.msg-mod.error.has-ico{  //error  有has-ico 的时候显示error 图标
     background:...
}</code></pre>
<p>这个时候，非IE6情况下，都能够根据css 的结构来显示出想要的结果，但是IE6脑残了，就将其解析成。</p>
<pre><code>div.msg-mod.has-ico{   //忽略了中间的class。
     background:...
}</code></pre>
<p><em>这样IE6下就以最后一个样式来呈现has-ico的状态。</em>有兴趣可以回家试试，oh yah。</p>
<pre><code>div.msg-mod.error.has-ico{  //error  有has-ico 的时候显示error 图标
     background:...
}</code></pre>
<p>当然有人会说：那把结构式换成 <code>div.msg-mod.has-ico.error</code>试试。<br />
经过尝试，IE6同样会忽略掉中间的class，解析成<code>div.msg-mod.error</code>囧rz~~~~</p>
<p>然后就无解。 ··· 折腾了好久，终于放弃了。然后想了另外的情况来解决。</p>
<h2>解决方法：</h2>
<p>导致样式错乱的原因初步定位为：3层class 并行结构式会忽略中间的class，(<em>或者说忽略掉第一个也可能，具体我没有深入研究</em>)<br />
解决办法很简单，当然跟解决IE6的其他办法一样，能避开就避开，用其他方式来实现。<br />
于是乎，重新整理了代码思路，整理如下：<br />
既然 并行结构式会导致bug，那么不并行的结构式会有问题么？<br />
我将图片的实现放在子标签h2 上来实现，问题就解决了。如下：</p>
<pre><code>div.msg-mod.error.has-ico h2{
     background:...
}</code></pre>
<p>得出结论，使用非并行结构式样式在IE6下有解。·· oh yah。<br />
不过以上代码还有些bug，这样会对msg-mod 下的所有h2 都增加了图标，于是这样优化了一下。</p>
<pre><code>div.msg-mod.has-ico{
    padding-left:42px;
}
div.msg-mod.has-ico h2.ico{
    margin-left:-37px;
}
div.msg-mod h2.ico{
    padding:7px 5px 10px 37px;
}
div.msg-mod.error h2.ico{
     background:...
}</code></pre>
<p>这样这样实现，通过给msg-mod添加has-ico 属性给内容增加左侧留白(多行的时候)。通过给h2添加ico样式来添加图标。当然单行时候也可以不用加ico，但是根据语义化，还是加上会happy 点。<br />
同样实现小图的时候就 添加 has-sml-ico属性，在标签p上添加ico 样式。代码如下：</p>
<pre><code>div.msg-mod.has-sml-ico{
    padding-left:30px;
}
div.msg-mod.has-sml-ico p.ico{
    margin-left:-25px;
}
div.msg-mod p.ico{
    padding:0 5px 0 20px;
}
div.msg-mod.notice p.ico{
     background:...
}</code></pre>
<p>这样，有效的避免了并行结构式带来的错乱压力~~~~ 万恶的IE6丫~~~~<br />
这样处理有利有弊啦··。<br />
就是必须要在里面的标签上多加一个ico 的样式。</p>
<p>其他目前还没有碰到什么问题。<strong>欢迎反馈~~·</strong></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/200808/css-for-png-in-ie6/" title="IE6下PNG图片背景不透明的问题">IE6下PNG图片背景不透明的问题</a></li><li><a href="http://qilei.org/201202/how-to-make-well-when-position-absolute/" title="position:absolute 的一些兼容心得。">position:absolute 的一些兼容心得。</a></li><li><a href="http://qilei.org/201111/ie6-reflow-bug/" title="IE6 reflow bug 经验因素收集">IE6 reflow bug 经验因素收集</a></li><li><a href="http://qilei.org/201110/zoom1-cause-a-bug/" title="zoom:1 引起的bug 一则 ">zoom:1 引起的bug 一则 </a></li><li><a href="http://qilei.org/201109/vertical-align-in-different-browser/" title="vertical-align 图片文字水平对齐分析">vertical-align 图片文字水平对齐分析</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201008/addon-class-do-not-run-on-ie-6/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>一知半解 &#8211; 分析淘宝商城首页的 lazy load 功能</title>
		<link>http://qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/</link>
		<comments>http://qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 04:35:09 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[生活琐碎]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lazy load]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=861</guid>
		<description><![CDATA[最近趁部门搬至淘宝办公。 研究了一下之前就开始注意的 ：商城首页 的lazy load 实现(也可以说是：伪异步加载)。 首先解释一下商城 的 lazy load 是怎么一回事。 我们打开商城后发现，当你拖动滚动条往下，第二屏以下的东西才慢慢加载出来。 这样做能在初次打开的时候http 请求将大幅度减少，并且页面加载速度也提高不少。 上面说的 伪异步加载 是咋一看的推测，感觉像是滚动到那里的时候 整一个ajax请求，将下面内容加载进来。 后来在不经意之间看了下源代码发现的。 看下面是商城的源码截图。 从图中可以看出，源码中有很多 textarea 的标签，里面的值就是即将要加载的html，然后就恍然大悟，原来所谓异步加载也可以这样来实现。 分析实现流程 首先是将要加载的html代码 丢进textarea 里，因为此时html 在 textarea 是一直val形式，不会被浏览器解析渲染，所以页面在刚加载的时候只显示第一屏。然后通过计算滚动条的相对偏移(数学问题)，将textarea的val 值添加到html 的dom里 ，因为浏览器是即时解析的，新添加的dom 会被重新渲染，这样新加的html 就显示出来了。这个就是所谓的lazy load ：伪异步加载。 为什么要用textarea ? 其实这个东西估计是 因为html 标签的限制，这个方法的设计之初，设计师想将 硕大的html数据 缓存在一个不会被解析标签里，然后就发现textarea 刚好符合期望。 为什么不用ajax ? 因为数据不需要验证，不是时变性的数据，再者使用ajax 会增加http请求，并且维护性不好。 目前淘宝的 TMS 后台系统 都是模版化引擎，使用ajax 会对 模版化 [...]]]></description>
			<content:encoded><![CDATA[<p>最近趁部门搬至淘宝办公。<br />
研究了一下之前就开始注意的 ：<strong>商城首页</strong> 的lazy load 实现(也可以说是：伪异步加载)。<br />
首先解释一下商城 的 lazy load 是怎么一回事。<br />
我们打开商城后发现，当你拖动滚动条往下，第二屏以下的东西才慢慢加载出来。<br />
这样做能在初次打开的时候http 请求将大幅度减少，并且页面加载速度也提高不少。</p>
<p>上面说的 伪异步加载 是咋一看的推测，感觉像是滚动到那里的时候 整一个ajax请求，将下面内容加载进来。<br />
<em>后来在不经意之间看了下源代码发现的。</em><br />
看下面是商城的源码截图。<br />
<img src="http://www.qilei.org/wp-content/uploads/2010/06/20100630_1.png" alt="" title="20100630_1" width="600" height="250" class="alignnone size-full wp-image-862" /><br />
从图中可以看出，源码中有很多 textarea 的标签，里面的值就是即将要加载的html，然后就恍然大悟，原来所谓异步加载也可以这样来实现。</p>
<h3>分析实现流程</h3>
<p>首先是将要加载的html代码 丢进textarea 里，因为此时html 在 textarea 是一直val形式，不会被浏览器解析渲染，所以页面在刚加载的时候只显示第一屏。然后通过计算滚动条的相对偏移(数学问题)，将textarea的val 值添加到html 的dom里 ，因为浏览器是即时解析的，新添加的dom 会被重新渲染，这样新加的html 就显示出来了。这个就是所谓的lazy load ：伪异步加载。<span id="more-861"></span></p>
<h3>为什么要用textarea ? </h3>
<p>其实这个东西估计是 因为html 标签的限制，这个方法的设计之初，设计师想将 硕大的html数据 缓存在一个不会被解析标签里，然后就发现textarea 刚好符合期望。</p>
<h3>为什么不用ajax ?</h3>
<p>因为数据不需要验证，不是时变性的数据，再者使用ajax 会增加http请求，并且维护性不好。<br />
目前淘宝的 TMS 后台系统 都是模版化引擎，使用ajax 会对 模版化 引擎 产生冲突 以及 维护成本高等。</p>
<h3>如何实现？</h3>
<p>从实现流程来讲，这个功能实现起来没什么难度，唯一有难度的是，怎样把这个功能做成一个通用的模块，简易添加 class 以及配置就可以实现等来提高重用特性。</p>
<h3>有合弊端</h3>
<p>优点那么多，缺点又怎样呢·？<br />
SEO：存在textarea 里的数据 能不能被 搜索引擎抓取呢？ 这个我最近在自己blog里研究一下。<br />
web标准： 这样的做符合web标准么？将html代码放在textarea来实现 <em>飞鱼：只是一个标准而已。</em></p>
<p>好了 打完收工~~~</p>
<p><em>===============2011年4月29日= 更新===================</em></p>
<h3>SEO 的影响</h3>
<p>我尝试着在项目中的list 页面中使用了这样的textarea 形式加载方法：(以下搜索引擎主要以google引擎来分析，<em> 度娘V5 玩不起</em>)<br />
发现 seo 是能抓到 textrea 中的内容的，<br />
1. 研究有发现 textarea 里的内容会被google搜索引擎当作大段内容形式来表现(<em>google 会以为textarea 里的内容是‘正文’ 的错觉</em>) ，如果是类似内容页，建议将textarea 部分放在内容部分之后，这样能让google 将真正的内容部分抓去当作正文。<br />
2. textarea 里的html 代码也会因此暴露出来 通过查看抓取页面(site:xxx.com)会发现(搜索结果的表述里会有html 代码出现) 因为google 认为这是内容而不是代码。<br />
3. 因为以value 形式存在于 textrea 里，于是这里面的链接 会被google直接跳过， 当然有好处有坏处，好处是 google 可以快速得跳过这些链接 加快网页抓取，坏处是 会错过这些 链接(<em>只要做好sitemap 就能避免这样的问题</em>) </p>
<p>以上： 如果有 好的idea 欢迎交流·· ^__^ 俺们都是菜菜鸟</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://qilei.org/201105/the-closure-alike-javascript-platform/" title="闭包式 js架构 前端书写心得(上)">闭包式 js架构 前端书写心得(上)</a></li><li><a href="http://qilei.org/200910/cross-scripting/" title="js跨域问题">js跨域问题</a></li><li><a href="http://qilei.org/200910/javascript-judge-if-chinese/" title="判断输入的字符是否为中文">判断输入的字符是否为中文</a></li><li><a href="http://qilei.org/200907/jquery-navbar/" title="乱翻乱教- jQuery 制作N级导航菜单">乱翻乱教- jQuery 制作N级导航菜单</a></li><li><a href="http://qilei.org/200906/fastest-way-to-build-an-html-string/" title="乱翻乱教-使用JS输出HTML串最快的方法">乱翻乱教-使用JS输出HTML串最快的方法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

