<?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/"
	>

<channel>
	<title>{CSS WORK}</title>
	<atom:link href="http://www.csswork.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.csswork.cn</link>
	<description>css work</description>
	<pubDate>Wed, 22 Apr 2009 06:57:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>《五星招待所》</title>
		<link>http://www.csswork.cn/play/%e3%80%8a%e4%ba%94%e6%98%9f%e6%8b%9b%e5%be%85%e6%89%80%e3%80%8b.html</link>
		<comments>http://www.csswork.cn/play/%e3%80%8a%e4%ba%94%e6%98%9f%e6%8b%9b%e5%be%85%e6%89%80%e3%80%8b.html#comments</comments>
		<pubDate>Wed, 22 Apr 2009 06:54:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PLAY 玩儿]]></category>

		<category><![CDATA[Photo]]></category>

		<category><![CDATA[摄影]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/play/%e3%80%8a%e4%ba%94%e6%98%9f%e6%8b%9b%e5%be%85%e6%89%80%e3%80%8b.html</guid>
		<description><![CDATA[

 









======================
原型是国外的一组作品。




出处：PCHome
来源：http://www.ozine.cn/
]]></description>
			<content:encoded><![CDATA[<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeythzUZmEI/AAAAAAAABCs/1TwkBxJVT_4/s800/pics_sukhio_1240223161.jpg" height="600" width="536"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeytiAvgI9I/AAAAAAAABDE/3m2E39nEBDg/s800/pics_sukhio_1240223306.jpg" height="600" width="536"/></p>
<p> <span id="more-221"></span>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeytNaWHaEI/AAAAAAAABCM/MlmpPPYF87w/s800/pics_sukhio_1240222994.jpg" height="600" width="536"/></p>
<p><img src="http://lh3.ggpht.com/_6p3hNkUNWrQ/SeytNafZleI/AAAAAAAABCU/qhXvagJ7Iik/s800/pics_sukhio_1240223044.jpg" height="600" width="536"/></p>
<p><img src="http://lh4.ggpht.com/_6p3hNkUNWrQ/SeytNPpvh9I/AAAAAAAABCE/FqMwZs9SS-U/s800/pics_sukhio_1240222946.jpg" height="600" width="536"/></p>
<p><img src="http://lh6.ggpht.com/_6p3hNkUNWrQ/SeytNe2A6BI/AAAAAAAABCc/DR5uZRGWIB0/s800/pics_sukhio_1240223086.jpg" height="600" width="536"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeytNeon8QI/AAAAAAAABCk/zj8S7mTUcd4/s800/pics_sukhio_1240223130.jpg" height="600" width="536"/></p>
<p><img src="http://lh3.ggpht.com/_6p3hNkUNWrQ/Seyth3kHOQI/AAAAAAAABC0/uY7x3me6Za0/s800/pics_sukhio_1240223216.jpg" height="600" width="536"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/Seyth3-FphI/AAAAAAAABC8/wQWWapOaPm8/s800/pics_sukhio_1240223257.jpg" height="600" width="536"/></p>
<p><img src="http://lh3.ggpht.com/_6p3hNkUNWrQ/SeytiKq2KPI/AAAAAAAABDM/LlIaYSV1KLo/s800/pics_sukhio_1240223335.jpg" height="600" width="536"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeywBqsOh4I/AAAAAAAABD0/tzkNr7QiM64/s800/pics_vigilant_1240223432.jpg" height="600" width="536"/></p>
<p>======================</p>
<p>原型是国外的一组作品。</p>
<p><img src="http://lh6.ggpht.com/_6p3hNkUNWrQ/SeytuQ4wFSI/AAAAAAAABDU/4n4RoFqs6DU/s800/pics_deepee_1240224773.jpg" height="800" width="382"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeytubF7J_I/AAAAAAAABDc/5MWpgfrOJoI/s800/pics_deepee_1240224809.jpg" height="800" width="382"/></p>
<p><img src="http://lh5.ggpht.com/_6p3hNkUNWrQ/SeytuZxj-oI/AAAAAAAABDk/wx4FgCkPIqs/s800/pics_deepee_1240224833.jpg" height="800" width="382"/></p>
<p><img src="http://lh3.ggpht.com/_6p3hNkUNWrQ/Seytun4QMzI/AAAAAAAABDs/cOrEwB6AH0M/s800/pics_deepee_1240224858.jpg" height="800" width="382"/></p>
<p>出处：<a href="http://club.pchome.net/topic_1_15_3560129.html" target="_blank">PCHome</a></p>
<p>来源：<a href="http://www.ozine.cn/">http://www.ozine.cn/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/play/%e3%80%8a%e4%ba%94%e6%98%9f%e6%8b%9b%e5%be%85%e6%89%80%e3%80%8b.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>所有图片丢失，over</title>
		<link>http://www.csswork.cn/uncategorized/%e6%89%80%e6%9c%89%e5%9b%be%e7%89%87%e4%b8%a2%e5%a4%b1%ef%bc%8cover.html</link>
		<comments>http://www.csswork.cn/uncategorized/%e6%89%80%e6%9c%89%e5%9b%be%e7%89%87%e4%b8%a2%e5%a4%b1%ef%bc%8cover.html#comments</comments>
		<pubDate>Thu, 19 Mar 2009 05:44:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=219</guid>
		<description><![CDATA[=_=
]]></description>
			<content:encoded><![CDATA[<p>=_=</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/uncategorized/%e6%89%80%e6%9c%89%e5%9b%be%e7%89%87%e4%b8%a2%e5%a4%b1%ef%bc%8cover.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Office 2007發布文章測試~~~</title>
		<link>http://www.csswork.cn/web-php/office-2007%e7%99%bc%e5%b8%83%e6%96%87%e7%ab%a0%e6%b8%ac%e8%a9%a6.html</link>
		<comments>http://www.csswork.cn/web-php/office-2007%e7%99%bc%e5%b8%83%e6%96%87%e7%ab%a0%e6%b8%ac%e8%a9%a6.html#comments</comments>
		<pubDate>Fri, 20 Feb 2009 06:26:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/uncategorized/office-2007%e7%99%bc%e5%b8%83%e6%96%87%e7%ab%a0%e6%b8%ac%e8%a9%a6.html</guid>
		<description><![CDATA[這是一篇使用Office 2007發布的Blog文章。


 

	
這張圖片通過剪切板功能上傳。

 
 
現在的問題是


     1，找不到源代碼編輯模式。

     2，文章無法分類，只能發布的默認類別。

     3 ，無法插入Tags


 
 
不過已經足夠強大了！繼續研究
]]></description>
			<content:encoded><![CDATA[<p><strong>這是一篇使用Office 2007發布的Blog文章。<br />
</strong></p>
<p>
 </p>
<p style="text-align: center"><img src="http://www.csswork.cn/wp-content/uploads/2009/02/022009-0026-office2007113.png" alt=""/>
	</p>
<p>這張圖片通過剪切板功能上傳。
</p>
<p> <br />
 </p>
<p>現在的問題是
</p>
<ol>
<li>     1，找不到源代碼編輯模式。
</li>
<li>     2，文章無法分類，只能發布的默認類別。
</li>
<li>     3 ，無法插入Tags
</li>
</ol>
<p> <br />
 </p>
<p>不過已經足夠強大了！繼續研究</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/office-2007%e7%99%bc%e5%b8%83%e6%96%87%e7%ab%a0%e6%b8%ac%e8%a9%a6.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>poladroid windows版总算发布了。</title>
		<link>http://www.csswork.cn/photo-pic/poladroid-for-windows.html</link>
		<comments>http://www.csswork.cn/photo-pic/poladroid-for-windows.html#comments</comments>
		<pubDate>Sun, 28 Dec 2008 07:56:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHOTO 记录生活]]></category>

		<category><![CDATA[Photo]]></category>

		<category><![CDATA[poladroid]]></category>

		<category><![CDATA[下载]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=135</guid>
		<description><![CDATA[ poladroid是一个模仿宝丽来相机效果的软件，一直以来只有Mac版。不过非常高兴的是,昨天作者终于释出了Windows版的下载。感兴趣的同学可以点击这里到官方下载。
]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.csswork.cn/wp-content/uploads/2008/12/poladroid-for-windows.jpg" style="WIDTH: 350px; HEIGHT: 150px" title="poladroid-for-windows" height="150px" width="350px" alt="poladroid-for-windows" class="alignleft size-full wp-image-136"/> <br/>poladroid是一个模仿宝丽来相机效果的软件，一直以来只有Mac版。不过非常高兴的是,昨天作者终于释出了Windows版的下载。感兴趣的同学可以<a href="http://www.poladroid.net/download.html">点击这里</a>到官方下载。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/photo-pic/poladroid-for-windows.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress自动截断字符的几种方法。</title>
		<link>http://www.csswork.cn/web-php/wordpress-truncated-characters.html</link>
		<comments>http://www.csswork.cn/web-php/wordpress-truncated-characters.html#comments</comments>
		<pubDate>Fri, 26 Dec 2008 09:49:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[themes]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=132</guid>
		<description><![CDATA[1.PHP方法

&#60;?php 
echo mb_strimwidth(//调用mb_string的extension方法
strip_tags(//过滤字符中的源代码
apply_filters(&#8217;the_content&#8217;, $post-&#62;post_content)//过滤截取的内容。
),
0, 80,&#34;&#8230;&#34;);//80是字符长度，另外这边可以设定强制编码。
?&#62;

优点：简单有效，通用性强。
缺点：服务器必须开启PHP的mb_string模块。
其他的PHP截断字符的方法都需要写函数，比较麻烦，这里就不多说了。


2.jQuery方法。

$(document).ready(function(){
 $(&#34;[@limit]&#34;).each(function(){
  var Text = $(this).text();//获得内容，这里会过滤小HTML代码
  var textLength = $(this).text().length;//得到内容字节数
  var num = $(this).attr(&#34;limit&#34;);//获得需要截取的值
  //alert(textLength)
  if(textLength &#62; num){
  $(this).attr(&#34;title&#34;,Text);//将完整内容写入标签Title，有利于客户体验。
  $(this).text(Text.substring(0,num) + &#34;&#8230;&#34;);//&#8230;是结尾最加的东西
  }
  });
  });

&#60;h2 limit=&#34;24&#34;&#62;截取内容截取内容截取内容截取内容截取内容截取内容截取内容截取内容&#60;/h2&#62;


优点：通用性强，有利于SEO。
缺点：稍微有点难，另外当前页面需要截取的内容过多的话可能对客户端造成压力。
3.CSS方法。

h2.title{ 
width:200px; // 宽度
height:24px; // 高度 
overflow:hidden; // 裁切超出部分 
text-overflow:ellipsis; // 显示省略号，Firefox无效。 
white-space:nowrap; // 强制不换行 。
}


优点：简单。
缺点：通用性差。
]]></description>
			<content:encoded><![CDATA[<h3 style="font-size:12px;">1.PHP方法</h3>
<div class="code">
<p>&lt;?php </p>
<p>echo mb_strimwidth(//调用mb_string的extension方法</p>
<p>strip_tags(//过滤字符中的源代码</p>
<p>apply_filters(&#8217;the_content&#8217;, $post-&gt;post_content)//过滤截取的内容。</p>
<p>),</p>
<p>0, 80,&quot;&#8230;&quot;);//80是字符长度，另外这边可以设定强制编码。</p>
<p>?&gt;</p>
</div>
<p>优点：简单有效，通用性强。</p>
<p>缺点：服务器必须开启PHP的mb_string模块。</p>
<p>其他的PHP截断字符的方法都需要写函数，比较麻烦，这里就不多说了。</p>
<p>
</p>
<p><H3 style="padding:20px 0 0 0; font-size:12px;">2.jQuery方法。</H3></p>
<div class="code">
<p>$(document).ready(function(){</p>
<p> $(&quot;[@limit]&quot;).each(function(){<br />
  var Text = $(this).text();//获得内容，这里会过滤小HTML代码<br />
  var textLength = $(this).text().length;//得到内容字节数<br />
  var num = $(this).attr(&quot;limit&quot;);//获得需要截取的值<br />
  //alert(textLength)<br />
  if(textLength &gt; num){<br />
  $(this).attr(&quot;title&quot;,Text);//将完整内容写入标签Title，有利于客户体验。<br />
  $(this).text(Text.substring(0,num) + &quot;&#8230;&quot;);//&#8230;是结尾最加的东西<br />
  }<br />
  });</p>
<p>  });
</p>
<p>&lt;h2 limit=&quot;24&quot;&gt;截取内容截取内容截取内容截取内容截取内容截取内容截取内容截取内容&lt;/h2&gt;
</p>
</div>
<p>优点：通用性强，有利于SEO。</p>
<p>缺点：稍微有点难，另外当前页面需要截取的内容过多的话可能对客户端造成压力。</p>
<p><H3 style="padding:20px 0 0 0; font-size:12px;">3.CSS方法。</H3></p>
<div class="code">
<p>h2.title{ <br />
width:200px; // 宽度<br />
height:24px; // 高度 <br />
overflow:hidden; // 裁切超出部分 <br />
text-overflow:ellipsis; // 显示省略号，Firefox无效。 <br />
white-space:nowrap; // 强制不换行 。<br />
}
</p>
</div>
<p>优点：简单。</p>
<p>缺点：通用性差。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/wordpress-truncated-characters.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.7模板 【B-blog】 提供下载</title>
		<link>http://www.csswork.cn/my-work/wordpress-theme-bblog-download.html</link>
		<comments>http://www.csswork.cn/my-work/wordpress-theme-bblog-download.html#comments</comments>
		<pubDate>Thu, 25 Dec 2008 03:11:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[WORK 工作]]></category>

		<category><![CDATA[themes]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[下载]]></category>

		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=115</guid>
		<description><![CDATA[
此模板使用了WordPress2.7的新函数wp_page_menu以及wp_list_comments。并且没有做向下兼容出来，所以在您使用此模板之前，请确认您使用的WordPress版本是2.7及以上。
如果您需要回复嵌套功能，请到后台打开相应选项，另本模板支持2层，以上会出现错位。

.list_this{padding:0 0 10px 20px;}
.list_this li{list-style:disc; padding:3px 0;}

关于模板设置：

请打开sidebar.php，找到第12行的?page_id=52，把52这个数字改成你现在使用的About的Id。
如果你需要增加Ajax获得内容的数量，可以修改common.js第17行，65这个值就可以。

关于SEO：

首页:请修Header.php的12及13行替换为你自己的内容。
内容页：自动加入Keys及正文的前200个字节。如果您习惯使用摘要的话可以将Header.php的第16行替换成$post-&#62;post_excerpt;。
分类页：将自动将分类说明加入到description内.

如果您有其他问题可以留言。点击这里下载
]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-116" title="b-blog-themes" src="http://www.csswork.cn/wp-content/uploads/2008/12/screenshot.png" alt="b-blog-themes" style="width:300px; height:200px; float:left; margin-right:10px;"/></p>
<p style="padding:5px 0;">此模板使用了WordPress2.7的新函数wp_page_menu以及wp_list_comments。并且没有做向下兼容出来，所以在您使用此模板之前，请确认您使用的WordPress版本是2.7及以上。</p>
<p style="padding:5px 0;">如果您需要回复嵌套功能，请到后台打开相应选项，另本模板支持2层，以上会出现错位。</p>
<style>
.list_this{padding:0 0 10px 20px;}
.list_this li{list-style:disc; padding:3px 0;}
</style>
<h3 style="font-size:12px; padding:20px 0 5px 0; clear:both;">关于模板设置：</h3>
<ol class="list_this">
<li>请打开sidebar.php，找到第12行的?page_id=52，把52这个数字改成你现在使用的About的Id。</li>
<li>如果你需要增加Ajax获得内容的数量，可以修改common.js第17行，65这个值就可以。</li>
</ol>
<h3 style="font-size:12px; padding:10px 0 5px 0;">关于SEO：</h3>
<ol class="list_this">
<li>首页:请修Header.php的12及13行替换为你自己的内容。</li>
<li>内容页：自动加入Keys及正文的前200个字节。如果您习惯使用摘要的话可以将Header.php的第16行替换成$post-&gt;post_excerpt;。</li>
<li>分类页：将自动将分类说明加入到description内.</li>
</ol>
<p align="center" style="padding:5px 0;"><strong>如果您有其他问题可以留言。</strong><a href="http://www.csswork.cn/wp-content/uploads/2008/12/b-blog.rar">点击这里下载</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/my-work/wordpress-theme-bblog-download.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>DD_belatedPNG,最新的PNG-24 For ie6解决方案。 (&#8230;Better late than never!)</title>
		<link>http://www.csswork.cn/web-php/dd_belatedpng-png-24-for-ie6.html</link>
		<comments>http://www.csswork.cn/web-php/dd_belatedpng-png-24-for-ie6.html#comments</comments>
		<pubDate>Sun, 14 Dec 2008 02:33:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[PNG]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=67</guid>
		<description><![CDATA[
今天闲逛老外Bolg看到，非常了得。
支持背景循环和定位，以前一直没有类似的解决方案。
支持focus，Hover。用滤镜的话这个问题很麻烦，或者用定位脱离父子关系，或者Z-index来叠加。
整个文档压缩后是4Kb，实施非常简单。( 支持Css2选择器）
多的不说了，自己看吧。
http://www.dillerdesign.com/experiment/DD_belatedPNG
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/12/san.jpg"><img class="alignnone size-medium wp-image-68" title="san" src="http://www.csswork.cn/w/wp-content/uploads/2008/12/san.jpg" alt="DD_belatedPNG,最新的PNG-24 For ie6解决方案。 (...Better late than never!)" /></a></p>
<p>今天闲逛老外Bolg看到，非常了得。</p>
<p>支持背景循环和定位，以前一直没有类似的解决方案。<br />
支持focus，Hover。用滤镜的话这个问题很麻烦，或者用定位脱离父子关系，或者Z-index来叠加。<br />
整个文档压缩后是4Kb，实施非常简单。( 支持Css2选择器）<br />
多的不说了，自己看吧。</p>
<p><a href="http://www.dillerdesign.com/experiment/DD_belatedPNG" target="_blank">http://www.dillerdesign.com/experiment/DD_belatedPNG</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/dd_belatedpng-png-24-for-ie6.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>首页的程序总算搞定了~</title>
		<link>http://www.csswork.cn/my-work/music-box-home-template.html</link>
		<comments>http://www.csswork.cn/my-work/music-box-home-template.html#comments</comments>
		<pubDate>Mon, 08 Dec 2008 20:07:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[WORK 工作]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[themes]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=64</guid>
		<description><![CDATA[

感谢小猪帮我修改细节，感谢木木同志帮我搞定PHP程序循环问题，感谢CCAV，感谢MTV，谢谢，谢谢大家~好了，继续搞内页吧。

]]></description>
			<content:encoded><![CDATA[<p><a href="http://174.132.89.2/~csswork/MusicBox/"><img class="alignnone size-full wp-image-65" title="wordpress-music-themes" src="http://www.csswork.cn/w/wp-content/uploads/2008/12/wordpress-music-themes1.jpg" alt="wordpress音乐模板" /></a><br />
<br/></p>
<p>感谢小猪帮我修改细节，感谢木木同志帮我搞定PHP程序循环问题，感谢CCAV，感谢MTV，谢谢，谢谢大家~好了，继续搞内页吧。</p>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/my-work/music-box-home-template.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>重庆森林</title>
		<link>http://www.csswork.cn/music-video/chungking-express-post.html</link>
		<comments>http://www.csswork.cn/music-video/chungking-express-post.html#comments</comments>
		<pubDate>Sun, 02 Nov 2008 19:44:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[MUSIC & VIDEO]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[VIDEO]]></category>

		<category><![CDATA[怀旧]]></category>

		<category><![CDATA[电影]]></category>

		<category><![CDATA[重庆森林]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=62</guid>
		<description><![CDATA[
周末在家重温了一遍。
下面是贯彻整部电影的插曲《california Dreaming》

]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.csswork.cn/w/wp-content/uploads/2008/11/chungking-express.jpg'><img src="http://www.csswork.cn/w/wp-content/uploads/2008/11/chungking-express.jpg" alt="重庆森林，电影海报。" title="重庆森林" class="alignnone size-medium wp-image-63" /></a><br />
周末在家重温了一遍。<br />
下面是贯彻整部电影的插曲《california Dreaming》<br/><br />
<embed src="mplay/dewplayer-mini.swf" flashvars="son=http://xinxin.xs2046.com/music/california%20dreaming.mp3&amp;autoplay=0" wmode="transparent" height="20" width="200"></embed><br/><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/music-video/chungking-express-post.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Global Financial Crisis in Photos</title>
		<link>http://www.csswork.cn/uncategorized/the-global-financial-crisis-in-photos.html</link>
		<comments>http://www.csswork.cn/uncategorized/the-global-financial-crisis-in-photos.html#comments</comments>
		<pubDate>Sat, 18 Oct 2008 15:17:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<category><![CDATA[金融危机]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=61</guid>
		<description><![CDATA[
Rough Seas
The sculpture of a sinking boat which sits in London&#8217;s Thames river in front of the city&#8217;s business center, seemed an apt metaphor for state of the global financial market on Tuesday.
波涛汹涌的海面
这座城市商业中心前泰晤士河里坐落着一条正在下沉的船的雕像，仿佛是对周二全球金融市场状况的一种暗喻。
via:time.com扩展阅读:国内经济形势-天涯


Time for Reflection
Pedestrians walk by a window displaying the Nikkei share prices in Tokyo on Tuesday.
映像之时
行人们走过日经新闻显示周二日本东京价格的窗户。

Last Exit
Speaker of the House Nancy Pelosi, Majority [...]]]></description>
			<content:encoded><![CDATA[<p style="padding:0 0 5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_01.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Rough Seas<br />
</span></strong>The sculpture of a sinking boat which sits in London&#8217;s Thames river in front of the city&#8217;s business center, seemed an apt metaphor for state of the global financial market on Tuesday.</p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>波涛汹涌的海面</strong></span></p>
<p style="padding:5px 0;">这座城市商业中心前泰晤士河里坐落着一条正在下沉的船的雕像，仿佛是对周二全球金融市场状况的一种暗喻。</p>
<p style="padding:10px 0; text-align:right;"><a href="http://www.time.com/time/photogallery/0,29307,1845923_1774401,00.html" target="_blank">via:time.com</a><a style="padding-left:10px;" title="大家说说各自公司的情况，汇总一下，看看，经济形势！！！！！" href="http://www.tianya.cn/publicforum/content/develop/1/183819.shtml" target="_blank">扩展阅读:国内经济形势-天涯</a></p>
<p><span id="more-62"></span></p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_02.jpg" alt="" /></p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>Time for Reflection<br />
</strong></span>Pedestrians walk by a window displaying the Nikkei share prices in Tokyo on Tuesday.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">映像之时</span></strong></p>
<p style="padding:5px 0;">行人们走过日经新闻显示周二日本东京价格的窗户。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_03.jpg" alt="" /></p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>Last Exit<br />
</strong></span>Speaker of the House Nancy Pelosi, Majority Whip James Claburn and House Majority Leader Steny Hoyer head to a press conference on Monday afternoon.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">最后的退场</span></strong></p>
<p style="padding:5px 0;">国会议长Nancy Pelosi，多数党党鞭James Claburn以及众议院多数党领导人Steny Hoyer 于周一下午前往一场记者招待会。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_04.jpg" alt="" /></p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>Back to Work<br />
</strong></span>People walk along Wall Street past the New York Stock Exchange at the start of the trading day.</p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>重拾工作</strong></span></p>
<p style="padding:5px 0;">人们沿着华尔街前行，走过纽约证券交易所并开始新的一个交易日。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_05.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Losing Ground</span></strong><br />
A trader keeps an eye on the numbers as U.S. stocks plummet on Monday.</p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>失地</strong></span></p>
<p style="padding:5px 0;">当美国证券市场垂直下降时，一名交易员留心着不断变化的数字。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_06.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Just a Week Ago<br />
</span></strong>Ben Bernanke testifies before the House Financial Services Committee on September 24.</p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>就在一周前</strong></span></p>
<p style="padding:5px 0;">本·伯南克在众议院<a class="bodytag" href="http://www.yeeyan.com/articles/tag/%E9%87%91%E8%9E%8D" target="_blank"><em>金融</em></a>服务委员会作证。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_08.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Clean up<br />
</span></strong>A woman mops the floor of the Frankfurt stock exchange before markets opened on Tuesday.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">肃清</span></strong></p>
<p style="padding:5px 0;">一名女性在开市之前擦洗着法兰克福证券交易所的地板。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_09.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Two Minds<br />
</span></strong>Senator Charles Schumer of New York speaks with colleague Senator Jack Reed of Rhode Island in a hall of the Capitol bulding.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">两方思考</span></strong></p>
<p style="padding:5px 0;">纽约参议员Charles Schumer与同事、来自罗得岛的参议员Jack Reed在美国国会大厦的一间大厅里。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_10.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Bailing Out<br />
</span></strong>Republican presidential nominee Governor John McCain walks away from the lectern after speaking about congress&#8217;s rejection of the Wall Street bailout plan.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">救火</span></strong></p>
<p style="padding:5px 0;">共和党总统候选人约翰·麦凯恩在一场演讲中讨论了国会对华尔街救市计划的拒绝行为之后离开现场。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_07.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">A Hazy Horizon<br />
</span></strong>Senator Barack Obama speaks on the phone in Reno Nevada. On Tuesday Obama urged the American public to support the Bush administration&#8217;s $700 billion proposal for rescuing the financial sector.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">模糊的地平线</span></strong></p>
<p style="padding:5px 0;">参议员·巴拉克在内华达的里诺打着手机，周二奥巴马敦促着美国公众支持布什政府的七千亿救市计划以救财务部门于水火之中。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_11.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Greet the Press</span></strong><br />
George W. Bush enters the White House&#8217;s Diplomatic Reception Room to speak to the nation about the economic rescue plan on Tuesday morning.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">向新闻界致意</span></strong></p>
<p style="padding:5px 0;">乔治·W·布什于周二早晨走进白宫的外交接待室（Diplomatic Reception Room）对<a class="bodytag" href="http://www.yeeyan.com/articles/tag/%E7%BB%8F%E6%B5%8E" target="_blank"><em>经济</em></a>救助计划作出解释。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_12.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">A Lull<br />
</span></strong>Senate Banking Committee Chairman Chris Dodd takes a moment before participating in a television interview on Monday.</p>
<p style="padding:5px 0;"><span style="font-size: small;"><strong>休息片刻</strong></span></p>
<p style="padding:5px 0;">参议银行业委员会委员会主席克里斯·多德周一在参加一个电视采访之前稍作休息。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_13.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Getting the Pink Slip</span></strong><br />
A Capitol Police officer tells demonstrators from the group Code Pink to move from the steps in front of the Cannon House Office Building on Capitol Hill. The demonstrators were voicing opposition to the bailout.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">拿到粉色传单（解雇通知书）</span></strong></p>
<p style="padding:5px 0;">一名国会大厦警察部警员告诉来自团体“粉红密码”（Code Pink）的示威者们从美国国会山的国会众议院家能大厦前的台阶上移开。示威者们声称反对救市计划。</p>
<p style="padding:5px 0;"><img src="http://img.timeinc.net/time/photoessays/2008/economy_0930/econ_14.jpg" alt="" /></p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">Stormy Weather<br />
</span></strong>Londoners make their way past the Bank of England under gray skies on Tuesday.</p>
<p style="padding:5px 0;"><strong><span style="font-size: small;">风暴天</span></strong></p>
<p style="padding:5px 0;">在周二阴沉的天空之下，伦敦人们依旧故我的经过英伦银行的大门前。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/uncategorized/the-global-financial-crisis-in-photos.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Shit! fart!</title>
		<link>http://www.csswork.cn/uncategorized/shit-fart.html</link>
		<comments>http://www.csswork.cn/uncategorized/shit-fart.html#comments</comments>
		<pubDate>Sat, 04 Oct 2008 17:29:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=54</guid>
		<description><![CDATA[

可恶的垃圾评论！！
搞得我误删了好多正常评论，没有备份.
各位留言的大大SORRY了。

]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.csswork.cn/w/wp-content/uploads/2008/10/shitfart.jpg'><img src="http://www.csswork.cn/w/wp-content/uploads/2008/10/shitfart.jpg" alt="" title="shitfart" width="500" height="166" class="alignnone size-full wp-image-55" /></a></p>
<div style="padding:5px 0 10px 0;">
可恶的垃圾评论！！<br />
搞得我误删了好多正常评论，没有备份.</p>
<p>各位留言的大大SORRY了。
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/uncategorized/shit-fart.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>一个网店模板</title>
		<link>http://www.csswork.cn/my-work/e-shop-template.html</link>
		<comments>http://www.csswork.cn/my-work/e-shop-template.html#comments</comments>
		<pubDate>Sun, 05 Oct 2008 06:58:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[WORK 工作]]></category>

		<category><![CDATA[shopping]]></category>

		<category><![CDATA[xhtml]]></category>

		<category><![CDATA[模板]]></category>

		<category><![CDATA[网店]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=51</guid>
		<description><![CDATA[
断断续续弄了蛮久的一个模板
http://www.csswork.cn/shopWeb
本来准备在假期里套好程序，结果发现原来所选程序的模板机制完全改变了。后来看了其他的网店程序，但都没有太合适的。比如：
老牌的 Zen Cart ,速度超快，但不习惯。
最近风头很劲的Magento，模板制作超复杂，不过基本没有免费模板，一个一般的模板都要卖299$，似乎是个不错的行当呢^_^.不过此程序对服务器要求非常高。而且有使用的朋友说，这玩意很慢。
还有就是我最喜欢的PrestaShop，一个以WEB2.0为卖点的网店系统。
模板与程序完全分离。独特的modules机制（事实上我还搞不懂这玩意，这个因该是程序的核心。诸如支付接口，模板插件等等都是在modules下实现的），语言包的完全分离。程序设计非常优雅，目录结构一目了然。后台的体验也非常不错，一个小时就可以摸的八九不离十。
另外在官方论坛可以下载到部分后台中文包，和前台的完整中文包（事实前端那块完全可以自己在后台定义）。
这个程序最大的缺点就是中文资源基本没有，如果真要运营的话要自己做国内的支付接口等大量工作，期待本土化的完善

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/shopWeb"><img class="alignnone size-full wp-image-52" title="网店模板" src="http://www.csswork.cn/w/wp-content/uploads/2008/10/sj_image_64_350.jpg" alt="点击查看HTML" width="470" height="300" /></a></p>
<div style="padding:10px 0;">断断续续弄了蛮久的一个模板<br />
<a href="http://www.csswork.cn/shopWeb"><strong>http://www.csswork.cn/shopWeb</strong></a><br />
本来准备在假期里套好程序，结果发现原来所选程序的模板机制完全改变了。后来看了其他的网店程序，但都没有太合适的。比如：</div>
<div style="padding:5px 0;">老牌的 <a href="http://www.zen-cart.cn/" target="_blank"><strong>Zen Cart </strong></a>,速度超快，但不习惯。</div>
<div style="padding:5px 0;">最近风头很劲的<a href="http://www.magentocommerce.com/" target="_blank"><strong>Magento</strong></a>，模板制作超复杂，不过基本没有免费模板，一个一般的模板都要卖299$，似乎是个不错的行当呢^_^.不过此程序对服务器要求非常高。而且有使用的朋友说，这玩意很慢。</div>
<div style="padding:5px 0;">还有就是我最喜欢的<a href="http://www.prestashop.com/" target="_blank"><strong>PrestaShop</strong></a>，一个以WEB2.0为卖点的网店系统。<br />
模板与程序完全分离。独特的modules机制（事实上我还搞不懂这玩意，这个因该是程序的核心。诸如支付接口，模板插件等等都是在modules下实现的），语言包的完全分离。程序设计非常优雅，目录结构一目了然。后台的体验也非常不错，一个小时就可以摸的八九不离十。<br />
另外在官方论坛可以下载到部分后台中文包，和前台的完整中文包（事实前端那块完全可以自己在后台定义）。<br />
这个程序最大的缺点就是中文资源基本没有，如果真要运营的话要自己做国内的支付接口等大量工作，期待本土化的完善</div>
<p></body></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/my-work/e-shop-template.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>一道有趣的CSS考题。</title>
		<link>http://www.csswork.cn/web-php/w3c-css-style.html</link>
		<comments>http://www.csswork.cn/web-php/w3c-css-style.html#comments</comments>
		<pubDate>Fri, 26 Sep 2008 21:30:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=48</guid>
		<description><![CDATA[
当我看到这道题目时，第一想法就是“出这道题的人真的太BT了”。
以下是考题要求


1,结构良好，符合标准。
2,时间和标题间距为10Px。
3,标题过长时截取多余字符，但时间必须保持完整。
4,多浏览器兼容。
5,必须使用CSS来实现。


点击这里查看最终结果
这道题的关键是display,position属性的理解，和overflow:hidden;的灵活应用，以下是我的解答流程。

编写结构。

&#60;ol&#62;:

 &#60;li&#62;&#60;a href=&#34;&#34;&#62;Title&#60;/a&#62;&#60;span&#62;date&#60;/span&#62;&#60;/li&#62;
&#60;li&#62;&#60;a href=&#34;&#34;&#62;Title&#60;/a&#62;&#60;span&#62;date&#60;/span&#62;&#60;/li&#62;

&#60;/ol&#62;

可以肯定，这个结构是标准且良好的，接下来不管发生什么问题，将尽量避免重写结构。
构思方案。
使用position:absolute;将span标签抽离出文档流，这样的话span将和li脱离父子关系，li的overflow:hidden;属性也将无法作用到span了。
但实际结果却变成了，视觉上li已经被截取了，但却上却还占据着空间。这个原因我找了好久都没有找到解释。没办法只能换个思路。
解决问题。
最终我是用截取高度的思路解决了这个问题
即使思路正确，在最终解决前依然碰到了很多的兼容性问题。这真是一道非常考验人活用CSS的考题。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/09/html.jpg"><img class="alignnone size-medium wp-image-49" title="xhtml&amp;css" src="http://www.csswork.cn/w/wp-content/uploads/2008/09/html.jpg" /></a></p>
<p>当我看到这道题目时，第一想法就是“出这道题的人真的太BT了”。</p>
<p>以下是考题要求</p>
<div class="code">
<ol>
<li>1,结构良好，符合标准。</li>
<li>2,时间和标题间距为10Px。</li>
<li>3,标题过长时截取多余字符，但时间必须保持完整。</li>
<li>4,多浏览器兼容。</li>
<li>5,必须使用CSS来实现。</li>
</ol>
</div>
<p><a target="_blank" href="http://www.csswork.cn/list/index.html">点击这里查看最终结果</a></p>
<p>这道题的关键是display,position属性的理解，和overflow:hidden;的灵活应用，以下是我的解答流程。</p>
<p><span id="more-48"></span></p>
<h3 style="padding:10px 0 5px 0; font-size:14px;">编写结构。</h3>
<div class="code">
<p>&lt;ol&gt;:</p>
<blockquote>
<p> &lt;li&gt;&lt;a href=&quot;&quot;&gt;Title&lt;/a&gt;&lt;span&gt;date&lt;/span&gt;&lt;/li&gt;</p>
<p>&lt;li&gt;&lt;a href=&quot;&quot;&gt;Title&lt;/a&gt;&lt;span&gt;date&lt;/span&gt;&lt;/li&gt;</p>
</blockquote>
<p>&lt;/ol&gt;</p>
</div>
<p>可以肯定，这个结构是标准且良好的，接下来不管发生什么问题，将尽量避免重写结构。</p>
<h3 style="padding:10px 0 5px 0;">构思方案。</h3>
<p>使用position:absolute;将span标签抽离出文档流，这样的话span将和li脱离父子关系，li的overflow:hidden;属性也将无法作用到span了。</p>
<p>但实际结果却变成了，视觉上li已经被截取了，但却上却还占据着空间。这个原因我找了好久都没有找到解释。没办法只能换个思路。</p>
<h3 style="padding:10px 0 5px 0;">解决问题。</h3>
<p>最终我是用截取高度的思路解决了这个问题</p>
<p><strong>即使思路正确，在最终解决前依然碰到了很多的兼容性问题。这真是一道非常考验人活用CSS的考题。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/w3c-css-style.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>上海归来~</title>
		<link>http://www.csswork.cn/photo-pic/come-back-shanghai.html</link>
		<comments>http://www.csswork.cn/photo-pic/come-back-shanghai.html#comments</comments>
		<pubDate>Tue, 23 Sep 2008 06:51:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHOTO 记录生活]]></category>

		<category><![CDATA[上海]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=46</guid>
		<description><![CDATA[
中午12点半的火车，6点到深圳。好累啊~~~~~~~~~~~
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/09/shanghai.jpg"><img class="alignnone size-full wp-image-47" title="shanghai" src="http://www.csswork.cn/w/wp-content/uploads/2008/09/shanghai.jpg" alt="上海弄堂" width="470" height="200" /></a></p>
<p>中午12点半的火车，6点到深圳。好累啊~~~~~~~~~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/photo-pic/come-back-shanghai.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>理解 JavaScript 闭包</title>
		<link>http://www.csswork.cn/web-php/javascript-closure.html</link>
		<comments>http://www.csswork.cn/web-php/javascript-closure.html#comments</comments>
		<pubDate>Tue, 05 Aug 2008 21:42:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=42</guid>
		<description><![CDATA[

原文：理解 JavaScript 闭包
&#160;
要成为高级 JavaScript 程序员，就必须理解闭包。 
本文结合 ECMA 262 规范详解了闭包的内部工作机制，让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中，真正领会到闭包的实质。 
原文链接：JavaScript Closures 
可打印版：JavaScript 闭包 
简介


Closure 
所谓“闭包”，指的是一个拥有许多变量和绑定了这些变量的环境的表达式（通常是一个函数），因而这些变量也是该表达式的一部分。 



  

闭包是 ECMAScript （JavaScript）最强大的特性之一，但用好闭包的前提是必须理解闭包。闭包的创建相对容易，人们甚至会在不经意间创建闭包，但这些无意创建的闭包却存在潜在的危害，尤其是在比较常见的浏览器环境下。如果想要扬长避短地使用闭包这一特性，则必须了解它们的工作机制。而闭包工作机制的实现很大程度上有赖于标识符（或者说对象属性）解析过程中作用域的角色。 
关于闭包，最简单的描述就是 ECMAScript 允许使用内部函数－－即函数定义和函数表达式位于另一个函数的函数体内。而且，这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时，就会形成闭包。也就是说，内部函数会在外部函数返回后被执行。而当这个内部函数执行时，它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明（最初时）的值是外部函数返回时的值，但也会受到内部函数的影响。 
遗憾的是，要适当地理解闭包就必须理解闭包背后运行的机制，以及许多相关的技术细节。虽然本文的前半部分并没有涉及 ECMA 262 规范指定的某些算法，但仍然有许多无法回避或简化的内容。对于个别熟悉对象属性名解析的人来说，可以跳过相关的内容，但是除非你对闭包也非常熟悉，否则最好是不要跳下面几节。 
对象属性名解析
ECMAScript 认可两类对象：原生（Native）对象和宿主（Host）对象，其中宿主对象包含一个被称为内置对象的原生对象的子类（ECMA 262 3rd Ed Section 4.3）。原生对象属于语言，而宿主对象由环境提供，比如说可能是文档对象、DOM 等类似的对象。 
原生对象具有松散和动态的命名属性（对于某些实现的内置对象子类别而言，动态性是受限的－－但这不是太大的问题）。对象的命名属性用于保存值，该值可以是指向另一个对象（Objects）的引用（在这个意义上说，函数也是对象），也可以是一些基本的数据类型，比如：String、Number、Boolean、Null 或 Undefined。其中比较特殊的是 Undefined 类型，因为可以给对象的属性指定一个 Undefined 类型的值，而不会删除对象的相应属性。而且，该属性只是保存着 undefined 值。     
下面简要介绍一下如何设置和读取对象的属性值，并最大程度地体现相应的内部细节。 
值的赋予
对象的命名属性可以通过为该命名属性赋值来创建，或重新赋值。即，对于： 
var [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/08/firefox_3.gif"><img class="alignnone size-full wp-image-43" title="firefox_3" src="http://www.csswork.cn/w/wp-content/uploads/2008/08/firefox_3.gif" alt="firefox_3" width="450" height="200" /></a></p>
<div class="textList_1">
<p>原文：<a style="" href="http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html">理解 JavaScript 闭包</a></p>
<p>&nbsp;</p>
<p>要成为高级 JavaScript 程序员，就必须理解闭包。 </p>
<p>本文结合 ECMA 262 规范详解了闭包的内部工作机制，让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中，真正领会到闭包的实质。 </p>
<p>原文链接：<a href="http://www.jibbering.com/faq/faq_notes/closures.html">JavaScript Closures</a> </p>
<p>可打印版：<a href=" wordpress/wp-content/uploads/2007/08/JavaScriptClosures.html">JavaScript 闭包</a> </p>
<h4><a name="clIntro"></a>简介</h4>
<div class="code">
<dl>
<dt><a name="clDefN"></a>Closure </dt>
<dd>所谓“闭包”，指的是一个拥有许多变量和绑定了这些变量的环境的表达式（通常是一个函数），因而这些变量也是该表达式的一部分。 </dd>
<dd></dd>
</dl></div>
</p></div>
<p>  <span id="more-42"></span></p>
<div class="textList_1">
<p>闭包是 ECMAScript （JavaScript）最强大的特性之一，但用好闭包的前提是必须理解闭包。闭包的创建相对容易，人们甚至会在不经意间创建闭包，但这些无意创建的闭包却存在潜在的危害，尤其是在比较常见的浏览器环境下。如果想要扬长避短地使用闭包这一特性，则必须了解它们的工作机制。而闭包工作机制的实现很大程度上有赖于标识符（或者说对象属性）解析过程中作用域的角色。 </p>
<p>关于闭包，最简单的描述就是 ECMAScript 允许使用内部函数－－即函数定义和函数表达式位于另一个函数的函数体内。而且，这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时，就会形成闭包。也就是说，内部函数会在外部函数返回后被执行。而当这个内部函数执行时，它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明（最初时）的值是外部函数返回时的值，但也会受到内部函数的影响。 </p>
<p>遗憾的是，要适当地理解闭包就必须理解闭包背后运行的机制，以及许多相关的技术细节。虽然本文的前半部分并没有涉及 ECMA 262 规范指定的某些算法，但仍然有许多无法回避或简化的内容。对于个别熟悉对象属性名解析的人来说，可以跳过相关的内容，但是除非你对闭包也非常熟悉，否则最好是不要跳下面几节。 </p>
<h4><a name="clResO"></a>对象属性名解析</h4>
<p>ECMAScript 认可两类对象：原生（Native）对象和宿主（Host）对象，其中宿主对象包含一个被称为内置对象的原生对象的子类（ECMA 262 3rd Ed Section 4.3）。原生对象属于语言，而宿主对象由环境提供，比如说可能是文档对象、DOM 等类似的对象。 </p>
<p>原生对象具有松散和动态的命名属性（对于某些实现的内置对象子类别而言，动态性是受限的－－但这不是太大的问题）。对象的命名属性用于保存值，该值可以是指向另一个对象（Objects）的引用（在这个意义上说，函数也是对象），也可以是一些基本的数据类型，比如：String、Number、Boolean、Null 或 Undefined。其中比较特殊的是 Undefined 类型，因为可以给对象的属性指定一个 Undefined 类型的值，而不会删除对象的相应属性。而且，该属性只是保存着 undefined 值。     </p>
<p>下面简要介绍一下如何设置和读取对象的属性值，并最大程度地体现相应的内部细节。 </p>
<h5><a name="clResA"></a>值的赋予</h5>
<p>对象的命名属性可以通过为该命名属性赋值来创建，或重新赋值。即，对于： </p>
<p>var objectRef = new Object(); //创建一个普通的 JavaScript 对象。 </p>
<p>可以通过下面语句来创建名为 “testNumber” 的属性： </p>
<div class="code">objectRef.testNumber = 5;<br />
    /* - 或- */<br />
    objectRef[”testNumber”] = 5; </div>
<p>在赋值之前，对象中没有“testNumber” 属性，但在赋值后，则创建一个属性。之后的任何赋值语句都不需要再创建这个属性，而只会重新设置它的值： </p>
<div class="code">objectRef.testNumber = 8;<br />
    /* - or:- */<br />
    objectRef[”testNumber”] = 8; </div>
<p>稍后我们会介绍，Javascript 对象都有原型（prototypes）属性，而这些原型本身也是对象，因而也可以带有命名的属性。但是，原型对象命名属性的作用并不体现在赋值阶段。同样，在将值赋给其命名属性时，如果对象没有该属性则会创建该命名属性，否则会重设该属性的值。 </p>
<h5><a name="clResR"></a>值的读取</h5>
<p>当读取对象的属性值时，原型对象的作用便体现出来。如果对象的原型中包含属性访问器（property accessor）所使用的属性名，那么该属性的值就会返回： </p>
<p>/* 为命名属性赋值。如果在赋值前对象没有相应的属性，那么赋值后就会得到一个：*/<br />
    objectRef.testNumber = 8; </p>
<p>/* 从属性中读取值 */<br />
    var val = objectRef.testNumber; </p>
<p>/* 现在， - val - 中保存着刚赋给对象命名属性的值 8*/ </p>
<p>而且，由于所有对象都有原型，而原型本身也是对象，所以原型也可能有原型，这样就构成了所谓的原型链。原型链终止于链中原型为 null 的对象。 Object  构造函数的默认原型就有一个 null 原型，因此： </p>
<p>var objectRef = new Object(); //创建一个普通的 JavaScript 对象。 </p>
<p>创建了一个原型为  Object.prototype  的对象，而该原型自身则拥有一个值为 null 的原型。也就是说，  objectRef  的原型链中只包含一个对象－－  Object.prototype 。但对于下面的代码而言： </p>
<div class="code">/* 创建 - MyObject1 - 类型对象的函数*/<br />
    function MyObject1(formalParameter){<br />
    /* 给创建的对象添加一个名为 - testNumber - 的属性<br />
    并将传递给构造函数的第一个参数指定为该属性的值：*/<br />
    this.testNumber = formalParameter;<br />
    }<br />
    /* 创建 - MyObject2 - 类型对象的函数*/<br />
    function MyObject2(formalParameter){<br />
    /* 给创建的对象添加一个名为 - testString - 的属性<br />
    并将传递给构造函数的第一个参数指定为该属性的值：*/<br />
    this.testString = formalParameter;<br />
    } </div>
<p>/* 接下来的操作用 MyObject1 类的实例替换了所有与 MyObject2 类的实例相关联的原型。而且，为 MyObject1 构造函数传递了参数 - 8 - ，因而其 - testNumber - 属性被赋予该值：*/<br />
    MyObject2.prototype = new MyObject1( 8 ); </p>
<p>/* 最后，将一个字符串作为构造函数的第一个参数，创建一个 - MyObject2 - 的实例，并将指向该对象的引用赋给变量 - objectRef - ：*/<br />
    var objectRef = new MyObject2( “String_Value” ); </p>
<p>被变量  objectRef  所引用的  MyObject2  的实例拥有一个原型链。该链中的第一个对象是在创建后被指定给  MyObject2  构造函数的  prototype  属性的  MyObject1  的一个实例。 MyObject1  的实例也有一个原型，即与  Object.prototype  所引用的对象对应的默认的 Object 对象的原型。最后，  Object.prototype  有一个值为 null 的原型，因此这条原型链到此结束。 </p>
<p>当某个属性访问器尝试读取由  objectRef  所引用的对象的属性值时，整个原型链都会被搜索。在下面这种简单的情况下： </p>
<p>var val = objectRef.testString; </p>
<p>因为  objectRef  所引用的  MyObject2  的实例有一个名为“testString”的属性，因此被设置为“String_Value”的该属性的值被赋给了变量  val 。但是： </p>
<p>var val = objectRef.testNumber; </p>
<p>则不能从  MyObject2  实例自身中读取到相应的命名属性值，因为该实例没有这个属性。然而，变量  val  的值仍然被设置为  8 ，而不是未定义－－这是因为在该实例中查找相应的命名属性失败后，解释程序会继续检查其原型对象。而该实例的原型对象是  MyObject1  的实例，这个实例有一个名为“testNumber”的属性并且值为  8 ，所以这个属性访问器最后会取得值  8 。而且，虽然  MyObject1  和  MyObject2  都没有定义  toString  方法，但是当属性访问器通过  objectRef  读取  toString  属性的值时： </p>
<p>var val = objectRef.toString; </p>
<p>变量  val  也会被赋予一个函数的引用。这个函数就是在  Object.prototype  的  toString  属性中所保存的函数。之所以会返回这个函数，是因为发生了搜索  objectRef  原型链的过程。当在作为对象的  objectRef  中发现没有“toString”属性存在时，会搜索其原型对象，而当原型对象中不存在该属性时，则会继续搜索原型的原型。而原型链中最终的原型是  Object.prototype ，这个对象确实有一个  toString  方法，因此该方法的引用被返回。 </p>
<p>最后： </p>
<p>var val = objectRef.madeUpProperty; </p>
<p>返回  undefined ，因为在搜索原型链的过程中，直至  Object.prototype  的原型－－null，都没有找到任何对象有名为“madeUpPeoperty”的属性，因此最终返回  undefined 。 </p>
<p>不论是在对象或对象的原型中，读取命名属性值的时候只返回首先找到的属性值。而当为对象的命名属性赋值时，如果对象自身不存在该属性则创建相应的属性。 </p>
<p>这意味着，如果执行像  objectRef.testNumber = 3  这样一条赋值语句，那么这个  MyObject2  的实例自身也会创建一个名为“testNumber”的属性，而之后任何读取该命名属性的尝试都将获得相同的新值。这时候，属性访问器不会再进一步搜索原型链，但  MyObject1  实例值为  8  的“testNumber”属性并没有被修改。给  objectRef  对象的赋值只是遮挡了其原型链中相应的属性。 </p>
<p>注意：ECMAScript 为 Object 类型定义了一个内部  [[prototype]]  属性。这个属性不能通过脚本直接访问，但在属性访问器解析过程中，则需要用到这个内部  [[prototype]]  属性所引用的对象链－－即原型链。可以通过一个公共的  prototype  属性，来对与内部的  [[prototype]]  属性对应的原型对象进行赋值或定义。这两者之间的关系在 ECMA 262（3rd edition）中有详细描述，但超出了本文要讨论的范畴。 </p>
<h4><a name="clIRExSc"></a>标识符解析、执行环境和作用域链</h4>
<h5><a name="clExCon"></a>执行环境</h5>
<p>执行环境是 ECMAScript 规范（ECMA 262 第 3 版）用于定义 ECMAScript 实现必要行为的一个抽象的概念。对如何实现执行环境，规范没有作规定。但由于执行环境中包含引用规范所定义结构的相关属性，因此执行环境中应该保有（甚至实现）带有属性的对象－－即使属性不是公共属性。 </p>
<p>所有 JavaScript 代码都是在一个执行环境中被执行的。全局代码（作为内置的JS 文件执行的代码，或者  HTML  页面加载的代码）是在我称之为“全局执行环境”的执行环境中执行的，而对函数的每次调用（<br />
    有可能是作为构造函数）同样有关联的执行环境。通过  eval  函数执行的代码也有截然不同的执行环境，但因为 JavaScript 程序员在正常情况下一般不会使用  eval ，所以这里不作讨论。有关执行环境的详细说明请参阅 ECMA 262（3rd edition）第 10.2 节。 </p>
<p>当调用一个 JavaScript 函数时，该函数就会进入相应的执行环境。如果又调用了另外一个函数（或者递归地调用同一个函数），则又会创建一个新的执行环境，并且在函数调用期间执行过程都处于该环境中。当调用的函数返回后，执行过程会返回原始执行环境。因而，运行中的 JavaScript 代码就构成了一个执行环境栈。 </p>
<p>在创建执行环境的过程中，会按照定义的先后顺序完成一系列操作。首先，在一个函数的执行环境中，会创建一个“活动”对象。活动对象是规范中规定的另外一种机制。之所以称之为对象，是因为它拥有可访问的命名属性，但是它又不像正常对象那样具有原型（至少没有预定义的原型），而且不能通过 JavaScript 代码直接引用活动对象。 </p>
<p>为函数调用创建执行环境的下一步是创建一个  arguments  对象，这是一个类似数组的对象，它以整数索引的数组成员一一对应地保存着调用函数时所传递的参数。这个对象也有  length  和  callee  属性（这两个属性与我们讨论的内容无关，详见规范）。然后，会为活动对象创建一个名为“arguments”的属性，该属性引用前面创建的  arguments 对象。 </p>
<p>接着，为执行环境分配作用域。作用域由对象列表（链）组成。每个函数对象都有一个内部的  [[scope]]  属性（该属性我们稍后会详细介绍），这个属性也由对象列表（链）组成。指定给一个函数调用执行环境的作用域，由该函数对象的  [[scope]]  属性所引用的对象列表（链）组成，同时，活动对象被添加到该对象列表的顶部（链的前端）。 </p>
<p>之后会发生由 ECMA 262 中所谓“可变”对象完成的“变量实例化”的过程。只不过此时使用活动对象作为可变对象（这里很重要，请注意：它们是同一个对象）。此时会将函数的形式参数创建为可变对象的命名属性，如果调用函数时传递的参数与形式参数一致，则将相应参数的值赋给这些命名属性（否则，会给命名属性赋  undefined  值）。对于定义的内部函数，会以其声明时所用名称为可变对象创建同名属性，而相应的内部函数则被创建为函数对象并指定给该属性。变量实例化的最后一步是将在函数内部声明的所有局部变量创建为可变对象的命名属性。 </p>
<p>根据声明的局部变量创建的可变对象的属性在变量实例化过程中会被赋予  undefined  值。在执行函数体内的代码、并计算相应的赋值表达式之前不会对局部变量执行真正的实例化。 </p>
<p>事实上，拥有  arguments  属性的活动对象和拥有与函数局部变量对应的命名属性的可变对象是同一个对象。因此，可以将标识符  arguments  作为函数的局部变量来看待。 </p>
<p>最后，要为使用  this  关键字而赋值。如果所赋的值引用一个对象，那么前缀以  this  关键字的属性访问器就是引用该对象的属性。如果所赋（内部）值是 null，那么  this  关键字则引用全局对象。 </p>
<p>创建全局执行环境的过程会稍有不同，因为它没有参数，所以不需要通过定义的活动对象来引用这些参数。但全局执行环境也需要一个作用域，而它的作用域链实际上只由一个对象－－全局对象－－组成。全局执行环境也会有变量实例化的过程，它的内部函数就是涉及大部分 JavaScript 代码的、常规的顶级函数声明。而且，在变量实例化过程中全局对象就是可变对象，这就是为什么全局性声明的函数是全局对象属性的原因。全局性声明的变量同样如此。 </p>
<p>全局执行环境也会使用  this  对象来引用全局对象。 </p>
<h5><a name="clScCh"></a>作用域链与 [[scope]]</h5>
<p>调用函数时创建的执行环境会包含一个作用域链，这个作用域链是通过将该执行环境的活动（可变）对象添加到保存于所调用函数对象的  [[scope]]  属性中的作用域链前端而构成的。所以，理解函数对象内部的  [[scope]]  属性的定义过程至关重要。 </p>
<p>在 ECMAScript 中，函数也是对象。函数对象在变量实例化过程中会根据函数声明来创建，或者是在计算函数表达式或调用  Function  构造函数时创建。 </p>
<p>通过调用  Function  构造函数创建的函数对象，其内部的  [[scope]]  属性引用的作用域链中始终只包含全局对象。 </p>
<p>通过函数声明或函数表达式创建的函数对象，其内部的  [[scope]]  属性引用的则是创建它们的执行环境的作用域链。 </p>
<p>在最简单的情况下，比如声明如下全局函数：- </p>
<div class="code">function exampleFunction(formalParameter){<br />
    … // 函数体内的代码<br />
    } </div>
<p>- 当为创建全局执行环境而进行变量实例化时，会根据上面的函数声明创建相应的函数对象。因为全局执行环境的作用域链中只包含全局对象，所以它就给自己创建的、并以名为“exampleFunction”的属性引用的这个函数对象的内部  [[scope]]  属性，赋予了只包含全局对象的作用域链。 </p>
<p>当在全局环境中计算函数表达式时，也会发生类似的指定作用域链的过程：- </p>
<div class="code">var exampleFuncRef = function(){<br />
    … // 函数体代码<br />
    } </div>
<p>在这种情况下，不同的是在全局执行环境的变量实例化过程中，会先为全局对象创建一个命名属性。而在计算赋值语句之前，暂时不会创建函数对象，也不会将该函数对象的引用指定给全局对象的命名属性。但是，最终还是会在全局执行环境中创建这个函数对象（当计算函数表达式时。译者注），而为这个创建的函数对象的  [[scope]]  属性指定的作用域链中仍然只包含全局对象。内部的函数声明或表达式会导致在包含它们的外部函数的执行环境中创建相应的函数对象，因此这些函数对象的作用域链会稍微复杂一些。在下面的代码中，先定义了一个带有内部函数声明的外部函数，然后调用外部函数：</p>
<div class="code">
<p> /* 创建全局变量 - y - 它引用一个对象：- */<br />
var y = {x:5}; // 带有一个属性 - x - 的对象直接量<br />
function exampleFuncWith(){<br />
  var z;<br />
  /* 将全局对象 - y - 引用的对象添加到作用域链的前端：- */<br />
  with(y){<br />
  /* 对函数表达式求值，以创建函数对象并将该函数对象的引用指定给局部变量 - z - :- */<br />
  z = function(){<br />
  … // 内部函数表达式中的代码;<br />
  }<br />
}<br />
…<br />
}<br />
/* 执行 - exampleFuncWith - 函数:- */</p>
</div>
<p>exampleFuncWith();在调用  exampleFuncWith  函数创建的执行环境中包含一个由其活动对象后跟全局对象构成的作用域链。而在执行  with  语句时，又会把全局变量  y  引用的对象添加到这个作用域链的前端。在对其中的函数表达式求值的过程中，所创建函数对象的  [[scope]]  属性与创建它的执行环境的作用域保持一致－－即，该属性会引用一个由对象  y  后跟调用外部函数时所创建执行环境的活动对象，后跟全局对象的作用域链。 </p>
<p>当与  with  语句相关的语句块执行结束时，执行环境的作用域得以恢复（ y  会被移除），但是已经创建的函数对象（ z 。译者注）的  [[scope]]  属性所引用的作用域链中位于最前面的仍然是对象  y 。 </p>
<h5><a name="clEncap"></a>例 3：包装相关的功能</h5>
<p>闭包可以用于创建额外的作用域，通过该作用域可以将相关的和具有依赖性的代码组织起来，以便将意外交互的风险降到最低。假设有一个用于构建字符串的函数，为了避免重复性的连接操作（和创建众多的中间字符串），我们的愿望是使用一个数组按顺序来存储字符串的各个部分，然后再使用  Array.prototype.join  方法（以空字符串作为其参数）输出结果。这个数组将作为输出的缓冲器，但是将数组作为函数的局部变量又会导致在每次调用函数时都重新创建一个新数组，这在每次调用函数时只重新指定数组中的可变内容的情况下并不是必要的。 </p>
<p>一种解决方案是将这个数组声明为全局变量，这样就可以重用这个数组，而不必每次都建立新数组。但这个方案的结果是，除了引用函数的全局变量会使用这个缓冲数组外，还会多出一个全局属性引用数组自身。如此不仅使代码变得不容易管理，而且，如果要在其他地方使用这个数组时，开发者必须要再次定义函数和数组。这样一来，也使得代码不容易与其他代码整合，因为此时不仅要保证所使用的函数名在全局命名空间中是唯一的，而且还要保证函数所依赖的数组在全局命名空间中也必须是唯一的。 </p>
<p>而通过闭包可以使作为缓冲器的数组与依赖它的函数关联起来（优雅地打包），同时也能够维持在全局命名空间外指定的缓冲数组的属性名，免除了名称冲突和意外交互的危险。 </p>
<p>其中的关键技巧在于通过执行一个单行（in-line）函数表达式创建一个额外的执行环境，而将该函数表达式返回的内部函数作为在外部代码中使用的函数。此时，缓冲数组被定义为函数表达式的一个局部变量。这个函数表达式只需执行一次，而数组也只需创建一次，就可以供依赖它的函数重复使用。 </p>
<p>下面的代码定义了一个函数，这个函数用于返回一个 <abbr>HTML</abbr> 字符串，其中大部分内容都是常量，但这些常量字符序列中需要穿插一些可变的信息，而可变的信息由调用函数时传递的参数提供。 </p>
<p>通过执行单行函数表达式返回一个内部函数，并将返回的函数赋给一个全局变量，因此这个函数也可以称为全局函数。而缓冲数组被定义为外部函数表达式的一个局部变量。它不会暴露在全局命名空间中，而且无论什么时候调用依赖它的函数都不需要重新创建这个数组。</p>
<div class="code">
<p>/* 声明一个全局变量 - getImgInPositionedDivHtml -<br />
并将一次调用一个外部函数表达式返回的内部函数赋给它。</p>
<p>   这个内部函数会返回一个用于表示绝对定位的 DIV 元素<br />
   包围着一个 IMG 元素 的 <abbr>HTML</abbr> 字符串，这样一来，<br />
   所有可变的属性值都由调用该函数时的参数提供：<br />
*/<br />
var getImgInPositionedDivHtml = (function(){<br />
    /* 外部函数表达式的局部变量 - buffAr - 保存着缓冲数组。<br />
     这个数组只会被创建一次，生成的数组实例对内部函数而言永远是可用的<br />
     因此，可供每次调用这个内部函数时使用。</p>
<p>    其中的空字符串用作数据占位符，相应的数据<br />
    将由内部函数插入到这个数组中：<br />
    */<br />
    var buffAr = [<br />
        ‘&lt;div id=”‘,<br />
        ”,   //index 1, DIV ID 属性<br />
        ‘” style=”position:absolute;top:’,<br />
        ”,   //index 3, DIV 顶部位置<br />
        ‘px;left:’,<br />
        ”,   //index 5, DIV 左端位置<br />
        ‘px;width:’,<br />
        ”,   //index 7, DIV 宽度<br />
        ‘px;height:’,<br />
        ”,   //index 9, DIV 高度<br />
        ‘px;overflow:hidden;”&gt;&lt;img src=”‘,<br />
        ”,   //index 11, IMG URL<br />
        ‘” width=”‘,<br />
        ”,   //index 13, IMG 宽度<br />
        ‘” height=”‘,<br />
        ”,   //index 15, IMG 高度<br />
        ‘” alt=”‘,<br />
        ”,   //index 17, IMG alt 文本内容<br />
        ‘”&gt;&lt;/div&gt;’<br />
    ];<br />
    /* 返回作为对函数表达式求值后结果的内部函数对象。<br />
     这个内部函数就是每次调用执行的函数<br />
	- getImgInPositionedDivHtml( … ) -<br />
    */<br />
    return (function(url, id, width, height, top, left, altText){<br />
        /* 将不同的参数插入到缓冲数组相应的位置：*/</p>
<p>        buffAr[1] = id;<br />
        buffAr[3] = top;<br />
        buffAr[5] = left;<br />
        buffAr[13] = (buffAr[7] = width);<br />
        buffAr[15] = (buffAr[9] = height);<br />
        buffAr[11] = url;<br />
        buffAr[17] = altText;<br />
        /* 返回通过使用空字符串（相当于将数组元素连接起来）<br />
	连接数组每个元素后形成的字符串：<br />
        */<br />
        return buffAr.join(”);<br />
    }); //:内部函数表达式结束。<br />
})();<br />
/*^^- :单行外部函数表达式。*/</p>
</div>
<p>如果一个函数依赖于另一（或多）个其他函数，而其他函数又没有必要被其他代码直接调用，那么可以运用相同的技术来包装这些函数，而通过一个公开暴露的函数来调用它们。这样，就将一个复杂的多函数处理过程封装成了一个具有移植性的代码单元。 </p>
<h5><a name="clOtE"></a>其他例子</h5>
<p>有关闭包的一个可能是最广为人知的应用是 <a href="http://www.crockford.com/javascript/private.html">Douglas Crockford’s technique for the emulation of private instance variables in ECMAScript objects</a>。这种应用方式可以扩展到各种嵌套包含的可访问性（或可见性）的作用域结构，包括 <a href="http://www.litotes.demon.co.uk/js_info/private_static.html">the emulation of private static members for ECMAScript objects</a>。 </p>
<p>闭包可能的用途是无限的，可能理解其工作原理才是把握如何使用它的最好指南。 </p>
<h4><a name="clAc"></a>意外的闭包</h4>
<p>在创建可访问的内部函数的函数体之外解析该内部函数就会构成闭包。这表明闭包很容易创建，但这样一来可能会导致一种结果，即没有认识到闭包是一种语言特性的 JavaScript 作者，会按照内部函数能完成多种任务的想法来使用内部函数。但他们对使用内部函数的结果并不明了，而且根本意识不到创建了闭包，或者那样做意味着什么。 </p>
<p>正如下一节谈到 IE 中内存泄漏问题时所提及的，意外创建的闭包可能导致严重的负面效应，而且也会影响到代码的性能。问题不在于闭包本身，如果能够真正做到谨慎地使用它们，反而会有助于创建高效的代码。换句话说，使用内部函数会影响到效率。 </p>
<p>使用内部函数最常见的一种情况就是将其作为 DOM 元素的事件处理器。例如，下面的代码用于向一个链接元素添加 onclick 事件处理器：</p>
<div class="code">
<p>/* 定义一个全局变量，通过下面的函数将它的值<br />
   作为查询字符串的一部分添加到链接的 - href - 中：<br />
*/<br />
var quantaty = 5;<br />
/* 当给这个函数传递一个链接（作为函数中的参数 - linkRef -）时，<br />
   会将一个 onclick 事件处理器指定给该链接，该事件处理器<br />
   将全局变量 - quantaty - 的值作为字符串添加到链接的 - href -<br />
   属性中，然后返回 true 使该链接在单击后定位到由  - href -<br />
   属性包含的查询字符串指定的资源：<br />
*/<br />
function addGlobalQueryOnClick(linkRef){<br />
    /* 如果可以将参数 - linkRef - 通过类型转换为 ture<br />
      （说明它引用了一个对象）：<br />
    */<br />
    if(linkRef){<br />
        /* 对一个函数表达式求值，并将对该函数对象的引用<br />
           指定给这个链接元素的 onclick 事件处理器：<br />
        */<br />
        linkRef.onclick = function(){<br />
            /* 这个内部函数表达式将查询字符串<br />
               添加到附加事件处理器的元素的 - href - 属性中：<br />
            */<br />
            this.href += (’?quantaty=’+escape(quantaty));<br />
            return true;<br />
        };<br />
    }<br />
}</p>
</div>
<p>无论什么时候调用  addGlobalQueryOnClick  函数，都会创建一个新的内部函数（通过赋值构成了闭包）。从效率的角度上看，如果只是调用一两次  addGlobalQueryOnClick  函数并没有什么大的妨碍，但如果频繁使用该函数，就会导致创建许多截然不同的函数对象（每对内部函数表达式求一次值，就会产生一个新的函数对象）。 </p>
<p>上面例子中的代码没有关注内部函数在创建它的函数外部可以访问（或者说构成了闭包）这一事实。实际上，同样的效果可以通过另一种方式来完成。即单独地定义一个用于事件处理器的函数，然后将该函数的引用指定给元素的事件处理属性。这样，只需创建一个函数对象，而所有使用相同事件处理器的元素都可以共享对这个函数的引用：</p>
<div class="code">
<p>/* 定义一个全局变量，通过下面的函数将它的值<br />
   作为查询字符串的一部分添加到链接的 - href - 中：<br />
*/<br />
var quantaty = 5;<br />
/* 当把一个链接（作为函数中的参数 - linkRef -）传递给这个函数时，<br />
   会给这个链接添加一个 onclick 事件处理器，该事件处理器会<br />
   将全局变量  - quantaty - 的值作为查询字符串的一部分添加到<br />
   链接的 - href -  中，然后返回 true，以便单击链接时定位到由<br />
   作为 - href - 属性值的查询字符串所指定的资源：<br />
*/<br />
function addGlobalQueryOnClick(linkRef){<br />
    /* 如果 - linkRef - 参数能够通过类型转换为 true<br />
    （说明它引用了一个对象）：<br />
    */<br />
    if(linkRef){<br />
        /* 将一个对全局函数的引用指定给这个链接<br />
           的事件处理属性，使函数成为链接元素的事件处理器：<br />
        */<br />
        linkRef.onclick = forAddQueryOnClick;<br />
    }<br />
}<br />
/* 声明一个全局函数，作为链接元素的事件处理器，<br />
   这个函数将一个全局变量的值作为要添加事件处理器的<br />
   链接元素的  - href - 值的一部分：<br />
*/<br />
function forAddQueryOnClick(){<br />
    this.href += (’?quantaty=’+escape(quantaty));<br />
    return true;<br />
}</p>
</div>
<p>在上面例子的第一个版本中，内部函数并没有作为闭包发挥应有的作用。在那种情况下，反而是不使用闭包更有效率，因为不用重复创建许多本质上相同的函数对象。 </p>
<p>类似地考量同样适用于对象的构造函数。与下面代码中的构造函数框架类似的代码并不罕见：</p>
<div class="code">
<p>function ExampleConst(param){<br />
    /* 通过对函数表达式求值创建对象的方法，<br />
      并将求值所得的函数对象的引用赋给要创建对象的属性：<br />
    */<br />
    this.method1 = function(){<br />
        … // 方法体。<br />
    };<br />
    this.method2 = function(){<br />
        … // 方法体。<br />
    };<br />
    this.method3 = function(){<br />
        … // 方法体。<br />
    };<br />
    /* 把构造函数的参数赋给对象的一个属性：*/<br />
    this.publicProp = param;<br />
}</p>
</div>
<p>每当通过  new ExampleConst(n)  使用这个构造函数创建一个对象时，都会创建一组新的、作为对象方法的函数对象。因此，创建的对象实例越多，相应的函数对象也就越多。 </p>
<p>Douglas Crockford 提出的模仿 JavaScript 对象私有成员的技术，就利用了将对内部函数的引用指定给在构造函数中构造对象的公共属性而形成的闭包。如果对象的方法没有利用在构造函数中形成的闭包，那么在实例化每个对象时创建的多个函数对象，会使实例化过程变慢，而且将有更多的资源被占用，以满足创建更多函数对象的需要。 </p>
<p>这那种情况下，只创建一次函数对象，并把它们指定给构造函数  prototype  的相应属性显然更有效率。这样一来，它们就能被构造函数创建的所有对象共享了：</p>
<div class="code">
<p>function ExampleConst(param){<br />
    /* 将构造函数的参数赋给对象的一个属性：*/<br />
    this.publicProp = param;<br />
}<br />
/* 通过对函数表达式求值，并将结果函数对象的引用<br />
      指定给构造函数原型的相应属性来创建对象的方法：<br />
*/<br />
ExampleConst.prototype.method1 = function(){<br />
    … // 方法体。<br />
};<br />
ExampleConst.prototype.method2 = function(){<br />
    … // 方法体。<br />
};<br />
ExampleConst.prototype.method3 = function(){<br />
    … // 方法体。<br />
};</p>
</div>
<h4><a name="clMem"></a>Internet Explorer 的内存泄漏问题</h4>
<p>Internet Explorer Web 浏览器（在 IE 4 到 IE 6 中核实）的垃圾收集系统中存在一个问题，即如果 ECMAScript 和某些宿主对象构成了 “循环引用”，那么这些对象将不会被当作垃圾收集。此时所谓的宿主对象指的是任何 DOM 节点（包括 document 对象及其后代元素）和 ActiveX 对象。如果在一个循环引用中包含了一或多个这样的对象，那么这些对象直到浏览器关闭都不会被释放，而它们所占用的内存同样在浏览器关闭之前都不会交回系统重用。 </p>
<p>当两个或多个对象以首尾相连的方式相互引用时，就构成了循环引用。比如对象 1 的一个属性引用了对象 2 ，对象 2 的一个属性引用了对象 3，而对象 3 的一个属性又引用了对象 1。对于纯粹的 ECMAScript 对象而言，只要没有其他对象引用对象 1、2、3，也就是说它们只是相互之间的引用，那么仍然会被垃圾收集系统识别并处理。但是，在 Internet Explorer 中，如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象，垃圾收集系统则不会发现它们之间的循环关系与系统中的其他对象是隔离的并释放它们。最终它们将被保留在内存中，直到浏览器关闭。 </p>
<p>闭包非常容易构成循环引用。如果一个构成闭包的函数对象被指定给，比如一个 DOM 节点的事件处理器，而对该节点的引用又被指定给函数对象作用域中的一个活动（或可变）对象，那么就存在一个循环引用。DOM_Node.onevent -&gt;function_object.[[scope]] -&gt;scope_chain -&gt;Activation_object.nodeRef -&gt;DOM_Node。形成这样一个循环引用是轻而易举的，而且稍微浏览一下包含类似循环引用代码的网站（通常会出现在网站的每个页面中），就会消耗大量（甚至全部）系统内存。 </p>
<p>多加注意可以避免形成循环引用，而在无法避免时，也可以使用补偿的方法，比如使用 IE 的 onunload 事件来来清空（null）事件处理函数的引用。时刻意识到这个问题并理解闭包的工作机制是在 IE 中避免此类问题的关键。 </p>
<p><a href="http://www.jibbering.com/faq/faq_notes/faq_notes.html#toc">comp.lang.javascript FAQ notes T.O.C.</a> </p>
<ul>
<li>撰稿 Richard Cornford，2004 年 3 月 </li>
<li>修改建议来自：
<ul>
<li>Martin Honnen. </li>
<li>Yann-Erwan Perio (Yep). </li>
<li>Lasse Reichstein Nielsen. (<a href=" #clDefN">definition of closure</a>) </li>
<li>Mike Scirocco. </li>
<li>Dr John Stockton. </li>
</ul>
</li>
</ul>
</div>
<style>
.textList_1 h4,.textList_1 h5{font-size:13px; padding:5px 0;}
.textList_1 p{padding-bottom:10px; text-indent:15px;}
</style>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/javascript-closure.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>羊群的选择</title>
		<link>http://www.csswork.cn/uncategorized/selection-of-sheep.html</link>
		<comments>http://www.csswork.cn/uncategorized/selection-of-sheep.html#comments</comments>
		<pubDate>Fri, 27 Jun 2008 15:35:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=41</guid>
		<description><![CDATA[
上帝把两群羊放在草原上，一群在南，一群在北。上帝还给羊群找了两种天敌，一种是狮子，一种是狼。
上帝对羊群说：&#8221;如果你们要 狼，就给一只，任它随意咬你们。如果你们要狮子，就给两头，你们可以在两头狮子中任选一头，还可以随时更换。&#8221;南边那群羊想，狮子比狼凶猛得多，还是要狼 吧。于是，它们就要了一只狼。北边那群羊想，狮子虽然比狼凶猛得多，但我们有选择权，还是要狮子吧。于是，它们就要了两头狮子。


那只 狼进了南边的羊群后，就开始吃羊。狼身体小，食量也小，一只羊够它吃几天了。这样羊群几天才被追杀一次。北边那群羊挑选了一头狮子，另一头则留在上帝那 里。这头狮子进入羊群后，也开始吃羊。狮子不但比狼凶猛，而且食量惊人，每天都要吃一只羊。这样羊群就天天都要被追杀，惊恐万状。羊群赶紧请上帝换一头狮 子。不料，上帝保管的那头狮子一直没有吃东西，正饥饿难耐，它扑进羊群，比前面那头狮子咬得更疯狂。羊群一天到晚只是逃命，连草都快吃不成了。

南边的羊群庆幸自己选对了天敌，又嘲笑北边的羊群没有眼光。北边的羊群非常后悔，向上帝大倒苦水，要求更换天敌，改要一只狼。上帝说：&#8221;天敌一旦确定，就不能更改，必须世代相随，你们唯一的权利是在两头狮子中选择。&#8221;

北边的羊群只好把两头狮子不断更换。可两头狮子同样凶残，换哪一头都比南边的羊群悲惨得多，它们索性不换了，让一头狮子吃得膘肥体壮，另一头狮子则饿得精瘦。眼看那头瘦狮子快要饿死了，羊群才请上帝换一头。

这头瘦狮子经过长时间的饥饿后，慢慢悟出了一个道理：自己虽然凶猛异常，一百只羊都不是对手，可是自己的命运是操纵在羊群手里的。羊群随时可以把自己送 回上帝那里，让自己饱受饥饿的煎熬，甚至有可能饿死。想通这个道理后，瘦狮子就对羊群特别客气，只吃死羊和病羊，凡是健康的羊它都不吃了。羊群喜出望外， 有几只小羊提议干脆固定要瘦狮子，不要那头肥狮子了。一只老公羊提醒说：&#8221;瘦狮子是怕我们送它回上帝那里挨饿，才对我们这么好。万一肥狮子饿死了，我们没 有了选择的余地，瘦狮子很快就会恢复凶残的本性。&#8221;羊群觉得老羊说得有理，为了不让另一头狮子饿死，它们赶紧把它换回来。

原先膘肥体壮的那头狮子，已经饿得只剩下皮包骨头了，并且也懂得了自己的命运是操纵在羊群手里的道理。为了能在草原上待久一点，它竟百般讨好起羊群来。而那头被送交给上的狮子，则难过得流下了眼泪。

北边的羊群在经历了重重磨难后，终于过上了自由自在的生活。南边的那群羊的处境却越来越悲惨了，那只狼因为没有竞争对手，羊群又无法更换它，它就胡作非 为，每天都要咬死几十只羊，这只狼早已不吃羊肉了，它只喝羊心里的血。它还不准羊叫，哪只叫就立刻咬死哪只。南边的羊群只能在心中哀叹：&#8221;早知道这样，还 不如要两头狮子。&#8221;
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/06/sheep.jpg" title="羊群的选择"><img src="http://www.csswork.cn/w/wp-content/uploads/2008/06/sheep.jpg" alt="sheep.jpg" /></a></p>
<p style="text-indent:15px; padding-bottom:10px;">上帝把两群羊放在草原上，一群在南，一群在北。上帝还给羊群找了两种天敌，一种是狮子，一种是狼。</p>
<p style="text-indent:15px; padding-bottom:10px;">上帝对羊群说：&#8221;如果你们要 狼，就给一只，任它随意咬你们。如果你们要狮子，就给两头，你们可以在两头狮子中任选一头，还可以随时更换。&#8221;南边那群羊想，狮子比狼凶猛得多，还是要狼 吧。于是，它们就要了一只狼。北边那群羊想，狮子虽然比狼凶猛得多，但我们有选择权，还是要狮子吧。于是，它们就要了两头狮子。
</p>
<p><span id="more-41"></span></p>
<p style="text-indent:15px; padding-bottom:10px;">那只 狼进了南边的羊群后，就开始吃羊。狼身体小，食量也小，一只羊够它吃几天了。这样羊群几天才被追杀一次。北边那群羊挑选了一头狮子，另一头则留在上帝那 里。这头狮子进入羊群后，也开始吃羊。狮子不但比狼凶猛，而且食量惊人，每天都要吃一只羊。这样羊群就天天都要被追杀，惊恐万状。羊群赶紧请上帝换一头狮 子。不料，上帝保管的那头狮子一直没有吃东西，正饥饿难耐，它扑进羊群，比前面那头狮子咬得更疯狂。羊群一天到晚只是逃命，连草都快吃不成了。
</p>
<p style="text-indent:15px; padding-bottom:10px;">南边的羊群庆幸自己选对了天敌，又嘲笑北边的羊群没有眼光。北边的羊群非常后悔，向上帝大倒苦水，要求更换天敌，改要一只狼。上帝说：&#8221;天敌一旦确定，就不能更改，必须世代相随，你们唯一的权利是在两头狮子中选择。&#8221;
</p>
<p style="text-indent:15px; padding-bottom:10px;">北边的羊群只好把两头狮子不断更换。可两头狮子同样凶残，换哪一头都比南边的羊群悲惨得多，它们索性不换了，让一头狮子吃得膘肥体壮，另一头狮子则饿得精瘦。眼看那头瘦狮子快要饿死了，羊群才请上帝换一头。
</p>
<p style="text-indent:15px; padding-bottom:10px;">这头瘦狮子经过长时间的饥饿后，慢慢悟出了一个道理：自己虽然凶猛异常，一百只羊都不是对手，可是自己的命运是操纵在羊群手里的。羊群随时可以把自己送 回上帝那里，让自己饱受饥饿的煎熬，甚至有可能饿死。想通这个道理后，瘦狮子就对羊群特别客气，只吃死羊和病羊，凡是健康的羊它都不吃了。羊群喜出望外， 有几只小羊提议干脆固定要瘦狮子，不要那头肥狮子了。一只老公羊提醒说：&#8221;瘦狮子是怕我们送它回上帝那里挨饿，才对我们这么好。万一肥狮子饿死了，我们没 有了选择的余地，瘦狮子很快就会恢复凶残的本性。&#8221;羊群觉得老羊说得有理，为了不让另一头狮子饿死，它们赶紧把它换回来。
</p>
<p style="text-indent:15px; padding-bottom:10px;">原先膘肥体壮的那头狮子，已经饿得只剩下皮包骨头了，并且也懂得了自己的命运是操纵在羊群手里的道理。为了能在草原上待久一点，它竟百般讨好起羊群来。而那头被送交给上的狮子，则难过得流下了眼泪。
</p>
<p style="text-indent:15px; padding-bottom:10px;">北边的羊群在经历了重重磨难后，终于过上了自由自在的生活。南边的那群羊的处境却越来越悲惨了，那只狼因为没有竞争对手，羊群又无法更换它，它就胡作非 为，每天都要咬死几十只羊，这只狼早已不吃羊肉了，它只喝羊心里的血。它还不准羊叫，哪只叫就立刻咬死哪只。南边的羊群只能在心中哀叹：&#8221;早知道这样，还 不如要两头狮子。&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/uncategorized/selection-of-sheep.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>HTML5 第二份草案</title>
		<link>http://www.csswork.cn/web-php/html5-the-second-draft.html</link>
		<comments>http://www.csswork.cn/web-php/html5-the-second-draft.html#comments</comments>
		<pubDate>Tue, 17 Jun 2008 20:44:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 技术]]></category>

		<category><![CDATA[Html5]]></category>

		<category><![CDATA[w3c]]></category>

		<category><![CDATA[Web标准]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=38</guid>
		<description><![CDATA[
转自 蓝色理想
昨天在W3C看到，6月10日发布了新的HTML 5 草案（Working Draft）。粗略的读了一下它提供的新版本说明文档，作了一点笔记：
HTML 5草案并没有成为正式标准
Publication as a Working Draft does not imply endorsement by the W3C Membership.
作为“草案”发布并不意味着已经得到W3C成员的背书（支持）。
The HTML 5 specification will not be considered finished before there are at least two complete implementations of the specification.
HTML 5规范要等到有至少两个软件对其实现了之后，才会宣布定案。

XHTML 1是1999年就发布了，经过了两三年才得到全面支持，而直到近十年之后的最近才得到全面推广。所以等HTML 5得到支持（尤其是那位“非主流”的浏览器的支持），还得有一段日子。根据W3C的HTML工作组的时间表，要到2010年才会有正式的定案。
简单到惊奇的DOCTYPE声明
复制内容到剪贴板
&#60;!doctype html&#62;
就 这么简单，哈。而且，没有大小写之分。值得说明的是，规范要求，如果声明了这一个DOCTYPE，则可以用所谓的“‘custom’ HTML syntax（定制的HTML语法，我也不知道为什么叫这个）”，亦即以前那种不需要标签闭合的HTML语法。同时它仍然允许XHTML那样的XML格式 语法，这样的话就要声明xml文档的DOCTYPE而不用上面这个。
向前兼容性
HTML 5规范没有“deprecated”的元素，原因就是它一方面要求设计师不要试用某些元素，另一方面却要求浏览器必须支持这些元素。这样的话，以我的直 觉，它是想支持以前所有的用HTML或XHTML编写的网页。这对设计师来说算是一个福气，终于不用再受XHTML严苛语法的限制了。
被删去的元素
当然，这些元素是相对于HTML 4而言的，但是也可以看得出HTML 5并不是一个单纯的向HTML 4的倒退，它仍然秉承了XHTML的一些重要精神，比如纯粹的界面表现元素应该抛弃，而采用CSS等。
以下元素“因为是纯粹的界面表选元素，应该用CSS来代替（because their effect is purely presentational [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/06/ascent.jpg" title="ascent.jpg"><img src="http://www.csswork.cn/w/wp-content/uploads/2008/06/ascent.jpg" alt="ascent.jpg" /></a></p>
<p>转自 <a href="http://bbs.blueidea.com/thread-2864373-1-1.html">蓝色理想</a></p>
<p>昨天在W3C看到，6月10日发布了新的HTML 5 草案（Working Draft）。粗略的读了一下它提供的新版本说明文档，作了一点笔记：</p>
<p><strong>HTML 5草案并没有成为正式标准</strong><br />
<code>Publication as a Working Draft does not imply endorsement by the W3C Membership.<br />
作为“草案”发布并不意味着已经得到W3C成员的背书（支持）。<br />
The HTML 5 specification will not be considered finished before there are at least two complete implementations of the specification.<br />
HTML 5规范要等到有至少两个软件对其实现了之后，才会宣布定案。</code><br />
<span id="more-38"></span></p>
<p>XHTML 1是1999年就发布了，经过了两三年才得到全面支持，而直到近十年之后的最近才得到全面推广。所以等HTML 5得到支持（尤其是<a href="http://www.microsoft.com/ie/" target="_blank">那位“非主流”的浏览器</a>的支持），还得有一段日子。根据W3C的<a href="http://www.w3.org/html/wg/" target="_blank">HTML工作组</a>的时间表，要到2010年才会有正式的定案。<br />
<strong>简单到惊奇的DOCTYPE声明</strong></p>
<p class="blockcode"><span class="headactions" onclick="copycode($('code0'));">复制内容到剪贴板</span></p>
<p><code id="code0">&lt;!doctype html&gt;</code></p>
<p>就 这么简单，哈。而且，没有大小写之分。值得说明的是，规范要求，如果声明了这一个DOCTYPE，则可以用所谓的“‘custom’ HTML syntax（定制的HTML语法，我也不知道为什么叫这个）”，亦即以前那种不需要标签闭合的HTML语法。同时它仍然允许XHTML那样的XML格式 语法，这样的话就要声明xml文档的DOCTYPE而不用上面这个。</p>
<p><strong>向前兼容性</strong><br />
HTML 5规范没有“deprecated”的元素，原因就是它一方面要求设计师不要试用某些元素，另一方面却要求浏览器必须支持这些元素。这样的话，以我的直 觉，它是想支持以前所有的用HTML或XHTML编写的网页。这对设计师来说算是一个福气，终于不用再受XHTML严苛语法的限制了。</p>
<p><strong>被删去的元素</strong><br />
当然，这些元素是相对于HTML 4而言的，但是也可以看得出HTML 5并不是一个单纯的向HTML 4的倒退，它仍然秉承了XHTML的一些重要精神，比如纯粹的界面表现元素应该抛弃，而采用CSS等。</p>
<p>以下元素“因为是纯粹的界面表选元素，应该用CSS来代替（because their effect is purely presentational and therefore better handled by CSS）”，所以抛弃：</p>
<p class="blockcode"><span class="headactions" onclick="copycode($('code1'));"><br />
</span></p>
<p><code id="code1">basefont / big / center / font / s / strike / tt / u</code></p>
<p>以下元素“因为对可用性与可访问性不利（because their usage affected usability and accessibility for the end user in a negative way）”，所以抛弃：</p>
<p class="blockcode"><span class="headactions" onclick="copycode($('code2'));"><br />
</span></p>
<p><code id="code2">frame / frameset / noframes</code></p>
<p>以 下元素“因为不怎么经常使用、引起混淆或是被其他元素代替（because they have not been used often, created confusion or can be handled by other elements）”，所以抛弃：</p>
<p class="blockcode"><span class="headactions" onclick="copycode($('code3'));"><br />
</span></p>
<p><code id="code3">acronym / applet / isindex / dir </code></p>
<p>这里我要说明一下的是：</p>
<ul>
<li>acronym被推荐由abbr代替。但貌似在IE下，abbr反而不如acronym好用。详见<a href="http://www.mikkolee.com/3" target="_blank">http://www.mikkolee.com/3</a>里的HTML测试文档。</li>
<li>applet改用object。这个标签早就改抛弃了。不过当年我学HTML的时候每一本书都会提到这个applet，那时候大家都对java applet充满了憧憬，而如今却黯然退出历史舞台，还是挺感慨的。</li>
<li>isindex 和 dir。这里两个就不讲了,HTML 3的时候就不推荐了。</li>
<li></li>
</ul>
<p><strong>更多新元素</strong></p>
<p>HTML 5推出了很多新元素，我这里就不罗列了。请参看<br />
<a href="http://www.ibm.com/developerworks/cn/xml/x-html5/" target="_blank">http://www.ibm.com/developerworks/cn/xml/x-html5/</a>。<br />
如果你对HTML 5有更多兴趣，这篇文章底部还罗列了一些相关文章，也可以看看。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
原文：<a href="http://www.mikkolee.com/22" target="_blank">www.mikkolee.com/22</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/web-php/html5-the-second-draft.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>拍的一些花</title>
		<link>http://www.csswork.cn/photo-pic/take-some-of-the-flowers.html</link>
		<comments>http://www.csswork.cn/photo-pic/take-some-of-the-flowers.html#comments</comments>
		<pubDate>Sun, 01 Jun 2008 22:38:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHOTO 记录生活]]></category>

		<category><![CDATA[摄影]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=36</guid>
		<description><![CDATA[
以前拍的～非常不怎么样。

点击下面的小图连续观赏^_^








]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.csswork.cn/w/wp-content/uploads/2008/06/11.jpg" title="我拍的一些花儿" rel="clearbox"><img src="http://www.csswork.cn/w/wp-content/uploads/2008/06/11.jpg" alt="11.jpg" /></a><br />
以前拍的～非常不怎么样。</p>
<p><span id="more-36"></span></p>
<p>点击下面的小图连续观赏^_^</p>
<table style="margin-bottom: 20px" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="center"><a href="http://www.csswork.cn/w/wp-content/uploads/2008/06/11.jpg" title="11s.jpg" rel="clearbox[gal1]"><img src="http://www.csswork.cn/wp-content/uploads/2008/06/11s.jpg" style="border: 1px solid #eeeeee; padding: 1px; width: 80px; height: 80px" alt="我拍的花儿" /></a></td>
<td align="center"><a href="http://www.csswork.cn/wp-content/uploads/2008/06/22.jpg" title="22s.jpg" rel="clearbox[gal1]"><img src="http://www.csswork.cn/wp-content/uploads/2008/06/22s.jpg" style="border: 1px solid #eeeeee; padding: 1px; width: 80px; height: 80px" alt="我拍的花儿" /></a></td>
<td align="center"><a href="http://www.csswork.cn/wp-content/uploads/2008/06/33.jpg" title="33s.jpg" rel="clearbox[gal1]"><img src="http://www.csswork.cn/wp-content/uploads/2008/06/33s.jpg" style="border: 1px solid #eeeeee; padding: 1px; width: 80px; height: 80px" alt="我拍的花儿" /></a></td>
<td align="center"><a href="http://www.csswork.cn/wp-content/uploads/2008/06/44.jpg" title="44s.jpg" rel="clearbox[gal1]"><img src="http://www.csswork.cn/wp-content/uploads/2008/06/44s.jpg" style="border: 1px solid #eeeeee; padding: 1px; width: 80px; height: 80px" alt="我拍的花儿" /></a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/photo-pic/take-some-of-the-flowers.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>蜘蛛侠、钢铁侠、绿巨人超级英雄大乱斗</title>
		<link>http://www.csswork.cn/music-video/spider-man-iron-and-steel-xia-super-hero-hulk-smash-bros.html</link>
		<comments>http://www.csswork.cn/music-video/spider-man-iron-and-steel-xia-super-hero-hulk-smash-bros.html#comments</comments>
		<pubDate>Sat, 10 May 2008 18:34:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[MUSIC & VIDEO]]></category>

		<category><![CDATA[VIDEO]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=32</guid>
		<description><![CDATA[
这是一部名为《铁人的冒险Iron Man&#8217;s Adventures》动画短片，包含了三个超级英雄，由LTIMATE ALLIANCE animators Blur Studios(工作室)制作，并用作Marvelkids.com 网站的宣传动画。
 # 领衔主演：失败的人SpiderMan、铁托Iron Man (钢铁侠名叫托尼)、绿色废材The Incredible Hulk(hulk意为废船)
# 尽管有少许英文对话，但这部4分来钟的动画短片主要还是靠牛逼的动作特效取胜，所以大家不必害怕跟我一样不懂英文。
# 《绿巨人2》电影将于今年6月中旬上映，主演是人见人爱的爱德华诺顿。(Google CN EN)

跳转后观看视频

]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.csswork.cn/w/wp-content/uploads/2008/05/maavg22_800.jpg" alt="maavg22_800.jpg" /></p>
<p>这是一部名为《铁人的冒险Iron Man&#8217;s Adventures》动画短片，包含了三个超级英雄，由LTIMATE ALLIANCE animators Blur Studios(工作室)制作，并用作<a href="http://marvelkids.marvel.com/">Marvelkids.com</a> 网站的宣传动画。</p>
<div class="code"> # 领衔主演：失败的人SpiderMan、铁托Iron Man (钢铁侠名叫托尼)、绿色废材The Incredible Hulk(hulk意为废船)</br></p>
<p># 尽管有少许英文对话，但这部4分来钟的动画短片主要还是靠牛逼的动作特效取胜，所以大家不必害怕跟我一样不懂英文。</br><br />
# 《绿巨人2》电影将于今年6月中旬上映，主演是人见人爱的爱德华诺顿。(Google <a href="http://www.google.cn/search?hl=zh-CN&amp;q=%E7%BB%BF%E5%B7%A8%E4%BA%BA2&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;meta=lr%3Dlang_zh-CN%7Clang_zh-TW&amp;aq=f">CN</a> <a href="http://www.google.com/search?hl=en&amp;client=opera&amp;rls=en&amp;hs=vki&amp;q=The+Hulk+2&amp;btnG=Search">EN</a>)
</div>
<p>跳转后观看视频<span id="more-32"></span></p>
<p><embed src="http://services.brightcove.com/services/viewer/federated_f8/1386356735" bgcolor="#FFFFFF" flashvars="playerId=1386356735&amp;viewerSecureGatewayURL=https://services.brightcove.com/services/amfgateway&amp;servicesURL=http://services.brightcove.com/services&amp;cdnURL=http://admin.brightcove.com&amp;domain=embed&amp;autoStart=false&amp;" base="http://admin.brightcove.com" name="flashObj" seamlesstabbing="false" type="application/x-shockwave-flash" swliveconnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" height="300" width="370"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/music-video/spider-man-iron-and-steel-xia-super-hero-hulk-smash-bros.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>CssWork V2.0 下载</title>
		<link>http://www.csswork.cn/my-work/csswork-v20-download.html</link>
		<comments>http://www.csswork.cn/my-work/csswork-v20-download.html#comments</comments>
		<pubDate>Thu, 01 May 2008 22:22:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[WORK 工作]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[下载]]></category>

		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://www.csswork.cn/?p=31</guid>
		<description><![CDATA[
CssWork V2.0 下载 

详细看本站演示，因该在一段时间内不会做新模板了。
有什么问题请留言，有空的话会尽量解答。
请注意，本模板的Page页没有制作。 
]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.csswork.cn/w/wp-content/uploads/2008/05/csswork1.jpg" alt="csswork1.jpg" /></p>
<p><a href="http://www.yourgem.cn/cssWork2.0.rar">CssWork V2.0 下载 </a></p>
<p><span id="more-31"></span></p>
<p>详细看本站演示，因该在一段时间内不会做新模板了。</p>
<p>有什么问题请留言，有空的话会尽量解答。</p>
<p><strong>请注意，本模板的Page页没有制作。 </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csswork.cn/my-work/csswork-v20-download.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
