<?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>思维 &#187; 设计技巧</title>
	<atom:link href="http://blog.acmind.com/archives/category/program/design/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.acmind.com</link>
	<description>Acme of Mind</description>
	<lastBuildDate>Mon, 19 Apr 2010 02:23:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>用Photoshop设计一个小型、现代的产品主页并由psd转换成XHTML/CSS模板</title>
		<link>http://blog.acmind.com/archives/1686</link>
		<comments>http://blog.acmind.com/archives/1686#comments</comments>
		<pubDate>Fri, 11 Dec 2009 01:17:41 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[转换]]></category>
		<category><![CDATA[PhotoShop]]></category>
		<category><![CDATA[psd]]></category>
		<category><![CDATA[xhtml]]></category>
		<category><![CDATA[模板]]></category>
		<category><![CDATA[教程]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/archives/1686</guid>
		<description><![CDATA[
这个Photoshop web设计的教程中，我们将学习设计一个整洁的具有现代气息的web站点。这是设计和HTML/CSS模板转换系列教程的第一部分。
第一部分: 用Photoshop设计一个小型、现代的产品主页
预览
以下是我们将要一些设计的页面预览，点击图片可以放大。

建立一个新的Photoshop文档
1 首先在Photoshop中新建一个文档（Ctrl+N），大小为1200 x 1200像素，背景设为透明。

设置头部背景
2 使用矩形选定工具在透明的背景上画出一个矩形，矩形大小：1200px ×120px

3 使用油漆桶工具（G）用任意颜色填充头部刚才选定区域。点开图层样式对话框，用以下设置来增加一个渐变叠加效果。

完了，应该出现以下效果：

创建内容部分的背景图层
4 现在我们将要创建图层内容区域的第二部分背景。把前景色设为#00315C，背景色设为#001B32。选择矩形框选定工具（M）选定剩下的透明图层；选定后，选择渐变工具（G）,然后设置渐变类型为径向渐变。

5 设定好渐变工具（G）后，从顶部的中间垂直的拖动到画布的4/1大小左右。

添加参考线
6 现在我们需要一些参考线保留出宽度为850px的中间内容部分。选择视图 &#62; 新建参考线。在新建参考线对话框中输入175px，取向选择垂直。这样一个画布左边的参考线就做好了。

7 重复6的步骤，创建另外一条垂直参考线，不过这次输入1025px (175px + 850px = 1025px)。这样一个850px宽、居中的区域就做好了。

设计头部区域
8 选择横排文字工具（T），然后对其左边参考线边沿添加上页面标题和标语。

9 在标题文本图层下面创建一个新图层，选定矩形选框工具（M），在头部选取出一个区域。宽度必须填满1200px，高度大概在60px左右。

10 用白色（#FFFFFF）填充（G）选定区域，然后在图层面板中设置透明度为25%。效果如下。

创建导航
11 选择横排文字工具（T），字体大小设定为11-12px左右。然后在标题和标示右边加入导航文字；没菜单项之间留出等宽的边距。

12 在每个菜单项之间使用矩形选框工具（M）做一个1px宽的分割线；长度跨越整个头部。用#CECECE颜色填充（G）这1px的线条。效果如下图。

13 现在，我们在每个菜单项中加入鼠标悬停动态效果（hover）。我已经给其中一个菜单项加入颜色表示鼠标悬停时的效果。使用多边形套索工具（L）按住shift，创建一个三角形，以保证每条线都是直的。

14 用#00315C这个颜色填充选定的三角形区域

创建欢迎区域
15 选择横排文字工具（T）,加入一些欢迎标语；同样左边距紧贴左参考线，然后在上面的页面标题和下面的欢迎文本中留出一定的空间。文本下面加入4个蓝色的列表图标。这个图标是 Function Icon Set 里面的（文件名是circle_blue.png）。

16 在欢迎文本的右边将插入一个欢迎图片；我这里使用的是Six Revisions网站界面裁图。裁剪你的图片，去掉不需要的部分。图片准备好之后，通过编辑 &#62; 变换 &#62; 透视 改变图片的视角。

17 选择椭圆选框工具，然后在欢迎图片下方画一个椭圆。

18 用黑色（#000000）填充（G）椭圆选定区域。
19 然后设置区域图层透明度为35%。
20 然后使用滤镜 &#62; 模糊 &#62; 高斯模糊这个椭圆，设定模糊半径为1到2px。

21 把欢迎图片和下面的阴影再复制一份，然后把它们拖动到原图片的下面。
22 位置拖动好之后，使用高斯模糊下面的裁图，半径为1px。

创建水平3D分割线
23 选择矩形选框工具（M）层叠的创建两个1px的线条；宽度为850px，从左参考线到右参考线。你可以将两个线条放在同一个图层。
24 分别使用颜色#000D19和#003461填充这两个线条。

25 选择椭圆选框工具（M）然后在分割线上面画出一个椭圆。

26 使用黑色（#000000）填充（G）选定区域，加上2到3px的高斯模糊。然后使用矩形选框工具删掉分割线上半部分，这样就剩下了半个椭圆。

27 将这两个图层合并（Ctrl+E），然后添加一个图层蒙版（点击图层面板上的“添加图层蒙版”按钮）来合并图层。
28 使用渐变工具（G）,渐变类型为对称渐变，前景色设为白色（#FFFFFF）,背景色设置黑色（#000000）。

29 [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image001.jpg" width="554" height="254" /></p>
<p><i>这个Photoshop web设计的教程中，我们将学习设计一个整洁的具有现代气息的web站点。这是设计和HTML/CSS模板转换系列教程的第一部分。</i></p>
<p><strong><font color="#ffffff" size="3">第一部分: 用Photoshop设计一个小型、现代的产品主页</font></strong></p>
<p><b>预览</b></p>
<p>以下是我们将要一些设计的页面预览，点击图片可以放大。</p>
<p><a href="http://images.sixrevisions.com/2009/10/27-03_minimal_modern_layout_full.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image002.gif" width="554" height="433" /></a></p>
<p><b>建立一个新的Photoshop文档</b></p>
<p>1 首先在Photoshop中新建一个文档（Ctrl+N），大小为1200 x 1200像素，背景设为透明。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image003.gif" width="555" height="340" /></p>
<p><b>设置头部背景</b></p>
<p>2 使用矩形选定工具在透明的背景上画出一个矩形，矩形大小：1200px ×120px</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image004.gif" width="554" height="73" /></p>
<p>3 使用油漆桶工具（G）用任意颜色填充头部刚才选定区域。点开图层样式对话框，用以下设置来增加一个渐变叠加效果。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image005.gif" width="554" height="562" /></p>
<p>完了，应该出现以下效果：</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image006.gif" width="554" height="179" /></p>
<p><b>创建内容部分的背景图层</b></p>
<p>4 现在我们将要创建图层内容区域的第二部分背景。把前景色设为<b>#00315C</b>，背景色设为<b>#001B32</b>。选择矩形框选定工具（M）选定剩下的透明图层；选定后，选择渐变工具（G）,然后设置渐变类型为<b>径向渐变</b>。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image007.jpg" width="554" height="657" /></p>
<p>5 设定好渐变工具（G）后，从顶部的中间垂直的拖动到画布的4/1大小左右。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image008.jpg" width="554" height="304" /></p>
<p><b>添加参考线</b></p>
<p>6 现在我们需要一些参考线保留出宽度为<b>850px</b>的中间内容部分。选择视图 &gt; 新建参考线。在新建参考线对话框中输入<b>175px</b>，取向选择垂直。这样一个画布左边的参考线就做好了。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image009" border="0" alt="clip_image009" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image009.jpg" width="554" height="404" /></p>
<p>7 重复6的步骤，创建另外一条垂直参考线，不过这次输入<b>1025px</b> (175px + 850px = 1025px)。这样一个850px宽、居中的区域就做好了。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image010.gif" width="554" height="404" /></p>
<p><b>设计头部区域</b></p>
<p>8 选择横排文字工具（T），然后对其左边参考线边沿添加上页面标题和标语。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image011" border="0" alt="clip_image011" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image011.jpg" width="554" height="404" /></p>
<p>9 在标题文本图层下面创建一个新图层，选定矩形选框工具（M），在头部选取出一个区域。宽度必须填满<b>1200px</b>，高度大概在<b>60px</b>左右。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image012.jpg" width="554" height="404" /></p>
<p>10 用白色（<b>#FFFFFF</b>）填充（G）选定区域，然后在图层面板中设置透明度为<b>25%</b>。效果如下。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image013" border="0" alt="clip_image013" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image013.jpg" width="554" height="404" /></p>
<p><b>创建导航</b></p>
<p>11 选择横排文字工具（T），字体大小设定为<b>11-12px</b>左右。然后在标题和标示右边加入导航文字；没菜单项之间留出等宽的边距。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image014.jpg" width="554" height="404" /></p>
<p>12 在每个菜单项之间使用矩形选框工具（M）做一个<b>1px</b>宽的分割线；长度跨越整个头部。用<b>#CECECE</b>颜色填充（G）这1px的线条。效果如下图。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image015" border="0" alt="clip_image015" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image015.jpg" width="554" height="404" /></p>
<p>13 现在，我们在每个菜单项中加入鼠标悬停动态效果（hover）。我已经给其中一个菜单项加入颜色表示鼠标悬停时的效果。使用多边形套索工具（L）按住shift，创建一个三角形，以保证每条线都是直的。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image016.jpg" width="554" height="404" /></p>
<p>14 用<b>#00315C</b>这个颜色填充选定的三角形区域</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image017" border="0" alt="clip_image017" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image017.jpg" width="554" height="232" /></p>
<p><b>创建欢迎区域</b></p>
<p>15 选择横排文字工具（T）,加入一些欢迎标语；同样左边距紧贴左参考线，然后在上面的页面标题和下面的欢迎文本中留出一定的空间。文本下面加入4个蓝色的列表图标。这个图标是 <a href="http://wefunction.com/2008/07/function-free-icon-set/">Function Icon Set</a> 里面的（文件名是<b>circle_blue.png</b>）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image018.jpg" width="554" height="404" /></p>
<p>16 在欢迎文本的右边将插入一个欢迎图片；我这里使用的是Six Revisions网站界面裁图。裁剪你的图片，去掉不需要的部分。图片准备好之后，通过编辑 &gt; 变换 &gt; 透视 改变图片的视角。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image019" border="0" alt="clip_image019" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image019.gif" width="554" height="404" /></p>
<p>17 选择椭圆选框工具，然后在欢迎图片下方画一个椭圆。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image020" border="0" alt="clip_image020" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image020.gif" width="554" height="404" /></p>
<p>18 用黑色（<b>#000000</b>）填充（G）椭圆选定区域。</p>
<p>19 然后设置区域图层透明度为<b>35%</b>。</p>
<p>20 然后使用滤镜 &gt; 模糊 &gt; 高斯模糊这个椭圆，设定模糊半径为<b>1到2px</b>。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image021" border="0" alt="clip_image021" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image021.gif" width="554" height="404" /></p>
<p>21 把欢迎图片和下面的阴影再复制一份，然后把它们拖动到原图片的下面。</p>
<p>22 位置拖动好之后，使用高斯模糊下面的裁图，半径为<b>1px</b>。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image022" border="0" alt="clip_image022" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image022.gif" width="554" height="404" /></p>
<p><b>创建水平3D分割线</b></p>
<p>23 选择矩形选框工具（M）层叠的创建两个1px的线条；宽度为850px，从左参考线到右参考线。你可以将两个线条放在同一个图层。</p>
<p>24 分别使用颜色<b>#000D19</b>和<b>#003461</b>填充这两个线条。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image023" border="0" alt="clip_image023" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image023.gif" width="554" height="404" /></p>
<p>25 选择椭圆选框工具（M）然后在分割线上面画出一个椭圆。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image024" border="0" alt="clip_image024" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image024.jpg" width="554" height="260" /></p>
<p>26 使用黑色（<b>#000000</b>）填充（G）选定区域，加上<b>2到3px</b>的高斯模糊。然后使用矩形选框工具删掉分割线上半部分，这样就剩下了半个椭圆。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image025" border="0" alt="clip_image025" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image025.jpg" width="554" height="404" /></p>
<p>27 将这两个图层合并（Ctrl+E），然后添加一个图层蒙版（点击图层面板上的“添加图层蒙版”按钮）来合并图层。</p>
<p>28 使用渐变工具（G）,渐变类型为对称渐变，前景色设为白色（<b>#FFFFFF</b>）,背景色设置黑色（<b>#000000</b>）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image026" border="0" alt="clip_image026" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image026.gif" width="554" height="404" /></p>
<p>29 拖动对称渐变，从分割线中间向两边拖动，从而产生中间向两边淡入效果。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image027" border="0" alt="clip_image027" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image027.jpg" width="554" height="316" /></p>
<p><b>设计内容区域</b></p>
<p>30 选择横排文字工具（T）在3D分割线下方，右分割线的左边加入任意的文字标题和段落。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image028" border="0" alt="clip_image028" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image028.jpg" width="554" height="325" /></p>
<p>31 使用圆角矩形工具（U）在内容文本区域的左边创建一个圆角矩形；半径设为<b>10px</b>（默认情况下背景是10px）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image029" border="0" alt="clip_image029" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image029.gif" width="554" height="404" /></p>
<p>32 路径画好之后，选择钢笔工具（P），右击矩形内部，选择<b>建立选区</b>。</p>
<p>33 设置前景色为<b>#00315C</b>，背景色为<b>#001B32</b> ，然后选择渐变工具（G），渐变类型为径向渐变。</p>
<p>34 从顶部把渐变拖动到中间，和我们绘制背景方法相同。效果如下图。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image030" border="0" alt="clip_image030" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image030.jpg" width="554" height="404" /></p>
<p>35 现在需要给圆角矩形图层加入投影、内阴影和描边的图层样式（双击图层面板上面的图层，打开图层样式对话框）。设置如下。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image031" border="0" alt="clip_image031" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image031.gif" width="554" height="412" /></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image032" border="0" alt="clip_image032" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image032.gif" width="554" height="412" /></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image033" border="0" alt="clip_image033" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image033.gif" width="554" height="412" /></p>
<p>36 使用多边形套索工具（L），然后在矩形上面做一个三角形的选区。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image034" border="0" alt="clip_image034" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image034.jpg" width="554" height="404" /></p>
<p>37 剪切并复制选区到一个新图层，一般这样做将会丢失掉选取的图层样式，所以在这之前我们必须给右下角图层重复添加一次样式。</p>
<p>38 通过编辑 &gt; 变换 &gt; 旋转给边角图层翻转180度；</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image035" border="0" alt="clip_image035" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image035.jpg" width="554" height="404" /></p>
<p>39 加入一些任意文字以完成内容框的绘制。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image036" border="0" alt="clip_image036" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image036.jpg" width="554" height="251" /></p>
<p><b>创建页脚区域</b></p>
<p>40 选择圆角矩形工具（U）在也叫拖动出一个圆角矩形。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image037" border="0" alt="clip_image037" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image037.gif" width="554" height="99" /></p>
<p>41 使用任意颜色来填充这个圆角矩形选区，选区加入如下样式的渐变叠加效果。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image038" border="0" alt="clip_image038" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image038.gif" width="554" height="567" /></p>
<p>42 最后，加上页脚信息就大功告成了。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image039" border="0" alt="clip_image039" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image039.gif" width="554" height="77" /></p>
<p><b>完成</b></p>
<p><strong><font color="#ffffff" size="3">第二部分: 将小型、现代的产品主页由psd转换成XHTML/CSS模板</font></strong> </p>
<p> 点击下面的图片将会看到本次制作的 <a href="http://sixrevisions.com/demo/minimal_modern_layout/index.html">demo</a> 的效果。
<p><a href="http://sixrevisions.com/demo/minimal_modern_layout/index.html"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image041" border="0" alt="clip_image041" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image041.jpg" width="554" height="408" /></a></p>
<p> 创建文件结构，准备文件
<p>1 在桌面上创建新的空目录，取名<strong>portfolio</strong>。</p>
<p>2 在portfolio目录下面继续创建<strong>images</strong>目录用于存放图片。</p>
<p>3 接下来创建两个空文件 <strong>styles.css</strong>和<strong>index.html</strong></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image042" border="0" alt="clip_image042" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image042.gif" width="554" height="386" /></p>
<p>4 用你最喜欢的文本编辑器打开index.html，我将在本教程中使用Adobe Dreamweaver。</p>
<p>5 在文档的&lt;head&gt;标签加入对styles.css的链接。可以使用如下代码：</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#0000ff">&lt;link </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;styles.css&quot; </font><font color="#ff0000">rel</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;stylesheet&quot; </font><font color="#ff0000">type</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;text/css&quot; </font><font color="#0000ff">/&gt;</font>
</font></pre>
</div>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image043" border="0" alt="clip_image043" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image043.gif" width="554" height="267" /></p>
<p>页面分区 </p>
<p>以下是我们网页模板的基本结构。我们从创建基本分区来开始我们的模板转换工作。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image044" border="0" alt="clip_image044" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image044.gif" width="554" height="434" /></p>
<p>6 我们将从在浏览器中居中、包含整个文档的主容器开始（也被称之为外壳（wrapper））。在容器内部内的5个div将组成一个完整的页面：这些div是：#top,</p>
<p>#welcome, #sidebar, #content 和 #footer。</p>
<p>HTML代码如下：</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--CONTAINER STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;container&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--HEADER/NAVIGATION STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;top&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--HEADER/NAVIGATION ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME AREA STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME AREA ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--SIDEBAR STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;sidebar&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--SIDEBAR ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--CONTENT STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;content&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--CONTENT ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--FOOTER STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;footer&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--FOOTER ENDS--&gt;</font>

<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--CONTAINER ENDS--&gt;</font>
</font></pre>
</div>
<p>模板背景切片 </p>
<p>7 在我们把各个div转成代码之前，我们首先在页面中加入背景。用Photoshop打开PSD文件，用矩形选框工具（M）选定头部/导航和背景的一点区域；选定的宽度可以只有<strong>1px</strong></p>
<p>（因为我们将会在后面使用css来水平重复它）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image045" border="0" alt="clip_image045" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image045.gif" width="554" height="404" /></p>
<p>8 在选定区域的底部，用滴管工具（I）记录下色彩的16进制值。</p>
<p>9 选定好之后，点编辑 &gt; 合并拷贝，创建一个新Photoshop文件（Ctrl+N），然后将选定区域复制到新文档中。通常新建Photoshop画布长宽是剪切板中选定区域的大小。如果不是，请确保他</p>
<p>们是一致的。</p>
<p>10 在新Photoshop文档中，点文件 &gt; 另存为 web 和设备所用格式（Alt+Shift+Ctrl+S），选择PNG-8格式，保存文件为<strong>background.png</strong>，保存在images目录下。</p>
<p>将背景转成代码 </p>
<p>11 现在我们已经将背景图片从Photoshop中切片出来，我们可以开始写代码了。打开CSS文件（styles.css），然后写入以下代码：</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">* {</font>
	<font color="#0000ff">margin: </font><font color="#000000">0px;</font>
	<font color="#0000ff">padding: </font><font color="#000000">0px;</font>
	<font color="#0000ff">border: </font><font color="#ff0000">none</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">body {</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/background.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">repeat-x</font><font color="#000000">;</font>
	<font color="#0000ff">background-color: </font><font color="#000000">#001b32;</font>
	<font color="#0000ff">font-family: </font><font color="#000000">Arial, Helvetica, </font><font color="#ff0000">sans-serif</font><font color="#000000">;</font>
	<font color="#0000ff">font-size: </font><font color="#000000">12px;</font>
	<font color="#0000ff">color: </font><font color="#000000">#c8c8c8;</font>
<font color="#000000">}</font>
<font color="#000000">#container {</font>
	<font color="#0000ff">margin: </font><font color="#ff0000">auto</font><font color="#000000">;</font>
	<font color="#0000ff">width: </font><font color="#000000">850px;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>让我们来仔细的分析一下样式代码。 </p>
<p>首先我们将所有元素的margin，padding，border的值归零以避免跨浏览器的兼容性。我们这个用到的是<strong>*</strong>选择器。</p>
<p>接下来，我们样式化 body 元素；我们将 background.png 设置为背景，通过 repeat-x 使它水平重复。同样把背景色设置为深蓝（#001b32）。</p>
<p>最后，我们把#container的margin设置为 auto 让布局居中，并且设置宽度为850px。</p>
<p>Logo和站点名的切片 </p>
<p>12 现在我们接着制作模板的logo和站点标题。使用矩形选框工具（M），选定站点的标题和标示文本（以下图为参考）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image046" border="0" alt="clip_image046" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image046.jpg" width="554" height="404" /></p>
<p>13 就像处理 background.png 一样，复制这个区域到新文档，然后保存为<strong>title.png</strong>放在images目录。</p>
<p>和站点名转换成代码 </p>
<p>14 我们转到HTML文档中，在#top这个div里面我们创建一个新div，ID为title。</p>
<p>15 在#title div里面，加入&lt;h1&gt;元素来放置我们的站点名；同样需要创建一个超链接（&lt;a&gt;）链接到站点主页。对于这个模板，我们仅把href属性的值设为#，如果需要在实际中使用这</p>
<p>个模板，你可以用反斜杠（/）来代替#。</p>
<p>HTML代码如下：</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--HEADER/NAVIGATION STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;top&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--WEBSITE TITLE STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;title&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;h1&gt;&lt;a </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;#&quot; </font><font color="#ff0000">title</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;Your Website Name&quot;</font><font color="#0000ff">&gt;</font><font color="#000000">Your Website Name</font><font color="#0000ff">&lt;/a&gt;&lt;/h1&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WEBSITE TITLE ENDS--&gt;</font>

<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--HEADER/NAVIGATION ENDS--&gt;</font>
</font></pre>
</div>
<p>16 现在我们转向样式表。样式化#top区域元素。代码如下。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">#top {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">850px;</font>
	<font color="#0000ff">height: </font><font color="#000000">119px;</font>
<font color="#000000">}</font>
<font color="#000000">#title {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">278px;</font>
	<font color="#0000ff">height: </font><font color="#000000">74px;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">45px;</font>
<font color="#000000">}</font>
<font color="#000000">#title h1 {</font>
	<font color="#0000ff">display: </font><font color="#ff0000">block</font><font color="#000000">;</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">278px;</font>
	<font color="#0000ff">height: </font><font color="#000000">74px;</font>
	<font color="#0000ff">text-indent: </font><font color="#000000">-9999px;</font>
<font color="#000000">}</font>
<font color="#000000">#title h1 a {</font>
	<font color="#0000ff">display: </font><font color="#ff0000">block</font><font color="#000000">;</font>
	<font color="#0000ff">width: </font><font color="#000000">100%;</font>
	<font color="#0000ff">height: </font><font color="#000000">100%;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/title.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">background-position: </font><font color="#000000">0 0;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>让我们来仔细分析一下上面的代码。</p>
<p>首先我们需要将#top浮动到左边，然后给定一个固定的宽度和高度。</p>
<p>宽度应该和#container等宽，850px，高度应该和浅灰色区域等高，119px。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image047" border="0" alt="clip_image047" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image047.jpg" width="554" height="404" /></p>
<p>接下来，我们使用一种<a href="http://stopdesign.com/archive/2003/03/07/replace-text.html">CSS背景图片替换</a>的技术使用text-indent方法。我们将#title h1</p>
<p>里面的文字向左缩进-9999px，将文字推出了浏览器的可视区域。这个技术对于屏幕阅读器的可访问性和搜索引擎优化都有好处。</p>
<p>导航转换成代码 </p>
<p>17 在#top里面，#title下面我们创建一个ID为navigation的div。在#navigation里面增加一个无序列表，class值设为nav-links。以下</p>
<p>是#navigation的代码段。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--NAVIGATION STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;navigation&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;ul&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;&lt;a </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;#&quot; </font><font color="#ff0000">title</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;home&quot;</font><font color="#0000ff">&gt;</font><font color="#000000">home</font><font color="#0000ff">&lt;/a&gt;&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;&lt;a </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;#&quot; </font><font color="#ff0000">title</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;about&quot;</font><font color="#0000ff">&gt;</font><font color="#000000">about</font><font color="#0000ff">&lt;/a&gt;&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;&lt;a </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;#&quot; </font><font color="#ff0000">title</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;portfolio&quot;</font><font color="#0000ff">&gt;</font><font color="#000000">portfolio</font><font color="#0000ff">&lt;/a&gt;&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;&lt;a </font><font color="#ff0000">href</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;#&quot; </font><font color="#ff0000">title</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;contact&quot;</font><font color="#0000ff">&gt;</font><font color="#000000">contact</font><font color="#0000ff">&lt;/a&gt;&lt;/li&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/ul&gt;</font>
<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--NAVIGATION ENDS--&gt;</font>
</font></pre>
</div>
<p>给无序列表设定一个nav-links的类主要目录是为了在链接CSS的时候不会影响到页面上的其他无序列表。需要注意的是，最后一个列表项加入borderx2的类，意为“边框乘2”；因为导航中的列表项都有一个分割线，我们需要给最后一样的左右都加上一个1px的边框（也就是边框乘2）。</p>
<p>悬停指示器切片 </p>
<p>18 在给导航加入CSS样式之前，我们得首先把小小的悬停三角形切片。到Photoshop中使用矩形选框工具（M）选定这个三角形，复制透明背景的新文档，保存为images目录下的</p>
<p><strong>nav_hover.png</strong>。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image048" border="0" alt="clip_image048" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image048.gif" width="554" height="404" /></p>
<p>导航样式化 </p>
<p>19 现在该是给导航加入CSS代码的时候了。使用以下代码。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">.nav-links li a {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">120px;</font>
	<font color="#0000ff">height: </font><font color="#000000">68px;</font>
	<font color="#0000ff">text-decoration: </font><font color="#ff0000">none</font><font color="#000000">;</font>
	<font color="#0000ff">text-transform: </font><font color="#ff0000">capitalize</font><font color="#000000">;</font>
	<font color="#0000ff">color: </font><font color="#000000">#666666;</font>
	<font color="#0000ff">font-size: </font><font color="#000000">12px;</font>
	<font color="#0000ff">text-align: </font><font color="#ff0000">center</font><font color="#000000">;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">51px;</font>
	<font color="#0000ff">border-left-width: </font><font color="#000000">1px;</font>
	<font color="#0000ff">border-left-style: </font><font color="#ff0000">solid</font><font color="#000000">;</font>
	<font color="#0000ff">border-left-color: </font><font color="#000000">#cecece;</font>
<font color="#000000">}</font>
<font color="#000000">.nav-links li a:hover {</font>
	<font color="#0000ff">color: </font><font color="#000000">#00284a;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/nav_hover.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">background-position: </font><font color="#ff0000">center </font><font color="#000000">bottom;</font>
<font color="#000000">}</font>
<font color="#000000">li.borderx2 {</font>
	<font color="#0000ff">border-right-width: </font><font color="#000000">1px;</font>
	<font color="#0000ff">border-right-style: </font><font color="#ff0000">solid</font><font color="#000000">;</font>
	<font color="#0000ff">border-right-color: </font><font color="#000000">#cecece;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>首先，为了让列表项挨个的显示，我们将它们向左浮动。然后给他们固定的宽度高度，使他们之前的空间均衡。然后通过给text-decoration值none来去掉超链接默认的下划线。</p>
<p>然后给每个列表项一个1px、灰色的左边框。</p>
<p>然后通过:hover伪类来样式化悬停效果。当鼠标悬停时，我们将列表项的背景设为nav_hover.png。</p>
<p>最后解决最后一个列表项右边没有分割线的问题，需要给.borderx2类声明一个border属性。</p>
<h5>创建欢迎区域</h5>
<p>欢迎区域会被分割成两个部分，左边(#welcome-text)和右边(#welcome-image)。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image049" border="0" alt="clip_image049" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image049.gif" width="554" height="181" /></p>
<p>20 在index.html的#welcome div中加入两个新的div，一个ID为welcome-text，一个ID为welcome-image。我们会在切片完成后将两个div填充上内容。</p>
<p>欢迎图片的切片 </p>
<p>21 转到PSD文件，关闭除了有渐变效果深蓝背景的其他所有图层（点击图层左边的眼睛图标）。</p>
<p>22 使用矩形选框工具（M）选定一个宽度不超过850px的矩形，可以通过第一部分的设定好的参考线来选定。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image050" border="0" alt="clip_image050" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image050.jpg" width="554" height="324" /></p>
<p>23 将这个深蓝背景转成web图片<strong>content_background.png</strong>，放在images目录下。使用同样的方法，关闭除了欢迎图片图层的其他图层，切片蓝点和欢迎图片（见一下参考）。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image051" border="0" alt="clip_image051" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image051.gif" width="554" height="454" /></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image052" border="0" alt="clip_image052" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image052.jpg" width="554" height="304" /></p>
<p>新区域的HTML类似如下。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--WELCOME AREA STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME TEXT STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome-text&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME TEXT ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME IMAGE STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome-image&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;img </font><font color="#ff0000">src</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;images/welcome_image.png&quot; </font><font color="#ff0000">alt</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;Welcome...&quot; </font><font color="#0000ff">/&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME IMAGE ENDS--&gt;</font>

<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--WELCOME AREA ENDS--&gt;</font>
</font></pre>
</div>
<p>24 在#welcome-text div中文名增加一些欢迎文字。使用&lt;h2&gt;标签给欢迎文字增加标题，然后在以下添加无序列表。</p>
<p>25 在#welcome-image中添加欢迎图片（本案例添加的是Six Revisions的网站裁图）。</p>
<p>合起来，HTML代码如下。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--WELCOME AREA STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome&quot;</font><font color="#0000ff">&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME TEXT STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome-text&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;h2&gt;</font><font color="#000000">welcome to </font><font color="#0000ff">&lt;span&gt;</font><font color="#000000">yourwebsite!</font><font color="#0000ff">&lt;/span&gt;&lt;/h2&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur[...]</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Proin fringilla nunc lorem, in sollicitudin orci. Sed ut eros ligula.</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;ul&gt;</font>
<font color="#000000">			</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">			</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">			</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">			</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;/ul&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME TEXT ENDS--&gt;</font>
<font color="#000000">	</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME IMAGE STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;welcome-image&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;img </font><font color="#ff0000">src</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;images/welcome_image.png&quot; </font><font color="#ff0000">alt</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;Welcome...&quot; </font><font color="#0000ff">/&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--WELCOME IMAGE ENDS--&gt;</font>

<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--WELCOME AREA ENDS--&gt;</font>
</font></pre>
</div>
<p>样式化欢迎区域 </p>
<p>26 现在样式化欢迎区域。复制以下代码到CSS中，后面有对代码的解释。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">#welcome {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">850px;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/content_background.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">height: </font><font color="#000000">326px;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">40px;</font>
<font color="#000000">}</font>
<font color="#000000">h2 {</font>
	<font color="#0000ff">text-transform: </font><font color="#ff0000">uppercase</font><font color="#000000">;</font>
	<font color="#0000ff">color: </font><font color="#000000">#ffffff;</font>
	<font color="#0000ff">font-size: </font><font color="#000000">16px;</font>
	<font color="#0000ff">margin-bottom: </font><font color="#000000">15px;</font>
<font color="#000000">}</font>
<font color="#000000">.heading-color2 {</font>
	<font color="#0000ff">color: </font><font color="#000000">#9a9a9a;</font>
<font color="#000000">}</font>
<font color="#000000">#welcome-text {</font>
	<font color="#0000ff">width: </font><font color="#000000">406px;</font>
	<font color="#0000ff">line-height: </font><font color="#000000">18px;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">50px;</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">text-align: </font><font color="#ff0000">justify</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">#welcome-text {</font>
	<font color="#0000ff">margin-bottom:</font><font color="#000000">10px;</font>
<font color="#000000">}</font>
<font color="#000000">.list li {</font>
	<font color="#0000ff">text-decoration: </font><font color="#ff0000">none</font><font color="#000000">;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/bullet.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">list-style-type: </font><font color="#ff0000">none</font><font color="#000000">;</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">180px;</font>
	<font color="#0000ff">padding-left: </font><font color="#000000">20px;</font>
	<font color="#0000ff">margin-top: </font><font color="#000000">10px;</font>
	<font color="#0000ff">background-position: </font><font color="#000000">left </font><font color="#ff0000">center</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">#welcome-image {</font>
	<font color="#0000ff">float: </font><font color="#000000">right;</font>
	<font color="#0000ff">height: </font><font color="#000000">326px;</font>
	<font color="#0000ff">width: </font><font color="#000000">427px;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>让我们来详解一下上面的代码。首先，我们通过background属性（content_background.png）给#welcome加入渐变背景，并且是不重复的</p>
<p>（repeat: no-repeat）。让后给这个div一个固定的宽度高度；宽度为模板内容宽度（850px）,高度为欢迎图片的高度（236px）。</p>
<p>通过text-transform属性让&lt;h2&gt;内的文字大写。将‘yourwebsite’包裹在class为heading-color2的span中，赋予其不同的颜色。</p>
<p>无序列表加入类list，然后把背景设置为bullet.png，通过list-style-type设为none去掉默认列表项前面的圆点。</p>
<p>最后，为了让#welcome-image在#welcome-text的右边显示，我们将其向右浮动，给定固定的宽度（在浮动元素中常用）。同样给welcome_image.png一个固</p>
<p>定的宽度高度值。</p>
<h5>3D分割线切片</h5>
<p>27 对于3D分割线，我打算通过加入类为separator的div，可以实现复用。使用矩形选框工具（M）选定区域宽度不能大于850px，高度不能超出3D分割线本身的大小。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image053" border="0" alt="clip_image053" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image053.jpg" width="554" height="188" /></p>
<p>28 用之前的方法将选区存为images目录下的separator.png。</p>
<h5>3D分割线转换成代码</h5>
<p>29 对于分割线的HTML和CSS相当简单。在index.html中#welcome下面插入div。将&amp;nbsp;放入.separator的div中。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--WELCOME AREA ENDS--&gt;</font>

<font color="#000000">	</font><font color="#008000">&lt;!--SEPARATOR STARTS--&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;div&gt;</font><font color="#008080">&amp;nbsp;</font><font color="#0000ff">&lt;/div&gt;</font>
<font color="#000000">	</font><font color="#008000">&lt;!--SEPARATOR ENDS--&gt;</font>
</font></pre>
</div>
<p>30 CSS文件中加入如下代码。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">.separator {</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/separator.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">height: </font><font color="#000000">17px;</font>
	<font color="#0000ff">width: </font><font color="#000000">850px;</font>
	<font color="#0000ff">margin-top: </font><font color="#000000">20px;</font>
	<font color="#0000ff">margin-bottom: </font><font color="#000000">20px;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>我们将.separator的background-image设定为separator.png。给定宽度850，然后向左浮动。height值等于separator.png的高度。然后给顶部和底部</p>
<p>margin设为20px，让它们彼此之间有一定的间歇。</p>
<h5>侧边栏切片</h5>
<p>31 对于侧边栏，我们仅需要侧边栏框。这个教程中侧边栏框大小是固定的，但是如果需要可以很容易的扩展（这部分叫给大家自己完成）。使用矩形选框工具（M）选定这个侧边栏框；我的</p>
<p>选定范围是<strong>259 x 259px</strong>.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image054" border="0" alt="clip_image054" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image054.jpg" width="554" height="404" /></p>
<p>32 存为images目录下的<strong>contentbox.png</strong><strong>。</strong></p>
<p>33 使用矩形选框工具，设定宽度为1px，高度为2px。选定文字之间的分割线部分。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image055" border="0" alt="clip_image055" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image055.jpg" width="554" height="404" /></p>
<p>32 和往常一样，存为images目录下的<strong>divider.png </strong>。选定很小是因为下面将通过CSS将其水平重复。</p>
<h5>编写侧边栏HTML代码</h5>
<p>35 在.separator层下面，是我们的#sidebar，将&lt;h3&gt;作为侧边栏标题。然后给无序列表加入类sidebar-list使样式可以自定义。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--SIDEBAR STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;sidebar&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;h3&gt;</font><font color="#000000">lorem ipsum dolor</font><font color="#0000ff">&lt;/h3&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;ul&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur sit adipiscding...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur sit adipiscding...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">		</font><font color="#0000ff">&lt;li&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur sit adipiscding...</font><font color="#0000ff">&lt;/li&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;/ul&gt;</font>
<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--SIDEBAR ENDS--&gt;</font>
</font></pre>
</div>
<p>通过CSS样式化侧边栏 </p>
<p>36 CSS中加入如下代码</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">#sidebar {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">height: </font><font color="#000000">209px;</font>
	<font color="#0000ff">width: </font><font color="#000000">219px;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/contentbox.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">20px;</font>
	<font color="#0000ff">padding-right: </font><font color="#000000">20px;</font>
	<font color="#0000ff">padding-bottom: </font><font color="#000000">30px;</font>
	<font color="#0000ff">padding-left: </font><font color="#000000">20px;</font>
<font color="#000000">}</font>
<font color="#000000">h3 {</font>
	<font color="#0000ff">text-transform: </font><font color="#ff0000">uppercase</font><font color="#000000">;</font>
	<font color="#0000ff">color: </font><font color="#000000">#ffffff;</font>
	<font color="#0000ff">text-align: </font><font color="#ff0000">center</font><font color="#000000">;</font>
	<font color="#0000ff">margin-bottom: </font><font color="#000000">20px;</font>
	<font color="#0000ff">font-size: </font><font color="#000000">12px;</font>
<font color="#000000">}</font>
<font color="#000000">.sidebar-list li {</font>
	<font color="#0000ff">list-style-type: </font><font color="#ff0000">none</font><font color="#000000">;</font>
	<font color="#0000ff">margin-top: </font><font color="#000000">10px;</font>
	<font color="#0000ff">padding-bottom: </font><font color="#000000">10px;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/divider.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">repeat-x</font><font color="#000000">;</font>
	<font color="#0000ff">background-position: </font><font color="#000000">bottom;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>我们给#sidebar和contentbox.png一样的宽度高度。然后向左浮动，保证内容居左。同样设定background-image为contentbox.png。</p>
<p>通过text-transform将h3文字大小，通过text-align让文字居中。</p>
<p>最后通过list-style-type取值为none去掉.sidebar-list列表项的默认圆点，然后设定background-image为divider.png，水平重复</p>
<p>(repeat-x)。然后给定一些margin和padding值，让他们之间留些空间。</p>
<p>内容区域转换为代码 </p>
<p>37 内容区域相对简单，因为只包含了一些段落和标题。在#content层中，加入二级标题(&lt;h2&gt;)，然后通过span.heading-color2给第二部分的文字添加不同</p>
<p>的颜色。填充段落可以用<a href="http://www.lipsum.com/">lorem ipsum</a>无意义文本。HTML代码如下。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--CONTENT STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;content&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;h2&gt;</font><font color="#000000">welcome to </font><font color="#0000ff">&lt;span&gt;</font><font color="#000000">yourwebsite!</font><font color="#0000ff">&lt;/span&gt;&lt;/h2&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque.</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque.</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque.</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--CONTENT ENDS--&gt;</font>
</font></pre>
</div>
<p>内容区域样式化 </p>
<p>38 #content层加入以下代码。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">#content {</font>
	<font color="#0000ff">float: </font><font color="#000000">right;</font>
	<font color="#0000ff">width: </font><font color="#000000">550px;</font>
	<font color="#0000ff">text-align: </font><font color="#ff0000">justify</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">#content p {</font>
	<font color="#0000ff">margin-bottom: </font><font color="#000000">10px;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>为了让#content在右边显示，我们将其向右浮动，然后给定一个固定的宽度。不给定一个固定的高度的原因是我们想通过内部文本来控制高度。然后给&lt;p&gt;加入顶部</p>
<p>和底部margin让它们之间留有空间（因为之前我们已经将它们都归零了，这步是必须的）。</p>
<h5>页脚切片</h5>
<p>39 就快要结束了，让我们继续！使用矩形选框工具，大小850px × 60px将也叫背景图片选定。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image056" border="0" alt="clip_image056" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image056.gif" width="554" height="183" /></p>
<p>页脚转换成代码 </p>
<p>40 页脚很好转换成代码：我们之需要之前创建的#footer。在#footer层中，我们使用&lt;p&gt;加入一些版权文字。代码如下：</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#008000">&lt;!--FOOTER STARTS--&gt;</font>
<font color="#0000ff">&lt;div </font><font color="#ff0000">id</font><font color="#0000ff">=</font><font color="#ff00ff">&quot;footer&quot;</font><font color="#0000ff">&gt;</font>
<font color="#000000">	</font><font color="#0000ff">&lt;p&gt;</font><font color="#000000">Copyright </font><font color="#008080">&amp;copy;</font><font color="#000000"> Six Revisions - Design By Richard Carpenter</font><font color="#0000ff">&lt;/p&gt;</font>
<font color="#0000ff">&lt;/div&gt;</font>
<font color="#008000">&lt;!--FOOTER ENDS--&gt;</font>
</font></pre>
</div>
<p>将页脚样式化 </p>
<p>41 加入如下代码。</p>
<div class="mycode">
<pre><font face="微软雅黑">
<font color="#000000">#footer {</font>
	<font color="#0000ff">float: </font><font color="#000000">left;</font>
	<font color="#0000ff">width: </font><font color="#000000">850px;</font>
	<font color="#0000ff">background-image: </font><font color="#ff0000">url</font><font color="#000000">(images/footer.png);</font>
	<font color="#0000ff">background-repeat: </font><font color="#ff0000">no-repeat</font><font color="#000000">;</font>
	<font color="#0000ff">height: </font><font color="#000000">60px;</font>
	<font color="#0000ff">margin-top: </font><font color="#000000">40px;</font>
	<font color="#0000ff">padding-top: </font><font color="#000000">25px;</font>
	<font color="#0000ff">text-align: </font><font color="#ff0000">center</font><font color="#000000">;</font>
<font color="#000000">}</font>
</font></pre>
</div>
<p>我们将#footer层的background-image属性设置为footer.png；向左浮动；通过no-repeat保证背景图的不重复。#footer宽度高度大小和footer.png相</p>
<p>等。然后在顶部通过margin给出一定空间。</p>
<p>完成！ </p>
<p>我们做完了！谢谢阅读本教程，我很期待大家的评论和问题！如果大家做的不错，最终效果应该像这样：</p>
<p>（点击图片查看<a href="http://sixrevisions.com/demo/minimal_modern_layout/index.html">在线demo</a>）</p>
<p><a href="http://sixrevisions.com/demo/minimal_modern_layout/index.html"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image041[1]" border="0" alt="clip_image041[1]" src="http://blog.acmind.com/wp-content/uploads/2009/12/clip_image0411.jpg" width="554" height="408" /></a></p>
<p>下载<a href="http://blog.acmind.com/wp-content/uploads/myhuge/minimal-modern-portfolio-psd_demo.rar" target="_blank">相关文件</a></p>
<p>&#160;</p>
<p>摘自：<a title="http://techguru.cn/design-a-minimal-and-modern-portfolio-layout-in-photoshop" href="http://techguru.cn/design-a-minimal-and-modern-portfolio-layout-in-photoshop">http://techguru.cn/design-a-minimal-and-modern-portfolio-layout-in-photoshop</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/1686/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>值得关注的原型设计软件——Balsamiq Mockups</title>
		<link>http://blog.acmind.com/archives/1628</link>
		<comments>http://blog.acmind.com/archives/1628#comments</comments>
		<pubDate>Wed, 09 Dec 2009 09:41:51 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[原型]]></category>
		<category><![CDATA[产品]]></category>
		<category><![CDATA[balsamiq]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[mockups]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/archives/1628</guid>
		<description><![CDATA[作为一个网站设计人员，最难的一般存在于二个阶段：

针对用户——需求沟通及雏形展示的迭代过程； 
针对自己——雏形及UI设计的起始过程。 

这也是最为直接、直观、起始并终极的二个阶段。
这款名为Balsamiq Mockups的产品原型设计软件可以在很大程度上帮助你顺利解决这些问题。
经试用，Balsamiq Mockups有如下优点：

完全手绘风格：对于一名程序设计员，创意决定成败，这款软件的全手绘风格界面下，应该会点燃你的一丝创意灵感了吧！ 
黑白配色主体：花花绿绿的成品固然是最终，但在设计阶段却并不可取。一种简洁的配色可以让你更加关注于方案的主体，不至于杂乱无章而无从下手。 
控件资源丰富：基本上常用的控件类型都涵盖其中，并且软件本身也伴随着升级不是？！放心，够你用的。 
其他方面：包括操作便利性、中文支持、导出格式、平台、版本等，看图和看网站介绍就够了，不多说了。 

直接上些漂亮的截图：
 
 
 
 
 
 
 
怎么样，很独特吧，有兴趣的快去Balsamiq Mockups 官网试用一下，包括在线版本。
尽管国内用户对于国外软件的支付很不适应，但Balsamiq也为用户提供了免费获得注册码的机会，这是一个非常聪明的做法，毕竟已经不是“酒香不怕巷子深”的时代了，网络、网民的宣传力量是无穷的，包括这种营销策略，很多老守田园的经营者们也值得借鉴与学习一下。
写完本文，博主也尝试去申请一个注册码，期待Balsamiq的诚信与效率。申请成功与否我会通报给大家，但绝不会公布注册码，请大家不要跟帖索取，尊重与诚信都要求我们珍惜与捍卫。
申请状态反馈：
写博后开始申请，发邮件时间2009年12月9日18:04，收到邮件时间2009年12月10日09:26，不到16个小时，可以说Balsamiq反应很迅速，企业反应与执行力值得称道和学习。注册完毕，一切OK。
再次规劝想使用的朋友自己去申请，顺便复习一下英语也好。
]]></description>
			<content:encoded><![CDATA[<p>作为一个网站设计人员，最难的一般存在于二个阶段：</p>
<ol>
<li>针对用户——需求沟通及雏形展示的迭代过程； </li>
<li>针对自己——雏形及UI设计的起始过程。 </li>
</ol>
<p>这也是最为直接、直观、起始并终极的二个阶段。</p>
<p>这款名为<a href="http://www.balsamiq.com" target="_blank">Balsamiq Mockups</a>的产品原型设计软件可以在很大程度上帮助你顺利解决这些问题。</p>
<p>经试用，<a href="http://www.balsamiq.com" target="_blank">Balsamiq Mockups</a>有如下优点：</p>
<ol>
<li>完全手绘风格：对于一名程序设计员，创意决定成败，这款软件的全手绘风格界面下，应该会点燃你的一丝创意灵感了吧！ </li>
<li>黑白配色主体：花花绿绿的成品固然是最终，但在设计阶段却并不可取。一种简洁的配色可以让你更加关注于方案的主体，不至于杂乱无章而无从下手。 </li>
<li>控件资源丰富：基本上常用的控件类型都涵盖其中，并且软件本身也伴随着升级不是？！放心，够你用的。 </li>
<li>其他方面：包括操作便利性、中文支持、导出格式、平台、版本等，看图和看网站介绍就够了，不多说了。 </li>
</ol>
<p>直接上些漂亮的截图：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/wiki.gif" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="wiki" border="0" alt="wiki" src="http://blog.acmind.com/wp-content/uploads/2009/12/wiki_thumb.gif" width="604" height="479" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/bahoomaps.gif" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bahoomaps" border="0" alt="bahoomaps" src="http://blog.acmind.com/wp-content/uploads/2009/12/bahoomaps_thumb.gif" width="604" height="462" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/boogle.gif" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="boogle" border="0" alt="boogle" src="http://blog.acmind.com/wp-content/uploads/2009/12/boogle_thumb.gif" width="604" height="395" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/iPhoneExamples.png" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iPhoneExamples" border="0" alt="iPhoneExamples" src="http://blog.acmind.com/wp-content/uploads/2009/12/iPhoneExamples_thumb.png" width="604" height="362" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/mytube.gif" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mytube" border="0" alt="mytube" src="http://blog.acmind.com/wp-content/uploads/2009/12/mytube_thumb.gif" width="604" height="539" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/bownce.gif" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bownce" border="0" alt="bownce" src="http://blog.acmind.com/wp-content/uploads/2009/12/bownce_thumb.gif" width="333" height="484" /></a> </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/12/2009101600181113c32.png" class="highslide-image" onclick="return hs.expand(this);"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2009101600181113c32" border="0" alt="2009101600181113c32" src="http://blog.acmind.com/wp-content/uploads/2009/12/2009101600181113c32_thumb.png" width="604" height="322" /></a> </p>
<p>怎么样，很独特吧，有兴趣的快去<a href="http://www.balsamiq.com" target="_blank">Balsamiq Mockups 官网</a>试用一下，包括在线版本。</p>
<p>尽管国内用户对于国外软件的支付很不适应，但Balsamiq也为用户提供了免费获得注册码的机会，这是一个非常聪明的做法，毕竟已经不是“酒香不怕巷子深”的时代了，网络、网民的宣传力量是无穷的，包括这种营销策略，很多老守田园的经营者们也值得借鉴与学习一下。</p>
<p>写完本文，博主也尝试去申请一个注册码，期待Balsamiq的诚信与效率。申请成功与否我会通报给大家，但绝不会公布注册码，请大家不要跟帖索取，尊重与诚信都要求我们珍惜与捍卫。</p>
<p><strong><font color="#ffffff">申请状态反馈：</font></strong></p>
<p><strong><font color="#ffffff">写博后开始申请，发邮件时间2009年12月9日18:04，收到邮件时间2009年12月10日09:26，不到16个小时，可以说Balsamiq反应很迅速，企业反应与执行力值得称道和学习。注册完毕，一切OK。</font></strong></p>
<p><strong><font color="#ffffff">再次规劝想使用的朋友自己去申请，顺便复习一下英语也好。</font></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/1628/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在现代网页设计中的模态窗口</title>
		<link>http://blog.acmind.com/archives/1062</link>
		<comments>http://blog.acmind.com/archives/1062#comments</comments>
		<pubDate>Wed, 03 Jun 2009 00:34:15 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[现代]]></category>
		<category><![CDATA[窗口]]></category>
		<category><![CDATA[网页]]></category>
		<category><![CDATA[模态]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=1062</guid>
		<description><![CDATA[网页设计本质上讲就是把信息组织成一种可读，实用，功能性的并且可以方便的格式。良好的内容组织是至关重要的，当你在建立一个网站的时候你需要一个强大的布局。 您可以使用众多的界面元素和结构去组织内容，如jQuery内容滑动器（slider）和模态窗口（modal windows。 从根本上说，就是窗口浮动在网页上。
模态窗口有许多优点。 例如，当一个模态窗口包含一个较小的元素时，用户并不需要加载一个完成的全新新页面就可以访问它。（达到同样效果的另一种方式来是使用基于AJAX的标签） 。 通过模态窗口，您提高网站的可用性。一次又一次的加载网页是会令大多数用户感到烦扰，因此避免这种状况绝对是一件好事。模态窗口也可以为您以节省空间通过避免使用不需要出现在主页面的大元素。 例如，您只需提供一个链接，缩略图或某种按钮， 而不是把完整的视频的放在网页上。
在这篇文章里面， 我们将了解建立多态窗口的最佳做法和趋势。我们也会提供许多良好的模态窗口的例子和一些脚本来帮助您开始建设他们。
你可以对下面的文章也感兴趣：

30 Scripts For Galleries, Slideshows and Lightboxes&#160; 
How To Use Help Elements To Improve Your Designs 
8 Layout Solutions To Improve Your Designs 
Designing Drop-Down-Menus: Examples and Best Practices 
Breadcrumbs in Web Design 

When to Use Modal Windows 何时使用模态的Windows
模态窗口是一个很好的结构元素，但是他们并不一定适合所有的内容或媒体类型。这里有几个元素素，您应该考虑使用模态窗口。
Lightbox for Images/Videos&#160; 为了图片/视频的lightbox 
最明显的使用模态窗口的是lightbox，用一种干净和实用的方式来展示图片和视频。 使用lightbox展示图片，用户不需要只是为了一个单一的图片或视频而加载新的页面。模态窗口也在内容布局中节省了空间，使您只显示图片或视频的缩略图，点击缩略图，它的模态窗口打开。 使用缩略图代替整个元素，你需要少得多的空间而且布局看起来更有组织。
此外，你通常会模糊或渐暗模态窗口后面的的背景，把焦点放在图片或视频本身，从而创造一个良好的环境使访问者可以查看媒体。 对褪色，模糊模态窗口的背景的细节，看下面给出的样式实例。
当使用了lightbox来实现一个图像画廊，一定要确定链接每个图像到相同的lightbox，提供“下一个”和“上一个”的按钮，使用户可以方便的浏览的一组图片。用户可以不关闭并重新打开模态窗口，以查看画廊中的每一幅画。
Contact [...]]]></description>
			<content:encoded><![CDATA[<p>网页设计本质上讲就是把信息组织成一种可读，实用，功能性的并且可以方便的格式。良好的内容组织是至关重要的，当你在建立一个网站的时候你需要一个强大的布局。 您可以使用众多的界面元素和结构去组织内容，如jQuery内容滑动器（slider）和<b>模态窗口</b>（modal windows。 从根本上说，就是窗口浮动在网页上。</p>
<p>模态窗口有许多优点。 例如，当一个模态窗口包含一个较小的元素时，用户并不需要加载一个完成的全新新页面就可以访问它。（达到同样效果的另一种方式来是使用基于AJAX的标签） 。 通过模态窗口，您提高网站的可用性。一次又一次的加载网页是会令大多数用户感到烦扰，因此避免这种状况绝对是一件好事。模态窗口也可以为您以节省空间通过避免使用不需要出现在主页面的大元素。 例如，您只需提供一个链接，缩略图或某种按钮， 而不是把完整的视频的放在网页上。</p>
<p>在这篇文章里面， 我们将了解<b>建立多态窗口的最佳做法和趋势</b>。我们也会提供许多良好的模态窗口的例子和一些脚本来帮助您开始建设他们。</p>
<p>你可以对下面的文章也感兴趣：</p>
<ul>
<li><a href="http://www.smashingmagazine.com/2007/05/18/30-best-solutions-for-image-galleries-slideshows-lightboxes/">30 Scripts For Galleries, Slideshows and Lightboxes&#160; </a></li>
<li><a href="http://www.smashingmagazine.com/2009/04/23/help-elements-design-showcase/">How To Use Help Elements To Improve Your Designs</a> </li>
<li><a href="http://www.smashingmagazine.com/2009/05/19/8-layout-solutions-to-improve-your-designs/">8 Layout Solutions To Improve Your Designs</a> </li>
<li><a href="http://www.smashingmagazine.com/2009/03/24/designing-drop-down-menus-examples-and-best-practices/">Designing Drop-Down-Menus: Examples and Best Practices</a> </li>
<li><a href="http://www.smashingmagazine.com/2009/03/17/breadcrumbs-in-web-design-examples-and-best-practices-2/">Breadcrumbs in Web Design</a> </li>
</ul>
<p><b>When to Use Modal Windows </b><b>何时使用模态的Windows</b></p>
<p>模态窗口是一个很好的结构元素，但是他们并不一定适合所有的内容或媒体类型。这里有几个元素素，您<i>应该</i>考虑使用模态窗口。</p>
<p><b>Lightbox for Images/Videos&#160; </b><b>为了图片/视频的lightbox </b></p>
<p>最明显的使用模态窗口的是lightbox，用一种干净和实用的方式来展示图片和视频。 使用lightbox展示图片，用户不需要只是为了一个单一的图片或视频而加载新的页面。模态窗口也在内容布局中节省了空间，使您只显示图片或视频的缩略图，点击缩略图，它的模态窗口打开。 使用缩略图代替整个元素，你需要少得多的空间而且布局看起来更有组织。</p>
<p>此外，你通常会模糊或渐暗模态窗口后面的的背景，把焦点放在图片或视频本身，从而创造一个良好的环境使访问者可以查看媒体。 对褪色，模糊模态窗口的背景的细节，看下面给出的样式实例。</p>
<p>当使用了lightbox来实现一个图像画廊，一定要确定链接每个图像到相同的lightbox，提供“下一个”和“上一个”的按钮，使用户可以方便的浏览的一组图片。用户可以不关闭并重新打开模态窗口，以查看画廊中的每一幅画。</p>
<p><b>Contact Forms </b><b>联系表单</b></p>
<p>在模态窗口中的表单是一种常见的联系表单。模态窗口为了这个目的做的很好，是因为您不用为了这个功能建立一个完整的网页。 依据可用性来说，立即可用和容易找到对于联系表单是非常重要的。 使用浮动窗口，联系表单在每个页面是容易访问。联系表单一般很小，所以他们会相当不错组装在这些窗口中。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image00112.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb11.jpg" width="470" border="0" /></a></p>
<p><b>Sign-Up/Log-In Forms </b><b>注册/登录 表单</b></p>
<p>你可以用一个模态窗口来代替一个单独的页面让用户登录和注册。这种方法可以让表单在每一个页面可用并且容易访问。 你可以包含一个登录创库在页面的标题的地方、</p>
<p><b>Alerts/Notices </b><b>警告/提示</b></p>
<p>当您想提醒用户一个关键功能或行动将发生，最好的方法是通过一个模态窗口。当一个模态窗口在一个页面打开，用户不能忽视它，因为它将直接显示在屏幕中央，那里真是用户关注的地方。 此外，其余内容将褪色并禁用，因此用户什么都不能做，直到他们看到模太窗口然后单击关闭。在下面的截图中，您可以看到一个模态窗口被用来提醒用户将进行下载。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image00211.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb10.jpg" width="470" border="0" /></a></p>
<p>请注意，你不应该使用模态窗口作为弹出的代替办法。请确定只有当当前会话中有很重要的事情发生的时候警示访问者。 在许多情况下，一个简单的褪色块布局回比一个模态窗口好得多。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image00212.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002[1]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image002[1]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0021-thumb.jpg" width="470" border="0" /></a></p>
<p><b>Help Elements/Tips&#160; </b><b>帮助元素/贴士</b></p>
<p>额外的帮助元素和提示内容是没有必要对于网站的功能和导航，所以你不想让他们占据空间并且放在主要内容里面。并不是所有的用户想要使用他们。 然而，他们需要放在谁想要使用它们就能轻易找的位置，因此使用模态窗口似乎可以合理地显示帮助内容和技巧。用户可以方便地打开和关闭它们，而且不需要把它们当作页面的内容和功能。</p>
<p>以下是一个很好的帮助元素在浮动窗口的例子。这个窗口远小于其他的我们已经看到，但它包含着类似的功能。例如，通过一个半透明的边界使视觉上分离并且有一个 “退出” （关闭）按钮在右上角。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0039.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image003-thumb9.jpg" width="470" border="0" /></a></p>
<p><b>Search Boxes </b><b>搜索框</b></p>
<p>这是一个不太常见的做法，但你会偶尔会看到模态窗口中包含搜索框。先进的搜索功能会占用了不少的空间，因此，您可以把它在一个浮动窗口以防止大搜索框占据大量空间。你可以在下面的截图看到这在实例中。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0044.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image004-thumb4.jpg" width="470" border="0" /></a></p>
<p><b>Embedding PDFs </b><b>嵌入PDFs</b></p>
<p>有时候你需要嵌入文件在你的网站上，如PDF格式的简历。 你可以使用模态窗口， 代替用户可以点击下载PDF到他们的电脑或其他的嵌入的PDF的方式，达到同样的目的。 以这种方式， PDF格式可以很容易地浏览，而不会影响用户体验的。通过模糊的背景，你也把重点放在你的PDF格式，提高了可用性。</p>
<p><b>Usability and Styling Practices </b><b>可用性和样式实例</b></p>
<p>下面列出的可用性和样式的做法和趋势，在你创建模态窗口的时候记得这些。</p>
<p><b>Blur and Fade Out Background of Window </b><b>模糊和渐暗窗口背景</b></p>
<p>对于可用性和样式最重要的是淡出浮动窗口后面的页面。你将会看到这样的实例几乎无处不在，最常于lightboxes用来显示媒体文件。 通过淡出网页，您将让用户所有的注意力集中在浮动窗口上。如果背景不淡出，用户甚至可能不会马上意识到窗口是“漂浮”的网页上面而不是部分的主要布局。一个窗口物理地浮在网页上的样子使增加了网站的维度。它看起来更整洁并且消除混乱。 总体而言，淡出提供窗口和页面所需的分隔度，增强了功能性和实用性。</p>
<p>确保淡出的程度，但留下一个轻微的不透明，使用户知道该网页并没有消失。例如，一个黑色淡出加上75 ％左右不透明效果就非常好。但是，对于网站的一个白色的背景，褪色的页面用白色并且一点点不透明，再加上使用落下式阴影。</p>
<p>有时你会看到一个模态窗口，并不淡出整个页面，而是具有很强的阴影来增加层次感。这就造成同样的效果，并提供了类似的视觉分离。你可以在下面的截图看到使用这种技术完美使用。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0056.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005-thumb6.jpg" width="470" border="0" /></a></p>
<p><b>Exit Strategy: Button, Click Outside Window, Escape Key </b><b>退出策略：按钮，点击窗口外， 退出</b></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0066.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb6.jpg" width="470" border="0" /></a></p>
<p>为了提高功能性，始终提供一个退出按钮在窗口上面的角落里。标准做法是用一个简单的圆形带有“ X ”图形的按钮，这样做对于用户来说非常整洁并且相当明显。 在下面的lightbox中，你可以清楚地看到退出按钮。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image00611.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006[1]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image006[1]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0061-thumb.jpg" width="470" border="0" /></a></p>
<p>其他允许用户关闭模态窗口的方式是让他们点击窗口后面的页面，点击模态窗口中的显示元素或者使用Esc键。</p>
<p><b>Disable All Other Page Functions </b><b>禁用页面上其他所有功能</b></p>
<p>禁用窗口背后页面里的所有功能。 当模态窗口打开的时候，它应该是去焦点，并且没有按钮应该能够被点击。 浮动窗口应该跟其余内容分离开来，所以禁用页面能创建一个更好的分离。 保持页面滚动功能是一个好主意，不过，如果需要的话，用户至少应该有一些自由返回到页面。</p>
<p><b></b></p>
<p><b>Using Transition Effects </b><b>使用过渡效果</b></p>
<p>过渡效果的小细节，如果用正确的方式做看起来会很不错。一个很好的过渡效果是模态窗口的渐进渐出。但是，不要做的太过让点用户觉得烦。 保持渐变的简短但要稍微能注意到。</p>
<p>在下面的例子中，灰色的模糊背景渐进渐出，创造了非常好的效果。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0075.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image007" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image007" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image007-thumb5.jpg" width="470" border="0" /></a></p>
<p><b>Scripts, Tools and Plug-Ins For Lightboxes and Modal Windows</b></p>
<p><b>Lightboxes and Modal Window </b><b>的脚本， 工具 和插件</b></p>
<p>当你开始集成模态窗口的进程的时候，你可能需要一些东西来构建它。这里有11个出色的基于模态窗口的jQuery脚本和插件。 每个都有自己独特的特点和功能，所以查看他们所有的。</p>
<p><a href="http://fancy.klade.lv/home">Fancy Lightbo</a></p>
<p>这是一个比较好的Lightbox jQuery插件。 它很时尚并且非常具有功能性。它有整洁的风格，标记功能和网页很好的整合，并与AJAX结合。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0084.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008-thumb4.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.lokeshdhakar.com/projects/lightbox2/">Lightbox 2</a></p>
<p>这是原版的lightbox的脚本， 仅仅只是为了图片而创建的。 它简单的风格而且支持一组图片的浏览。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0095.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image009" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image009" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image009-thumb5.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.dynamicdrive.com/dynamicindex4/facebox/index.htm">Facebook Image/Content Viewer</a></p>
<p>这有一个基于facebook浮动窗口很棒的脚本。 它支持图片和内容，并且用跟facebook非常著名的窗口相似的风格</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0104.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image010" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image010" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image010-thumb4.jpg" width="470" border="0" /></a></p>
<p><a href="http://woork.blogspot.com/2008/01/lightbox-using-mootools-and-pathfusion.html">Woork Mootools Lightbox</a></p>
<p>这是一个来自woork的很棒的教程，他指导你怎么创建一个简单的lightbox的脚本。这个脚本包含了支持一组图片和标签的特性。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0113.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image011" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image011" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image011-thumb3.jpg" width="470" border="0" /></a></p>
<p><a href="http://nyromodal.nyrodev.com/">nyroModal jQuery Plug-In</a></p>
<p>这个简单的窗口插件支持所有形式的媒体文件，包括ajax。 他也有很好的显示/隐藏的效果。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0124.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image012" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image012" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image012-thumb4.jpg" width="470" border="0" /></a></p>
<p><a href="http://nyromodal.nyrodev.com/">jQuery Alert Dialog</a></p>
<p>这个jQuery 插件是用来警告和对话的窗口。 它拥有众多的功能并且可以很好的传递信息给用户。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0135.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image013" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image013" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image013-thumb5.jpg" width="470" border="0" /></a></p>
<p><a href="http://stickmanlabs.com/lightwindow/">LightWindow</a></p>
<p>这里是一个有很多特性的综合性的lightbox的脚本， 例如嵌入pdf， 支持多个图片画廊， SWF执行等等。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0143.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image014" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image014" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image014-thumb3.jpg" width="470" border="0" /></a></p>
<p><a href="http://prototype-window.xilinus.com/">Prototype Window Class</a></p>
<p>另外一个深入系列的的脚本， 有各种不同的功能，例如对话框，登录窗口，ajax内容窗口，图片lightboxes 等。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0152.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image015" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image015" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image015-thumb2.jpg" width="470" border="0" /></a></p>
<p><a href="http://prototype-window.xilinus.com/">ThickBox 3.1</a></p>
<p>一个很流行的lightbox工具， Thickbox。 他支持图片，在线内容和AJAX。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0162.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image016" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image016" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image016-thumb2.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.no-margin-for-errors.com/projects/prettyPhoto-jquery-lightbox-clone/">prettyPhoto</a></p>
<p>这是一个时尚的图片lightbox， 很好的支持图片集。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0172.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image017" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image017" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image017-thumb2.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.flowplayer.org/tools/expose.html">jQuery Expose</a></p>
<p>这个是有一点不同于模态窗口的脚本。 他展示选中的HTML元素。 当你单击一个特定的元素， 页面剩下的元素会渐出。 这是一个很棒的模态窗口的替代品。 它也支持页面的渐出而是注意力集中在选中元素上。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0182.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image018" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image018" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image018-thumb2.jpg" width="470" border="0" /></a></p>
<p><b>Showcase of Modal Windows&#160; </b><b>模态窗口的展示</b></p>
<p><a href="http://listen.grooveshark.com/">Grooveshark</a>     <br />Grooveshark 是一个结构量和风格良好的应用。 模态窗口也无一例外，一个模态窗口， 被用在用户的注册登录的模块。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0193.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image019" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image019" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image019-thumb3.jpg" width="470" border="0" /></a></p>
<p><a href="http://digg.com/">Digg</a>     <br />Digg 是另外一个使用浮动窗口来注册和登录的用户生成的网站。登录的链接放在页面的标题处。注意一个半透明的边界被用来代替渐出和投影。这个边界提供了更多的视觉隔离感。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0201.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image020" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image020" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image020-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.apple.com/trailers/universal/fastandfurious/">Apple Movie Trailer</a></p>
<p>Apple 在很多地方使用模态窗口。 你可以看到一个窗口备用来观看电影预告片。 这个窗口建立的很好使得大的视屏文件不会影响到窗口的表现。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0214.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image021" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image021" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image021-thumb3.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.apple.com/imac/design.html">Apple iMac: Design Gallery</a></p>
<p>另外一个Apple网站的模态窗口的例子。 它有非常简单干净但是强烈的投影来实现视觉隔离。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image022.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image022" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image022" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image022-thumb.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.taoeffect.com/espionage/">Espionage</a></p>
<p>另外一个一个图片的lightbox的例子。 在这个例子中， 图片扩展到窗口的边缘， 并且推出按钮直接覆盖在图片上。 在这里 没有边界是必要的因为强烈的色彩对比</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0233.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image023" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image023" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image023-thumb3.jpg" width="470" border="0" /></a></p>
<p><a href="http://marketcircle.com/daylite/index.html">Daylite 3</a></p>
<p>一个很好备件渐出的窗口的例子。 多个页面内容被集成在一个单一的模态窗口中。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0241.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image024" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image024" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image024-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.behance.net/Gallery/Positive-Hype/55599">Behance</a></p>
<p>另外一个联系表单，这里有一个熟悉的“发送给朋友”的元素， 这个被警察放在模态窗口中。 因为网页有很深的背景色，一个淡的半透明的边界被用来做分隔。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0251.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image025" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image025" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image025-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.facebook.com/">Facebook</a></p>
<p>Facebook 有非常容易辨识的模态窗口。 这个包含信息链接到一个帮助元素在注册表单里。 并且， 一个很强的半透明边界。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0261.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image026" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image026" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image026-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.kissmetrics.com/">KISSmetrics</a></p>
<p>这是一个很棒的在模态窗口登录表单。 这个表单有良好的风格并且包含了帮助元素来提高可用性：只是因为登录窗口并不意味着你可以忽视可用性。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0272.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image027" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image027" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image027-thumb2.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.nasibriyanilounge.com/">Nasi Briyani Lounge</a></p>
<p>另外一个登录表单。 这个有一点不同。他是用一个简单的弹出窗口代替一个完整的模态窗口。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0281.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image028" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image028" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image028-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.pixelightcreative.com/">Pixelight Creative</a></p>
<p>一个自由职业者网站里的lightbox。 当你单击每一个工作档案，一个大一点的图被打开在lightbox</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0291.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image029" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image029" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image029-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://supermegaultragroovy.com/products/Capo/">Capo</a></p>
<p>另外一个时尚的窗口， 这是一个软件漫游的视频，这是一个普通的例子。 它和包含了一个简单的边界和投影。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0301.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image030" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image030" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image030-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://sourcen.accept-ideas.com/">Accept-Idea</a></p>
<p>另外一个浮动窗口附属于搜索窗口。 当你输入一个查询，结果显示在模态窗口里。这个窗口有基本的功能， 包括一个推出按钮和边界。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0311.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image031" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image031" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image031-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://typedeskref.com/">The Typographic Desk Reference</a></p>
<p>一个很简单的模态窗口，用强阴影来增加深度。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0321.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image032" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image032" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image032-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.evernote.com/">Evernote Web Application</a></p>
<p>这个显示一个警告当你打开一个Everbote‘s 网页应用。 注意页面是怎么渐出的， 它是的所有的注意力集中在窗口内容中。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image033.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image033" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image033" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image033-thumb.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.geticeberg.com/">Iceberg</a></p>
<p>另外一个在浮动窗口的登录表单。 着一个没有渐出和阴影而用一个边界来分隔。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0341.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image034" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image034" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image034-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://corp.viewzi.com/">Viewzi Corporate</a></p>
<p>一个漂亮风格的模态窗口。 注意干净的大腿处按钮在上角，大的填充和半透明背景。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image035.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image035" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image035" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image035-thumb.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.mailchimp.com/">Mail Chimp</a></p>
<p>这个lightbox有半透明边界和页面的渐出。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0361.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image036" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image036" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image036-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.theresumator.com/home/tour/">The Resumator</a></p>
<p>注意这个怎么强烈的图片背景跟页面背景的对比。一个标签被用在这里而不是属于窗口， 创捷了很好的外观。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0371.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image037" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image037" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image037-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.checkoutapp.com/">Checkout App</a></p>
<p>一个风格很不错的图片模态窗口，这个窗口用一个投影来增加深度并且一个实心的边界提供给多的分隔感。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0381.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image038" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image038" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image038-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.pixelmator.com/">Pixelmator</a></p>
<p>另外一个很好的下载警告例子。 这个警告当下载开始的时候离开弹出，注意非常棒的样式， 就像窗口的轻微不透明。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0391.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image039" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image039" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image039-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.getballpark.com/">Ballpark</a></p>
<p>这里有一个视频的模态窗口， 通常用在公司和软件的网站里。你经常看到QuickTime 和 SW在模态窗口里，但是这个是嵌入一个Vimeo的视频。 并且有非常好的渐进和渐出效果，</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image040.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image040" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image040" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image040-thumb.jpg" width="470" border="0" /></a></p>
<p><a href="http://www.backpackit.com/?source=37signals+home#/">Backpack</a></p>
<p>这是另外一个用来放视频的窗口，再次注意页面是怎么渐出更淡的而不是更深的颜色。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0411.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image041" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image041" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image041-thumb1.jpg" width="470" border="0" /></a></p>
<p><a href="http://blog.guifx.com/category/downloads/">Guifx</a>     <br />An image lightbox for a portfolio, always a great idea if you want to include larger images to show details of your work.</p>
<p>一个为了作品档案的图片lightbox， 如果你想包括一个大一点的图片显示你的工作详细一点的信息的话， 这是一个很好的主意。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0421.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image042" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="370" alt="clip_image042" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image042-thumb1.jpg" width="470" border="0" /></a></p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/orangedan/43521" href="http://www.yeeyan.com/articles/view/orangedan/43521">http://www.yeeyan.com/articles/view/orangedan/43521</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/1062/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>互联网应用表单设计</title>
		<link>http://blog.acmind.com/archives/901</link>
		<comments>http://blog.acmind.com/archives/901#comments</comments>
		<pubDate>Tue, 02 Jun 2009 03:44:00 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[应用]]></category>
		<category><![CDATA[表单]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=901</guid>
		<description><![CDATA[“表单元素应按照逻辑组织，使得用户思维对表单能按相关字段组成的块进行处理。”——HTML: 定义指南。
大部分网络应用都要使用大量的表单以进行数据录入和配置。但是不是所有的网络应用的表单都是统一的。表单字段的不同对齐方式，不同的标签，动作调用以及周围的视觉元素都能对用户的行为的不同方面起到正面或负面的作用。
表单布局
如果填写表单的时间需要尽可能短。而且用户对需要填写的数据是非常熟悉的（比如，在订单流程中输入姓名、地址和支付账户信信息），标签和输入框最好垂直对齐。每个标签和 对应的数据框排列在垂直方向上临近的位置，所有的输入框和标签垂直对齐能够节省视线移动的过程和时间，用户只需要在垂直向下一个方向上移动视线。

在这种布局方式中，建议对标签使用加粗字体。可以强调视觉重量感，在整体布局中突出标签。如果不加粗的话，标签会在视觉吸引力上和输入区域相混。
如果表单取得数据并不为用户所熟悉，又或者不好按照过程分组（比如地址的不同部分），左对齐比较容易看出表单需要的信息。用户可以上下浏览标签就可以了解需要填写的 数据而不会受到输入框的影响。但是，标签和输入框之间的距离通常会被最长的标签撑开，填写表单的时间可能会受到影响。用户需要在列于列之间跳跃寻找标签和输入框之间合适的组合。

还有一种选择就是右对齐标签，这样标签和输入框的对应组合就比较明了了。但是，左侧的参差不齐影响到快速了解所需信息的效率。在西方，习惯从左到右阅读，眼睛更习惯左边有轮廓鲜明的边线。

使用视觉元素
由于“左对齐水平排列标签”的优点（容易纵览标签信息以及节省垂直空间），则有可能会尝试去削弱其主要缺点：表单输入框和对应的标签的分散问题。
其中一种办法就是为标签曾加背景色和横隔线为特征：不同的背景色将表单分成垂直标签列和输入框列；横隔线将每个标签和对应的输入框划分成一组。虽然这些方法可能看起来是可取的，但也的确制造一些问题。
通过格式塔（人们的先天视觉感知规则）可知，另外还有15个视觉元素也被一同加到布局中：中线、每个有背景的方块，每个水平线。这些元素开始分散用户注意力从而使得将焦点放到重要的元素上——标签和输入框——增加了难度。Edward Tufte曾经指出：“信息包含着有重要影响的差异”（信息由差异性构成&#8211;译者）。换句话说，所有不能帮助布局的视觉元素都将会伤害到布局。这一点在你需要扫视左列标签时可以表现出来。视线一再受到水平线、边框和背景构成的方块的影响而停顿。

当然也不是说表单布局中绝对不能使用背景颜色和分隔线。当有必要向用户指出组与组之间的关系的时候，细分隔线或者浅背景色可以再视觉上将有关联的数据组合起来。这两个元素（分割线和背景颜色）都可以有效地帮助吸引用户对表单基本动作的注意力。

基本动作和次级动作
表单的基本动作（通常是“确认”或者“保存”）需要更明显的视觉感受有别于其他的表单元素（在上面的例子中鲜明的颜色、加粗字体、背景颜色等等）而且需要与输入框垂直对齐。这能指引用户完成表单。
如果表单含有多个动作，例如“继续”和“返回”，则减弱次级动作的视觉重量感则比较明智。这可以最大程度减少潜在的错误，进一步指导用户完成表单。

尽管有这些指南可以帮助你更好的设计表单位置，但是布局的组合，视觉元素以及所需的内容，仍然需要通过用户测试和数据分析进行验证（完成率、出错等等）。
&#160;
摘自：http://www.yeeyan.com/articles/view/danqing/42079
]]></description>
			<content:encoded><![CDATA[<p>“表单元素应按照逻辑组织，使得用户思维对表单能按相关字段组成的块进行处理。”——HTML: 定义指南。</p>
<p>大部分网络应用都要使用大量的表单以进行数据录入和配置。但是不是所有的网络应用的表单都是统一的。表单字段的不同对齐方式，不同的标签，动作调用以及周围的视觉元素都能对用户的行为的不同方面起到正面或负面的作用。</p>
<p><strong>表单</strong><strong>布局</strong></p>
<p>如果填写表单的时间需要尽可能短。而且用户对需要填写的数据是非常熟悉的（比如，在订单流程中输入姓名、地址和支付账户信信息），标签和输入框最好垂直对齐。每个标签和 对应的数据框排列在垂直方向上临近的位置，所有的输入框和标签垂直对齐能够节省视线移动的过程和时间，用户只需要在垂直向下一个方向上移动视线。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0014.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="529" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb4.gif" width="553" border="0" /></a></p>
<p>在这种布局方式中，建议对标签使用加粗字体。可以强调视觉重量感，在整体布局中突出标签。如果不加粗的话，标签会在视觉吸引力上和输入区域相混。</p>
<p>如果表单取得数据并不为用户所熟悉，又或者不好按照过程分组（比如地址的不同部分），左对齐比较容易看出表单需要的信息。用户可以上下浏览标签就可以了解需要填写的 数据而不会受到输入框的影响。但是，标签和输入框之间的距离通常会被最长的标签撑开，填写表单的时间可能会受到影响。用户需要在列于列之间跳跃寻找标签和输入框之间合适的组合。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0022.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="426" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb2.gif" width="553" border="0" /></a></p>
<p>还有一种选择就是右对齐标签，这样标签和输入框的对应组合就比较明了了。但是，左侧的参差不齐影响到快速了解所需信息的效率。在西方，习惯从左到右阅读，眼睛更习惯左边有轮廓鲜明的边线。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0032.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="426" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image003-thumb2.gif" width="553" border="0" /></a></p>
<p><strong>使用视觉元素</strong></p>
<p>由于“左对齐水平排列标签”的优点（容易纵览标签信息以及节省垂直空间），则有可能会尝试去削弱其主要缺点：表单输入框和对应的标签的分散问题。</p>
<p>其中<a href="http://synapticburn.com/comments.php?id=39_0_1_0">一种办法</a>就是为标签曾加背景色和横隔线为特征：不同的背景色将表单分成垂直标签列和输入框列；横隔线将每个标签和对应的输入框划分成一组。虽然这些方法可能看起来是可取的，但也的确制造一些问题。</p>
<p>通过格式塔（人们的先天视觉感知规则）可知，另外还有15个视觉元素也被一同加到布局中：中线、每个有背景的方块，每个水平线。这些元素开始分散用户注意力从而使得将焦点放到重要的元素上——标签和输入框——增加了难度。<a href="http://www.cpcug.org/user/houser/websiteman/style/chartjunk.html">Edward Tufte</a>曾经指出：“信息包含着有重要影响的差异”（信息由差异性构成&#8211;译者）。换句话说，所有不能帮助布局的视觉元素都将会伤害到布局。这一点在你需要扫视左列标签时可以表现出来。视线一再受到水平线、边框和背景构成的方块的影响而停顿。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0042.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="520" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image004-thumb2.gif" width="553" border="0" /></a></p>
<p>当然也不是说表单布局中绝对不能使用背景颜色和分隔线。当有必要向用户指出组与组之间的关系的时候，细分隔线或者浅背景色可以再视觉上将有关联的数据组合起来。这两个元素（分割线和背景颜色）都可以有效地帮助吸引用户对表单基本动作的注意力。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0051.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="356" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005-thumb1.gif" width="553" border="0" /></a></p>
<p><strong>基本动作和次级动作</strong></p>
<p>表单的基本动作（通常是“确认”或者“保存”）需要更明显的视觉感受有别于其他的表单元素（在上面的例子中鲜明的颜色、加粗字体、背景颜色等等）而且需要与输入框垂直对齐。这能指引用户完成表单。</p>
<p>如果表单含有多个动作，例如“继续”和“返回”，则减弱次级动作的视觉重量感则比较明智。这可以最大程度减少潜在的错误，进一步指导用户完成表单。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0061.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb1.gif" width="553" border="0" /></a></p>
<p>尽管有这些指南可以帮助你更好的设计表单位置，但是布局的组合，视觉元素以及所需的内容，仍然需要通过用户测试和数据分析进行验证（完成率、出错等等）。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/danqing/42079" href="http://www.yeeyan.com/articles/view/danqing/42079">http://www.yeeyan.com/articles/view/danqing/42079</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/901/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>你需要知道的开发Web应用程序的结构化过程</title>
		<link>http://blog.acmind.com/archives/875</link>
		<comments>http://blog.acmind.com/archives/875#comments</comments>
		<pubDate>Tue, 02 Jun 2009 03:06:37 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[应用]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[结构]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=875</guid>
		<description><![CDATA[开发web应用程序是一件非常辛苦的事情，你需要花大把大把的时间来做无数的事情。假如你不运用有条理的方法，尤其是在复杂的项目中，你会承受忽视项目，不能按时完成，浪费时间一无所获的风险。
这篇文章中，结构化过程的插图可以帮助你运用简化的方法更加节省时间更加有效的建立你的web开发程序。
下载 Woork Papers N1幻灯片 &#124;你需要知道的开发Web应用程序的结构化过程
工序的主要阶段
     一般的web应用程序开发流程分为五个主要的阶段:     1. 明确需求     2. 设计     3. 执行     4. 测试     5. 发行
规划与跟踪监测是一个“跨阶段”的跟随开发发展的过程，定义一个在项目执行期间你需要跟踪监测的项目计划活动名单，并且每项活动需要定义一套行之有效的信息报告来进行跟踪监测，例如：
- 拥有者    - 持续的时间     - 所耗    [...]]]></description>
			<content:encoded><![CDATA[<p>开发web应用程序是一件非常辛苦的事情，你需要花大把大把的时间来做无数的事情。假如你不运用有条理的方法，尤其是在复杂的项目中，你会承受忽视项目，不能按时完成，浪费时间一无所获的风险。</p>
<p>这篇文章中，结构化过程的插图可以帮助你运用简化的方法更加节省时间更加有效的建立你的web开发程序。</p>
<p><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjjj.fpevoq.pbz%2Fqbp%2F10042348%2FGur-Jbbex-Cncref-A1"><b>下载 Woork Papers N1</b><b>幻灯片 |</b><b>你需要知道的开发Web</b><b>应用程序的结构化过程</b></a></p>
<h6>工序的主要阶段</h6>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0012.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="226" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb2.gif" width="207" border="0" /></a>     <br />一般的web应用程序开发流程分为五个主要的阶段:     <br />1. 明确需求     <br />2. 设计     <br />3. 执行     <br />4. 测试     <br />5. 发行</p>
<p><b>规划与跟踪监测</b>是一个“跨阶段”的跟随开发发展的过程，定义一个在项目执行期间你需要跟踪监测的项目计划活动名单，并且每项活动需要定义一套行之有效的信息报告来进行跟踪监测，例如：</p>
<p>- 拥有者    <br />- 持续的时间     <br />- 所耗     <br />- &#8230;     <br />看一看这些前一段我所写的文章，怎样使用Excel或者Google制表软件设计制作项目实施计划：     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F11%2Fcebwrpg-znantrzrag-betnavmr-cebwrpg.ugzy">How to organize a project plan</a> 怎样组织项目规划     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2008%2F02%2Fcebwrpg-znantrzrag-rkpry-tnagg-puneg.ugzy">Excel Gantt chart template</a> Excel图表设计绘制模板     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F11%2Fhfvat-tbbtyr-fcernqfurrgf-gb-vzcyrzrag.ugzy">Implement a project plan and manage activities with Google Spreadsheets</a> 使用google电子表格实施并灵活管理项目规划</p>
<h6>1. 需求定义</h6>
<p>在这第一阶段你必须确定范围和Web应用程序的需求，在你的应用程序中必须做的，主要特点和技术要求：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0021.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb1.gif" width="428" border="0" /></a></p>
<p><strong>范围</strong>     <br />为了确定Web应用程序的范围,足以编制一份明确说明适用功能的详细清单。目前重要的不是“如何”实现他们，而是“什么”需要实现！     <br /><strong>需求</strong>     <br />需求分析需求分析是一个开发过程的关键组成部分。在这一步中你需要估计潜在流量，选择一个服务器端语言（ PHP， ASP， Coldfusion &#8230;),数据库，选择一个托管服务&#8230;<strong>这里需要非常注意</strong>不要高估 /低估预期！准确的平衡的预估时间，成本和目标之间每件事情！</p>
<h6>2. 设计</h6>
<p>在需求定义阶段，你需要明确的规划“设计”你的应用。在这个阶段，可以按照以下步骤：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0031.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="231" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image003-thumb1.gif" width="456" border="0" /></a></p>
<p><strong>设计: 应用图</strong>     <br />应用图包含对应用有意义的和必要的结构信息：页面（用区块表示）和他们之间的主要关联。你的应用图可以像这样：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0041.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="338" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image004-thumb1.gif" width="407" border="0" /></a></p>
<p>通过这种方式，您拥有了有关一些“位置” （页）和“路径” （关系页）的图，您可以非常容易的遵循它，逐页，以执行应用程序的下一阶段。运用这种方式，可以节省大量的时间，并明确什么是你需要执行的。    <br /><strong>设计: 数据库</strong>     <br />Ok,现在到了设计数据库的时候了。一个简单的实现方法是使用实体关系（ER）模型 。一般来说，你可以俺咋好下面的顺序：定义第一个表确定第一个表，而不是属性和关系的表格。您的ER模型将是这样的：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="134" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005-thumb.gif" width="422" border="0" /></a></p>
<p>1:1表示集的关系（在这种情况下，例如1用户只能分派1的任务， 1个用户只生活在一个城市） 。欲了解更多有关这一主题的内容，来看看我的旧文章：    <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F10%2Fcebwrpg-qngnonfr-qrsvar-eryngvbafuvcf.ugzy">Define the entities-relationships model</a> 定义实体关系模型     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F11%2Fpbeerpg-nccebnpu-gb-qrsvar.ugzy">A correct approach to define relationships between database tables</a> 正确对待，以定义数据库表格关系     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2008%2F09%2F10-hfrshy-negvpyrf-nobhg-qngnonfr.ugzy">10 Useful articles about Database design</a> 十篇有用的数据库设计文章     <br /><strong>设计: 页面结构</strong>     <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb.gif" width="246" border="0" /></a>     <br />下一步工作是设计大体的页面结构，用名称命名确定所有的主要部分 (例如 <em>#header</em>, <em>#navbar</em>, #mainContent, <em>#sidebar</em>).     <br /><strong>设计: 服务端语言</strong>     <br />使用面向对象的开发方法进行开发，你可以定义类，函数和所有你所需要的，记住&#8230; 那不是“执行”只是下一阶段实施的“指南”.     <br /><strong>设计: JS 框架</strong>     <br />这一步选择JavaScript 框架(jQuery, Scriptaculous, MooTools&#8230;), 通过确定主要的特点和所需实施的效果（拖放，动画效果&#8230; ）编制简单的关于在一个或多个网页中有关联的每一个具体功能应用图的列表。</p>
<p>次点设计阶段已完成。让我们实施吧！</p>
<h6>3. 实施</h6>
<p>Ok.. 现在是真正的挑战的开始，因为“执行”才是实现应用。您可以划分这一阶段为以下几个步骤:</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image007.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image007" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="270" alt="clip_image007" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image007-thumb.gif" width="445" border="0" /></a></p>
<p><strong>执行: 数据库</strong>     <br />创建一个新数据库，写SQL代码定义表，属性和关系。看看下面的，过去我致力于一些有关此主题的文章的链接，以获取更多信息：     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F10%2Fcebwrpg-qngnonfr-ubj-gb-hfr-cuc-naq-fdy.ugzy">How to use PHP and SQL to create DB tables and relationships</a> 怎样使用PHP创建DB表和关系     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2007%2F10%2Fcebwrpg-qngnonfr-perngr-gnoyr-naq.ugzy">Create tables and relationships with SQL</a> 使用SQL创建表和关系     <br /><strong>执行: HTML</strong>     <br />使用在设计阶段定义的页面结构实施 HTML 代码:</p>
<p>&lt;div id=&quot;header&quot;&gt; &lt;/div&gt;    <br />&lt;div id=&quot;navbar&quot;&gt; &lt;/div&gt;     <br />&lt;div id=&quot;mainContent&quot;&gt; &lt;/div&gt;     <br />&lt;div id=&quot;sidebar&quot;&gt; &lt;/div&gt;     <br />&lt;div id=&quot;footer&quot;&gt; &lt;/div&gt;</p>
<p>这是目前在已经确定的设计阶段需要田间的所有的HTML元素。例如 <b>mainContent</b> 部分包含了所发表的文章的标题，正文本，标签，添加他们:</p>
<p>&lt;div id=&quot;header&quot;&gt; &lt;/div&gt;    <br />&lt;div id=&quot;navbar&quot;&gt; &lt;/div&gt;     <br />&lt;div id=&quot;mainContent&quot;<b>&gt;</b></p>
<p>&lt;h1&gt;&lt;!&#8211; Post title &#8211;&gt;&lt;/h1&gt;    <br />&lt;p&gt;&lt;!&#8211; Text body &#8211;&gt;&lt;/p&gt;     <br />&lt;small&gt;&lt;!&#8211; Post tags &#8211;&gt;&lt;/small&gt;</p>
<p><b>&lt;/div&gt;</b>     <br />&lt;div id=&quot;sidebar&quot;&gt; &lt;/div&gt;     <br />&lt;div id=&quot;footer&quot;&gt; &lt;/div&gt;</p>
<p><strong>实施: <a href="http://www.yeeyan.com/articles/tag/CSS"><em>CSS</em></a></strong>     <br />当主体结构已经准备就绪，开始编写CSS代码添加样式。如果您需要一些如何撰写更好的CSS代码建议，请看看这些文章：     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2008%2F11%2Fpff-pbqvat-frznagvp-nccebnpu-va-anzvat.ugzy">CSS coding: semantic approach in naming convention</a> CSS编码：语义的方法命名惯例     <br /><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjbbex.oybtfcbg.pbz%2F2008%2F11%2Fhfrshy-thvqryvarf-gb-vzcebir-pff-pbqvat.ugzy">Useful guidelines to improve CSS coding and maintainability</a> 有益的改善的CSS编码和可维护性的指南     <br /><strong>实施: 服务器端语言</strong></p>
<p>实施应用类，应用功能,DB互动，查询，以及一切需要服务器端的实现的交互。</p>
<p><strong>实施: JavaScript</strong>     <br />使用在设计阶段选择的框架（ jQuery ， Scriptaculous ， MooTools &#8230;)来实施Ajax的功能（拖放，动画效果&#8230; ）</p>
<h6>4. 测试</h6>
<p>在这一阶段需要“强调”的是。你的应用程序能在各种条件下执行（例如使用不同的浏览器）。您的目标是在最后释放前检测和修复所有的应用程序错误。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0081.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="32" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008-thumb1.gif" width="32" border="0" /></a></p>
<p>请记住，这一过程需要有条理，需要极大的耐心！测试每个页面和每个功能（在这种情况下还可以帮助理顺应用图） 。如果在测试过程中发现一个bug ，修改代码修复它并继续进行最后的代码确认（进一步的测试）。</p>
<h6>5. 发布</h6>
<p>最后你准备好发布了！在测试文件夹中发布并做最后的测试，假如一切都OK的话，那就进行最后的发布吧。</p>
<h6>在Scribd上，阅读与下载此篇文章</h6>
<p><a href="http://www.blockcheat.com/index.php?q=uggc%3A%2F%2Fjjj.fpevoq.pbz%2Fqbp%2F10042348%2FGur-Jbbex-Cncref-A1"><b>下载 Woork Papers N1</b><b>幻灯片 |</b><b>你需要知道的开发Web</b><b>应用程序的结构化过程</b></a></p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/61966/42660?tag_related" href="http://www.yeeyan.com/articles/view/61966/42660?tag_related">http://www.yeeyan.com/articles/view/61966/42660?tag_related</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/875/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用整洁的HTML标记构建页面</title>
		<link>http://blog.acmind.com/archives/858</link>
		<comments>http://blog.acmind.com/archives/858#comments</comments>
		<pubDate>Tue, 02 Jun 2009 02:58:40 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[页面]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[构建]]></category>
		<category><![CDATA[标记]]></category>
		<category><![CDATA[整洁]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=858</guid>
		<description><![CDATA[网络是个不断发展变化的有机体，如何建设可以长久适应互联网发展的页面是很重要的，它可以是你的网站在互联网发展的激流中迅速跟进。
使用整洁的HTML标记，构建符合标准的页面可以帮助你做到这些，更重要的，它可以是你在未来的运营中节省大量的时间和金钱。
网页技术是跟随互联网技术的发展而进步的，HTML技术已经发展了很长时间，它的伴生技术也已发展稳定。
首先是Javascript，然后是CSS、XML，直到现在的AJAX，HTML5的大规模运用也已初现端倪——Firefox、Safari、 Opera和Chrome已经基本完全支持HTML5（在这个问题上，微软的Internet Explorer再一次阻碍了互联网的发展#-_-）
在这篇文章里，我们会探讨基础的web标准，讨论它们是什么，他们有什么意义，以及这些重要但常被忽视的问题的解决方法。
什么是“整洁”的HTML标记？
简单来说，“整洁”的HTML标记指的是：没有累赘，符合标准，使用有意义的标签和结构。
没有累赘的HTML代码可以充分的利用标签，消除了不必要的代码，仅保存有意义的标记。它避免了无用的属性，比如嵌入式CSS，保持了文档结构的整齐。
同样的，没有累赘的CSS代码应该避免自身的重复，使用可继承的属性(记住CSS的本意是层叠样式表)，并且科学的重用CSS Class。
符合标准指的是你的页面可以通过W3C的HTML、CSS、XML标准验证，使用免费的W3C验证器，找出并修改错误，继续测试知道100%符合标准。
为什么要这样？只要能正常显示不就够了吗？
每个项目都有一个紧迫的时限，用户希望网站越早发布越好。所以网站开发和设计人员都被要求快速高效的完成工作。
人很容易陷入一种陷阱——快速就意味着草率，书写整洁、符合标准的代码会浪费时间。经常有人说：“它正常显示了，就没问题了”。
虽然此时此刻它显示了，但明年呢？三年以后呢？浏览器换代怎么办？设备兼容吗？
你真的以为搜索引擎会去一行一行的抠你的代码吗，它们是很挑剔的，如果你不使用标准化的代码，就相当于你自己赶跑了搜索引擎。
如果有其他的员工来修改你的代码会怎样，如果你被老板炒了，或者自己跳槽了会怎样？会有继任者来看你的代码，理解它们的意思。你是想让这件事变得简单，还是想让他在背地里扎你的小人？
开始正确的书写它吧，这并不是一项烦人的事情，它会节省你的时间和金钱，并且让你少些后顾之忧。
你可能以为使用嵌入式CSS写页面更快，你也可能觉得不考虑结构直接书写HTML更方便。
但是当你修改文档或者将来你要改版网站的时候，你会花更多的时间来弥补劣质代码造成的干扰。如果你建立了新的样式表，那分散在HTML代码中的嵌入式CSS会给你带来很大麻烦，你可能会花几小时的时间来剥离他们。
可扩展，设备友好，语义化和易升级
手机浏览器的发展越来越快，手机上网不再是黑莓的专利，现在每天有数以亿计的人在使用手机浏览网页。
具备为视力障碍人士开发的辅助浏览技术或为肢体不方便的人设计的特殊操作界面的设备已经很常见。如果你不想失去这么庞大的用户群的话，就要考虑设备友好的问题。
你的网站可能会被以盲文的形式提供给用户，有了 互联网内容存储、 Google快照等工具，你的网页即使被删除，也可能会在网络上被保留很长时间。     
使用整洁、符合标准的标记可以使你轻松应对以上的情况。
Do和Don&#8217;t (&#34;要&#34;和&#34;不要&#34;)
DO &#8211; 使用预定义的标签。例如：h1是一个网页内容中最重要的部分，然后是h2,h3等等，一个网页中只能有一个h1；
DO &#8211; 使用有意义的元素命名。问问自己如果别人来阅读代码的话，会不会明白你的class和ID的命名的意思，比如，同样一个层，用#box12 还是#comment-footer，你觉得哪个更好些？
DO &#8211; 充分利用CSS的继承性。例如：你在一个container中设置了字体属性，那么你就不必在其子元素中再分别设置了，除非它用不同的字体。这会使你的样式表明晰简洁。
DO &#8211; 让你的HTML、CSS、XML代码符合标准。使用W3C验证器验证错误和警告，修改它们知道100%符合标准。
DO &#8211; 反复检查所见即所得编辑器产生的代码。所见即所得浏览器是产生垃圾代码的大头，一定要尽量精简它产生的代码。
DON&#8217;T &#8211; 不要使用嵌入式css样式和无关的标记和属性。即使你很忙乱，也不要顺手加这些东西。
DON&#8217;T &#8211; 不要满足于“正确显示”。因为隐藏在页面中的错误可能会在其他浏览器或设备中把页面毁的面目全非。
&#160;
摘自：http://www.yeeyan.com/articles/view/oc/40030?tag_related
]]></description>
			<content:encoded><![CDATA[<p>网络是个不断发展变化的有机体，如何建设可以长久适应互联网发展的页面是很重要的，它可以是你的网站在互联网发展的激流中迅速跟进。</p>
<p>使用整洁的HTML标记，构建符合标准的页面可以帮助你做到这些，更重要的，它可以是你在未来的运营中节省大量的时间和金钱。</p>
<p>网页技术是跟随互联网技术的发展而进步的，HTML技术已经发展了很长时间，它的伴生技术也已发展稳定。</p>
<p>首先是Javascript，然后是CSS、XML，直到现在的AJAX，HTML5的大规模运用也已初现端倪——Firefox、Safari、 Opera和Chrome已经基本完全支持HTML5（在这个问题上，微软的Internet Explorer再一次阻碍了互联网的发展#-_-）</p>
<p>在这篇文章里，我们会探讨基础的web标准，讨论它们是什么，他们有什么意义，以及这些重要但常被忽视的问题的解决方法。</p>
<h5>什么是“整洁”的HTML标记？</h5>
<p>简单来说，“整洁”的HTML标记指的是：没有累赘，符合标准，使用有意义的标签和结构。</p>
<p>没有累赘的HTML代码可以充分的利用标签，消除了不必要的代码，仅保存有意义的标记。它避免了无用的属性，比如嵌入式CSS，保持了文档结构的整齐。</p>
<p>同样的，没有累赘的CSS代码应该避免自身的重复，使用可继承的属性(记住CSS的本意是层叠样式表)，并且科学的重用CSS Class。</p>
<p>符合标准指的是你的页面可以通过<a href="http://www.w3.org/Consortium/">W3C</a>的HTML、CSS、XML标准验证，使用免费的W3C验证器，找出并修改错误，继续测试知道100%符合标准。</p>
<h5>为什么要这样？只要能正常显示不就够了吗？</h5>
<p>每个项目都有一个紧迫的时限，用户希望网站越早发布越好。所以网站开发和设计人员都被要求快速高效的完成工作。</p>
<p>人很容易陷入一种陷阱——快速就意味着草率，书写整洁、符合标准的代码会浪费时间。经常有人说：“它正常显示了，就没问题了”。</p>
<p>虽然此时此刻它显示了，但明年呢？三年以后呢？浏览器换代怎么办？设备兼容吗？</p>
<p>你真的以为搜索引擎会去一行一行的抠你的代码吗，它们是很挑剔的，如果你不使用标准化的代码，就相当于你自己赶跑了搜索引擎。</p>
<p>如果有其他的员工来修改你的代码会怎样，如果你被老板炒了，或者自己跳槽了会怎样？会有继任者来看你的代码，理解它们的意思。你是想让这件事变得简单，还是想让他在背地里扎你的小人？</p>
<p>开始正确的书写它吧，这并不是一项烦人的事情，它会节省你的时间和金钱，并且让你少些后顾之忧。</p>
<p>你可能以为使用嵌入式CSS写页面更快，你也可能觉得不考虑结构直接书写HTML更方便。</p>
<p>但是当你修改文档或者将来你要改版网站的时候，你会花更多的时间来弥补劣质代码造成的干扰。如果你建立了新的样式表，那分散在HTML代码中的嵌入式CSS会给你带来很大麻烦，你可能会花几小时的时间来剥离他们。</p>
<h5>可扩展，设备友好，语义化和易升级</h5>
<p>手机浏览器的发展越来越快，手机上网不再是黑莓的专利，现在每天有数以亿计的人在使用手机浏览网页。</p>
<p>具备为视力障碍人士开发的辅助浏览技术或为肢体不方便的人设计的特殊操作界面的设备已经很常见。如果你不想失去这么庞大的用户群的话，就要考虑设备友好的问题。</p>
<p>你的网站可能会被以盲文的形式提供给用户，有了 <a href="http://www.archive.org/index.php">互联网内容存储</a>、 <a href="http://www.googleguide.com/cached_pages.html">Google快照</a>等工具，你的网页即使被删除，也可能会在网络上被保留很长时间。     </p>
<p>使用整洁、符合标准的标记可以使你轻松应对以上的情况。</p>
<h5>Do和Don&#8217;t (&quot;要&quot;和&quot;不要&quot;)</h5>
<p>DO &#8211; 使用预定义的标签。例如：h1是一个网页内容中最重要的部分，然后是h2,h3等等，一个网页中只能有一个h1；</p>
<p>DO &#8211; 使用有意义的元素命名。问问自己如果别人来阅读代码的话，会不会明白你的class和ID的命名的意思，比如，同样一个层，用#box12 还是#comment-footer，你觉得哪个更好些？</p>
<p>DO &#8211; 充分利用CSS的继承性。例如：你在一个container中设置了字体属性，那么你就不必在其子元素中再分别设置了，除非它用不同的字体。这会使你的样式表明晰简洁。</p>
<p>DO &#8211; 让你的HTML、CSS、XML代码符合标准。使用W3C验证器验证错误和警告，修改它们知道100%符合标准。</p>
<p>DO &#8211; 反复检查所见即所得编辑器产生的代码。所见即所得浏览器是产生垃圾代码的大头，一定要尽量精简它产生的代码。</p>
<p>DON&#8217;T &#8211; 不要使用嵌入式css样式和无关的标记和属性。即使你很忙乱，也不要顺手加这些东西。</p>
<p>DON&#8217;T &#8211; 不要满足于“正确显示”。因为隐藏在页面中的错误可能会在其他浏览器或设备中把页面毁的面目全非。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/oc/40030?tag_related" href="http://www.yeeyan.com/articles/view/oc/40030?tag_related">http://www.yeeyan.com/articles/view/oc/40030?tag_related</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/858/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS Sprites + 圆角</title>
		<link>http://blog.acmind.com/archives/853</link>
		<comments>http://blog.acmind.com/archives/853#comments</comments>
		<pubDate>Tue, 02 Jun 2009 02:07:11 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[圆角]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=853</guid>
		<description><![CDATA[初步介绍
当然，我知道现在有成千上万个关于 用CSS处理圆角 的教程，但不管怎么说，我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常有用。需要重点指出的是，这篇教程彻底地应用高级CSS技术，但是，我会尽力使初学者看起来简单。CSS3 在这里还没有得到完全的应用，所以，知道现在，我会保持W3C验证的有效。
看一下演示 &#124; 下载 css sprites + 圆角
您还可以参考一下文章：
43个PSD转XHTML, CSS创建布局及导航辅导教程,解析事件背后的每一个步骤
我们将怎样来处理?
我处理圆角的版本是由内置的绝对定位的四个div组成，每个div都有唯一的圆角图片作CSS Sprite操作。我们将会这样做: 
是什么方式导致这项技术表现得这么了不起呢（What makes this technique cool）?
通过可变的宽度和高度处理毗邻的元素的能力。没有极限。（The ability to make rounded-bordered elements with fluid width and height. No limits whatsoever.）这项技术，正如我之前提到的，是与 CSS Sprites 结合操作完成的。如果您不知道这是项怎样的技术或者说不知道怎么使用它，那么请先阅读我 之前的文章。CSS sprites 都学会了吗? 那我们就开始吧!
第一步: 创建我们的 Sprite

为矩形圆角图片处理选择一款编辑器 (在这个案例中我选择的是Firework).       
切割并且导出圆角到本地临时位置 (我们将会在之后用到).       
新创建一个文件，将圆角导入到这个新文件中，复制三次，然后旋转这三个新切片得到另外的三个圆角。 [...]]]></description>
			<content:encoded><![CDATA[<h5>初步介绍</h5>
<p>当然，我知道现在有成千上万个关于<strong> 用CSS处理圆角 </strong>的教程，但不管怎么说，我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常有用。需要重点指出的是，这篇教程彻底地应用高级CSS技术，但是，我会尽力使初学者看起来简单。<strong>CSS3</strong> 在这里还没有得到完全的应用，所以，知道现在，我会保持W3C验证的有效。</p>
<p><a href="http://www.ignacioricci.com/tutorials/rounded%20corners/demo/rounded-corners.html">看一下演示</a> | <a href="http://www.ignacioricci.com/tutorials/rounded%20corners/demo-rounded-corners.zip">下载 css sprites + 圆角</a></p>
<p>您还可以参考一下文章：</p>
<h4><a href="http://www.iwanna.cn/archives/2009/05/03/886/">43个PSD转XHTML, CSS创建布局及导航辅导教程,解析事件背后的每一个步骤</a></h4>
<h5>我们将怎样来处理?</h5>
<p>我处理圆角的版本是由内置的绝对定位的四个div组成，每个div都有唯一的圆角图片作CSS Sprite操作。我们将会这样做: <a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0026.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="440" alt="clip_image002[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0026-thumb.gif" width="622" border="0" /></a></p>
<h6>是什么方式导致这项技术表现得这么了不起呢（What makes this technique cool）?</h6>
<p>通过可变的宽度和高度处理毗邻的元素的能力。没有极限。（The ability to make rounded-bordered elements with fluid width and height. No limits whatsoever.）这项技术，正如我之前提到的，是与 <a href="http://cssglobe.com/post/3028/creating-easy-and-useful-css-sprites">CSS Sprites</a> 结合操作完成的。如果您不知道这是项怎样的技术或者说不知道怎么使用它，那么请先阅读我 <a href="http://cssglobe.com/post/3028/creating-easy-and-useful-css-sprites">之前的文章</a>。CSS sprites 都学会了吗? 那我们就开始吧!</p>
<h5>第一步: 创建我们的 Sprite</h5>
<ol>
<li>为矩形圆角图片处理选择一款编辑器 (在这个案例中我选择的是Firework).      <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0037.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003[7]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="clip_image003[7]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0037-thumb.gif" width="499" border="0" /></a> </li>
<li>切割并且导出圆角到本地临时位置 (我们将会在之后用到).      <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0047.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004[7]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="clip_image004[7]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0047-thumb.gif" width="499" border="0" /></a> </li>
<li>新创建一个文件，将圆角导入到这个新文件中，复制三次，然后旋转这三个新切片得到另外的三个圆角。      <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0056.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="90" alt="clip_image005[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0056-thumb.gif" width="80" border="0" /></a> </li>
<li>合成四个圆角为一张图片, 并用 <strong>1px </strong><strong>的红线</strong> 来区分它们.       <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0066.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="79" alt="clip_image006[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0066-thumb.gif" width="77" border="0" /></a> </li>
<li>导出合成图片，sprite 也就大功告成了。 </li>
</ol>
<h5>第二步: HTML 代码</h5>
<p>首先，我们会给容器 div 一个 <strong>.roundedBox</strong></p>
<p>类 :</p>
<pre>&lt;div <strong>class=&quot;roundedBox&quot;</strong>&gt;&lt;/div&gt;</pre>
<p>现在，我们必须再增加四个 div ，这会在将来创建圆角的时候用到。之后必须给每个加载一个类 <strong>.corner</strong>，同时也标识一个类来指定它们格子的位置。</p>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot;</span>&gt;
     &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 1&lt;/strong&gt;
     &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
     &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
     &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
     &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt; </pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>一切搞定? 嗯，让我们把注意力再转移到 CSS 代码上来。</p>
<h5>第三步: CSS 代码</h5>
<p>如你所知, (或者您会在这里快速学习到) 绝对定位元素通常都依照相对定位的父元素进行定位。. If this element is not defined, they will take as their parent relatively-positioned element, the body tag.如果这个父元素无法界定，那么它会去最近作相对定位的那个父元素，直至 body 标签。 <strong>哈?!</strong> &#8211; 好了，如果到此为止您仍没有掌握，不用担心，我们将在第二部分了解它。（翻译得有点拗，附上原文：Ok, if you didn’t get this, don’t worry, you’ll catch it in an second.）</p>
<h6>让我们先来定义下所有的圆角</h6>
<p>所有的圆角都必须定义绝对定位，并且注明高度跟宽度。 <strong>我的圆角定义的宽度跟高度都是 17px.<br />
    <br /></strong><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0076.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image007[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="76" alt="clip_image007[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0076-thumb.gif" width="72" border="0" /></a></p>
<pre class="code">.corner {
position:absolute;
       width:17px;
       height:17px;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><em>如果您是第一次切割矩形圆角，那么宽度跟高度很可能会不一样 (咄!)。</em></p>
<h6>现在开始定义 div 容器样式:</h6>
<pre class="code">.roundedBox {position:relative;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>任何定义有类 <strong>.roundedBox</strong> 的元素内，绝对定位元素都会相对于这个元素进行定位，而不是标签 body。 我们也必须设置一些padding值，如果没有设置，圆角将会覆盖我们的文本，这肯定不是我们想要的效果。 <strong>重要提示:</strong> top 和 bottom padding 值必须 等价于圆角的 <strong>height</strong>。left 和 right padding 值必须等价于圆角的宽度。 正如您已经知道的，我的圆角宽度跟高度是相等的，因此，四个边角的padding 值也是相等的:</p>
<pre class="code">.roundedBox {position:relative; padding:17px; margin:10px 0;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><em>我也通过 margin 给我们的 div 流出了一定的空隙 </em></p>
<h6>最后，让我们对没有圆角作单独定义</h6>
<p>我们会对每个圆角作绝对定位设置，并且定位背景图的位置 (根据我们的 sprite):</p>
<pre class="code">.roundedBox {position:relative; padding:17px; margin:10px 0;}
.corner {position:absolute; width:17px; height:17px;}
.topLeft {top:0; left:0; background-position:-1px -1px;}
.topRight {top:0; right:0; background-position:-19px -1px;}
.bottomLeft {bottom:0; left:0; background-position:-1px -19px;}
.bottomRight {bottom:0; right:0; background-position:-19px -19px;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>您可能已经注意到，我们的样式仍然还没有下载 sprite。我们一般不会去定义它们的原因是，我们会使用另外的方法。</p>
<h5>圆形盒模型 1 (蓝色)</h5>
<h6>HTML 代码</h6>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot; </span>id=<span style="color: #a31515">&quot;type1&quot;</span>&gt;
    &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 1&lt;/strong&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>我们必须给容器 div 定义一个ID为 <strong>#type1</strong>，用来实施特殊背景。</p>
<h6>CSS 代码</h6>
<p>首先，我们得给 #type1 匹配一个背景色，使之融合于 sprite 中的圆角:</p>
<pre class="code">#type1 {background-color:#CCDEDE;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0096.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image009[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image009[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0096-thumb.gif" width="116" border="0" /></a> </p>
<p>之后，通过定义 .corner 类来协助圆形盒模型载入 Sprite 样式:</p>
<pre class="code">#type1 {background-color:#CCDEDE;}
#type1 .corner {background-image:url(../images/corners-type1.gif);}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0106.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image010[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image010[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0106-thumb.gif" width="57" border="0" /></a> </p>
<p>好了，我们的第一个圆角矩形大功告成了！<a href="http://www.ignacioricci.com/tutorials/rounded%20corners/previews/preview-type1.html">预览圆角矩形模型1 (蓝色)</a>.</p>
<h5>圆形盒模型 2 (绿色) / 圆形盒模型 3 (紫色)</h5>
<p>模型1，模型2跟模型3的唯一差别就是它们的颜色，所以我们也仅仅只修改这些。</p>
<h6>模型 2 (绿色)</h6>
<p>HTML 代码</p>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot; </span>id=<span style="color: #a31515">&quot;type2&quot;</span>&gt;
    &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 2&lt;/strong&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>CSS 代码 (仅仅修改 sprites 的颜色及背景色)<br />
  <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0116.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image011[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image011[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0116-thumb.gif" width="57" border="0" /></a></p>
<pre class="code">#type2 {background-color:#CDDFCA;}
#type2 .corner {background-image:url(../images/corners-type2.gif);}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://www.ignacioricci.com/tutorials/rounded%20corners/previews/preview-type2.html">预览圆角矩形模型2 (绿色)</a>.</p>
<h6>模型 3 (紫色)</h6>
<p>HTML 代码</p>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot; </span>id=<span style="color: #a31515">&quot;type3&quot;</span>&gt;
    &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 3&lt;/strong&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>CSS 代码 (仅仅修改 sprites 的颜色及背景色)<br />
  <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0126.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image012[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image012[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0126-thumb.gif" width="57" border="0" /></a></p>
<pre class="code">#type3 {background-color:#D3CADF;}
#type3 .corner {background-image:url(../images/corners-type3.gif);}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://www.ignacioricci.com/tutorials/rounded%20corners/previews/preview-type3.html">预览圆角矩形模型 3 (紫色)</a>. 都学会了吗？好，现在我们再进一步学习 </p>
<h5>模型 4 (红色边框)</h5>
<p>模型4 跟模型1、2、3又有什么区别呢？边框和颜色，让我们来解决这些因素吧。</p>
<h6>HTML 代码</h6>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot; </span>id=<span style="color: #a31515">&quot;type4&quot;</span>&gt;
    &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 4&lt;/strong&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h6>CSS 代码 (在 sprite 中给您的边角的边框都添上边框，并使 .roundedBox 类的背景及边框融合 sprite。)</h6>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0136.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image013[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image013[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0136-thumb.gif" width="128" border="0" /></a></p>
<pre class="code">#type4 {background-color:#CCACAE; border:1px solid #AD9396;}
#type4 .corner {background-image:url(../images/corners-type4.gif);}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0146.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image014[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" alt="clip_image014[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0146-thumb.gif" width="57" border="0" /></a> </p>
<p>好了，这个就是截图效果。我们的边角还不能正确地覆盖 #type4 边框。所以我们必须矫正它们的定位来覆盖早期的定位样式。让我们做到这一点:</p>
<pre class="code">#type4 {background-color:#CCACAE; border:1px solid #AD9396;}
#type4 .corner {background-image:url(../images/corners-type4.gif);}
#type4 .topLeft {top:-1px;left:-1px;}
#type4 .topRight {top:-1px; right:-1px;}
#type4 .bottomLeft {bottom:-1px; left:-1px;}
#type4 .bottomRight {bottom:-1px; right:-1px;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>好了，这就是我们完成的模型 4。<a href="http://www.ignacioricci.com/tutorials/rounded%20corners/previews/preview-type4.html">预览圆角矩形模型4 (红色边框)</a>. We are almost there, don’t quit now :p</p>
<h5>模型 5 (垂直渐变)</h5>
<p>好了，模型5会需要更多的工作量，我们应该这样:</p>
<ol>
<li>修改上下边角的高度 (由渐变度决定(depending on your gradient))。 </li>
<li>修改上下边角的背景图定位 (由渐变度决定)。 </li>
<li>通过重复平铺 1px 的背景图片来创建容器 div 的渐变效果。 </li>
<li>值得注意的是，我们必须给内容设置一个大小，或者给容器设置一个最小高度(由渐变度决定)。 </li>
</ol>
<p>让我们开始吧。</p>
<h6>HTML 代码 (跟之前的一样)</h6>
<pre class="code">&lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;roundedBox&quot; </span>id=<span style="color: #a31515">&quot;type5&quot;</span>&gt;
    &lt;strong&gt;My content <span style="color: blue">in </span>roundedBox Type 5&lt;/strong&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner topRight&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomLeft&quot;</span>&gt;&lt;/div&gt;
    &lt;div <span style="color: blue">class</span>=<span style="color: #a31515">&quot;corner bottomRight&quot;</span>&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h6>CSS 代码</h6>
<p>我的渐变是从上到下垂直的。所以我们必须增加上边角的高度，以及更改下边角的背景图位置。当您看到我的新的 sprite 就会明白为什么会这么处理。就是下面这张: <a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0166.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image016[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="clip_image016[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0166-thumb.gif" width="57" border="0" /></a> </p>
<p>我的div中的背景图片是这样的: </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0186.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image018[6]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="clip_image018[6]" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0186-thumb.gif" width="21" border="0" /></a><em><br />
    <br />1px </em><em>的宽度，它的确是存在的</em>。 我的下边角有一条实心颜色，刚好可以匹配div的背景色。 少说话多行动。我们来继续定义容器 div :</p>
<pre class="code">#type5 {
    background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0;
    min-height:110px;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>给容器设置的背景颜色是我从底部边角中吸取的。然后将背景图片按 x 方向进行重复。最后我给它设置一个最小高度，正如我之前所说的，渐变才不会泄露。最后来加上所有的边角 (我将文件的类型修改为 .png 格式的图片，为的是能得到更好的渐变质量):</p>
<pre class="code">#type5 {
    background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0;
    min-height:110px;
}
#type5 .corner {background-image:url(../images/corners-type5.png);}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>现在，我增加上边角的高度 (这是由渐变最后抵达的颜色位置决定的):</p>
<pre class="code">#type5 {
    background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0;
    min-height:110px;
}
#type5 .corner {background-image:url(../images/corners-type5.png);}
#type5 .topLeft,#type5 .topRight {height:140px;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>最后，我纠正下下边角的背景图定位:</p>
<pre class="code">#type5 {
    background:#FECBCA url(../images/roundedbox-type5-bg.png) repeat-x 0 0;
    min-height:110px;
}
#type5 .corner {background-image:url(../images/corners-type5.png);}
#type5 .topLeft,#type5 .topRight {height:140px;}
#type5 .bottomLeft {background-position:-1px -142px;}
#type5 .bottomRight {background-position:-19px -142px;}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>全部完成! &#8211; <a href="http://www.ignacioricci.com/tutorials/rounded%20corners/previews/preview-type5.html">预览圆角矩形模型 5 (垂直渐变)</a>.</p>
<h5>IE6 版本</h5>
<p>这项技术在这一令人讨厌的浏览器中是有问题的。我们必须给容器 (.roundedBox, or #type1, #type2, 等等) 确定宽度跟高度。如果您没有定义它，那么它会泄露到盒模型之外。 使用 IE6 条件式注释法来定义它。</p>
<h5>最后的想法</h5>
<p>我希望这项技术对您会有帮组，并且不会显得太难。垂直渐变、透明的角落，只要多加练习，您的脑袋会变得更加好用，也会更加容易定义样式。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/seasun/40032?tag_related" href="http://www.yeeyan.com/articles/view/seasun/40032?tag_related">http://www.yeeyan.com/articles/view/seasun/40032?tag_related</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/853/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网页新手30条进阶秘技</title>
		<link>http://blog.acmind.com/archives/815</link>
		<comments>http://blog.acmind.com/archives/815#comments</comments>
		<pubDate>Tue, 02 Jun 2009 01:51:50 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[秘技]]></category>
		<category><![CDATA[网页]]></category>
		<category><![CDATA[技巧]]></category>
		<category><![CDATA[新手]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=815</guid>
		<description><![CDATA[许许多多的网页新手正徘徊在专业编码的门槛前，而网上的教程参差不齐，鱼龙混杂，很容易让新手迷茫。这里总结了30条网页编码的“秘技”，只要在编码过程中牢记它们，灵活运用，你一定会写出一手漂亮的代码，早日迈入专业开发者的行列。
1. 一定要闭合标签
在以往的页面源代码里，经常看到这样的语句：

&#60;li&#62;Some text here.&#160; 
&#60;li&#62;Some new text here.&#160; 
&#60;li&#62;You get the idea.&#160; 

也许过去我们可以容忍这样的非闭合标签，但在今天的标准来看，这是非常不可取的，是必须百分百避免的。一定要注意闭合你的标签，否则将无法通过验证，并且容易出现一些难以预见的问题。
最好使用这样的形式：

&#60;ul&#62; 
&#60;li&#62;Some text here. &#60;/li&#62; 
&#60;li&#62;Some new text here. &#60;/li&#62; 
&#60;li&#62;You get the idea. &#60;/li&#62; 
&#60;/ul&#62; 

2. 声明正确的文档类型( DocType )

笔者早先曾加入过许多CSS论坛，在那里，如果有用户遇到问题，我们会建议他首先做两件事：
1. 验证CSS文件，解决所有可见的错误
2. 加上文档类型 Doctype
DOCTYPE 定义在HTML标签出现之前，它告诉浏览器这个页面包含的是HTML，XHTML，
还是两者混合出现，这样浏览器才能正确的解析标记。

通常有四种文档类型可供选择：

&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01//EN&#34; &#34;http://www.w3.org/TR/html4/strict.dtd&#34;&#62; 
&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34; &#34;http://www.w3.org/TR/html4/loose.dtd&#34;&#62; 
&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML [...]]]></description>
			<content:encoded><![CDATA[<p>许许多多的网页新手正徘徊在专业编码的门槛前，而网上的教程参差不齐，鱼龙混杂，很容易让新手迷茫。这里总结了30条网页编码的“秘技”，只要在编码过程中牢记它们，灵活运用，你一定会写出一手漂亮的代码，早日迈入专业开发者的行列。</p>
<h5>1. 一定要闭合标签</h5>
<p>在以往的页面源代码里，经常看到这样的语句：</p>
<ol>
<li>&lt;li&gt;Some text here.&#160; </li>
<li>&lt;li&gt;Some new text here.&#160; </li>
<li>&lt;li&gt;You get the idea.&#160; </li>
</ol>
<p>也许过去我们可以容忍这样的非闭合标签，但在今天的标准来看，这是非常不可取的，是必须百分百避免的。一定要注意闭合你的标签，否则将无法通过验证，并且容易出现一些难以预见的问题。</p>
<p>最好使用这样的形式：</p>
<ol>
<li>&lt;ul&gt; </li>
<li>&lt;li&gt;Some text here. &lt;/li&gt; </li>
<li>&lt;li&gt;Some new text here. &lt;/li&gt; </li>
<li>&lt;li&gt;You get the idea. &lt;/li&gt; </li>
<li>&lt;/ul&gt; </li>
</ol>
<h5>2. 声明正确的文档类型( DocType )</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0026.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="84" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb5.jpg" width="660" border="0" /></a></p>
<p>笔者早先曾加入过许多CSS论坛，在那里，如果有用户遇到问题，我们会建议他首先做两件事：</p>
<p>1. 验证CSS文件，解决所有可见的错误</p>
<p>2. 加上文档类型 Doctype</p>
<p><b>DOCTYPE 定义在HTML标签出现之前，它告诉浏览器这个页面包含的是HTML，XHTML，</b></p>
<p><b>还是两者混合出现，这样浏览器才能正确的解析标记。</b></p>
<p><b></b></p>
<p>通常有四种文档类型可供选择：</p>
<ol>
<li><strong>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</strong> </li>
<li><strong>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;</strong> </li>
<li><strong>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</strong> </li>
<li><strong>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</strong> </li>
</ol>
<p>关于该使用什么样的文档类型声明，一直有不同的说法。通常认为使用最严格的声明是最佳选择，但研究表明，大部分浏览器会使用普通的方式解析这种声 明，所以很多人选择使用HTML4.01标准。选择声明的底线是，它是不是真的适合你，所以你要综合考虑来选择适合你得项目的声明。</p>
<h5>3.&#160; 不要使用嵌入式CSS样式</h5>
<p>当你在埋头写代码时，可能会经常顺手或偷懒的加上一点嵌入式css代码，就象这样：</p>
<ol>
<li>&lt;p style=&quot;color: red;&quot;&gt;Oncoding编码营&lt;/p&gt; </li>
</ol>
<p>这样看起来即方便又没有问题，但是它会在你得代码中产生问题。</p>
<p>在你开始写代码时，最好是在内容结构完成之后再开始加入样式代码。</p>
<p><b>这样的编码方式就像打游击，是一种很山寨的做法。——</b>Chris Coyier</p>
<p>更好的做法是，把这个P的样式定义在样式表文件里：</p>
<ol>
<li>#someElement &gt; p {&#160; </li>
<li>color: red;&#160; </li>
<li>}&#160; </li>
</ol>
<h5>4. 在页面head标签中引入所有的样式表文件</h5>
<p>理论上讲，你可以在任何位置引入CSS样式表，但HTML规范建议在网页的head标记中引入，这样可以加快页面的渲染速度。</p>
<p><b>在雅虎的开发过程中，我们发现，在head标签中引入样式表，会加快网页加载速度，</b></p>
<p><b>因为这样可以使页面逐步渲染。 </b>&#160; —— ySlow团队</p>
<ol>
<li>&lt;head&gt; </li>
<li>&lt;title&gt;My Favorites Kinds of Corn&lt;/title&gt; </li>
<li>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;path/to/file.css&quot; /&gt; </li>
<li>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;path/to/anotherFile.css&quot; /&gt; </li>
<li>&lt;/head&gt; </li>
</ol>
<h5>5. 在页面底部引入JavaScript文件</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0065.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="81" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb5.jpg" width="660" border="0" /></a></p>
<p>要记住一个原则，就是让页面以最快的速度呈现在用户面前。当加载一个脚本时，页面会暂停加载，直到脚本完全载入。所以会浪费用户更多的时间。</p>
<p>如果你的JS文件只是要实现某些功能，（比如点击按钮事件），那就放心的在body底部引入它，这绝对是最佳的方法。</p>
<p>举例：</p>
<ol>
<li>&lt;p&gt;And now you know my favorite kinds of corn. &lt;/p&gt; </li>
<li>&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/file.js&quot;&gt;&lt;/script&gt; </li>
<li>&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/anotherFile.js&quot;&gt;&lt;/script&gt; </li>
<li>&lt;/body&gt; </li>
<li>&lt;/html&gt; </li>
</ol>
<h5>6. 不要使用嵌入式JavaScript，这都21世纪了！</h5>
<p>许多年以前，还存在一种这样的方式，就是直接将JS代码加入到标签中。尤其是在简单的图片相册中非常常见。本质上讲，一个“onclick”事件是 附加在 标签上的，其效果等同于一些JS代码。不需要讨论太多，非常不应该使用这样的方式，应该把代码转移到一个外部JS文件中，然后使用“ addEventListener / attachEvent ”加入时间侦听器。或者使用jQuery等框架，之需要使用其“clock”方法。</p>
<ol>
<li>$(&#8216;a#moreCornInfoLink&#8217;).click(function() {&#160; </li>
<li>&#160; alert(&#8216;Want to learn more about corn?&#8217;);&#160; </li>
<li>});&#160; </li>
</ol>
<h5>7. 开发中随时进行标准验证</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="319" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008-thumb.gif" width="246" border="0" /></a></p>
<p>很多人并不真正理解标准验证的意义和价值，笔者在一篇 <a href="http://jeff-way.com/2009/05/13/heres-the-thing-about-validation/">博客</a>中详细分析了这个问题。一句话，<b>标准验证是为你服务的，不是给你找麻烦的。</b></p>
<p>如果你刚开始从事网页制作，那强烈建议你下载这个 <a href="https://addons.mozilla.org/en-US/firefox/addon/60">网页开发工具条</a> ，并在编码过程中随时使用&quot;HTML标准验证&quot;和“CSS标准验证”。如果你认为CSS是一种非常好学的语言，那么它会把你整的死去活来。你的不严谨的代码会让你的页面漏洞百出，问题不断，一个好的方法就是—— 验证，验证，再验证。</p>
<h5>8. 下载Firebug</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0103.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image010" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="271" alt="clip_image010" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image010-thumb3.jpg" width="595" border="0" /></a>     <br />Firebug是当之无愧的网页开发最佳插件，它不但可以调试JavaScript，还可以直观的让你了解页面标记的属性和位置。不用多说， <a href="https://addons.mozilla.org/cn-ZH/firefox/addon/1843">下载它！</a></p>
<h5>9. 使用Firebug！ </h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0123.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image012" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="359" alt="clip_image012" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image012-thumb3.jpg" width="415" border="0" /></a></p>
<p>据笔者观察，大部分的使用者仅仅使用了Firebug 20%的功能，那真是太浪费了，你不妨花几个小时的时间来系统学习这个工具，相信会让你事半功倍。</p>
<h6>Firebug教程：</h6>
<ul>
<li><a href="http://michaelsync.net/2007/09/08/firebug-tutorial-overview-of-firebug">Overview of Firebug</a> </li>
<li><a href="http://www.digitalmediaminute.com/screencast/firebug-js/">Debug Javascript With Firebug &#8211; video tutorial</a> </li>
</ul>
<h5></h5>
<h5>10. 使用小写的标记</h5>
<p>理论上讲，你可以像这样随性的书写标记：</p>
<ol>
<li>&lt;DIV&gt; </li>
<li>&lt;P&gt;Here&#8217;s an interesting fact about corn. &lt;/P&gt; </li>
<li>&lt;/DIV&gt; </li>
</ol>
<p>最好不要这样写，费力气输入大些字母没有任何用处，并且会让代码很难看，这样子就很好：</p>
<ol>
<li>&lt;div&gt; </li>
<li>&lt;p&gt;Here&#8217;s an interesting fact about corn. &lt;/p&gt; </li>
<li>&lt;/div&gt; </li>
</ol>
<h5>11.使用H1 &#8211; H6标签</h5>
<p>笔者建议你在网页中使用其中全部六种标记，虽然大部分人只会用到前四个，但使用最多的H会有很多好处，比如设备友好、搜索引擎友好等，不妨把你的P标签都替换成H6。</p>
<h5>12. 如果是博客，那把H1留给文章标题</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0134.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image013" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="290" alt="clip_image013" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image013-thumb4.jpg" width="660" border="0" /></a></p>
<p>今天笔者在<a href="http://www.twitter.com/nettuts">Twitter</a>上发起一次讨论：是该把H1定义到LOGO上还是定义到文章标题上，有80%的人选择了后者。</p>
<p>当然具体如何使用要看你的需求，但我建议你在建立博客的时候，将文章题目定为H1，这对搜索引擎优化(SEO)是非常有好处的。</p>
<h5>13. 下载ySlow</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image014.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image014" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="278" alt="clip_image014" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image014-thumb.gif" width="620" border="0" /></a></p>
<p>在过去几年里，雅虎的团队在前端开发领域做了许多伟大的工作。前不久，它们发布了一个叫ySlow的Firebug扩展，它会分析你的网页，并返回一个“成绩单”，上面细致分析了这个网页的方方面面，提出需要改进的地方，虽然它有点苛刻，但它绝对会对你有所帮助，强烈推荐—— <a href="http://developer.yahoo.com/yslow/">ySlow</a>！</p>
<h5></h5>
<h5>14. 使用UL列表布局导航菜单</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0161.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image016" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="94" alt="clip_image016" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image016-thumb1.jpg" width="423" border="0" /></a>     <br />通常网站都会有导航菜单，你可以用这样的方式定义：</p>
<ol>
<li>&lt;div id=&quot;nav&quot;&gt; </li>
<li>&lt;a href=&quot;#&quot;&gt;Home &lt;/a&gt; </li>
<li>&lt;a href=&quot;#&quot;&gt;About &lt;/a&gt; </li>
<li>&lt;a href=&quot;#&quot;&gt;Contact &lt;/a&gt; </li>
<li>&lt;/div&gt; </li>
</ol>
<p>如果你想书写优美的代码，那最好不要用这种方式，</p>
<p><b>为什么要用UL布局导航菜单？</b></p>
<p><b>——因为UL生来就是为定义列表准备的</b></p>
<p><b>最好这样定义</b>：</p>
<ol>
<li>&lt;ul id=&quot;nav&quot;&gt; </li>
<li>&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt; </li>
<li>&lt;li&gt;&lt;a href=&quot;#&quot;&gt;About&lt;/a&gt;&lt;/li&gt; </li>
<li>&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt; </li>
<li>&lt;/ul&gt; </li>
</ol>
<h5>15. 学会怎样对付IE</h5>
<p>IE一直以来都是前端开发人员的噩梦！</p>
<p>如果你的CSS样式表基本定型了，那么可以为IE单独建立一个样式表，然后这样仅对IE生效：</p>
<ol>
<li>&lt;!&#8211;[if lt IE 7]&gt; </li>
<li>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;path/to/ie.css&quot; /&gt; </li>
<li>&lt;![endif]&#8211;&gt; </li>
</ol>
<p>这些代码的意思是：如果用户浏览器是IE6及以下，那这段代码才会生效。如果你想把IE7也包含进来，那么就把“[if lt IE 7]”改为“[if lte IE 7]”。</p>
<h5>16. 使用一个好的代码编辑器</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image017.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image017" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="clip_image017" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image017-thumb.gif" width="432" border="0" /></a>     <br />不论你是Windows还是Mac用户，这里都有很多优秀的编辑器供你选择：</p>
<h6>Mac 用户</h6>
<ul>
<li><strong><a href="http://www.panic.com/coda">Coda</a></strong> </li>
<li><strong><a href="http://macrabbit.com/espresso/">Espresso</a></strong> </li>
<li><strong><a href="http://macromates.com/">TextMate</a></strong> </li>
<li><strong><a href="http://www.aptana.com/">Aptana</a></strong> </li>
<li><strong><a href="http://www.adobe.com/products/dreamweaver/">DreamWeaver CS4</a></strong> </li>
</ul>
<h6>PC 用户</h6>
<ul>
<li><strong><a href="http://intype.info/home/index.php">InType</a></strong> </li>
<li><strong><a href="http://www.e-texteditor.com/">E-Text Editor</a></strong> </li>
<li><strong><a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a></strong> </li>
<li><strong><a href="http://www.aptana.com/">Aptana</a></strong> </li>
<li><strong><a href="http://www.adobe.com/products/dreamweaver/">Dreamweaver CS4</a></strong> </li>
</ul>
<h5>17. 压缩前端代码！</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0192.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image019" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="288" alt="clip_image019" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image019-thumb2.jpg" width="472" border="0" /></a></p>
<p>通过压缩CSS和JavaScript代码，通常可以减小25%以上的文件体积，在某种情况下，这会大大减轻你的带宽压力，提高加载速度。</p>
<h6>Javascript 压缩服务</h6>
<ul>
<li><a href="http://javascriptcompressor.com/">Javascript Compressor</a> </li>
<li><a href="http://www.xmlforasp.net/JSCompressor.aspx">JS Compressor</a> </li>
<li><a href="http://oncoding.net/tools/jsmin/">JS代码在线压缩( 中文 )</a> </li>
</ul>
<h6><a href="http://www.yeeyan.com/articles/tag/CSS"><em>CSS</em></a> Compression Services</h6>
<ul>
<li><a href="http://www.cssoptimiser.com/">CSS Optimiser</a> </li>
<li><a href="http://www.cssdrive.com/index.php/main/csscompressor/">CSS Compressor</a> </li>
<li><a href="http://www.cleancss.com/">Clean CSS</a> </li>
<li><a href="http://oncoding.net/tools/csstidy/">CSS代码在线压缩( 中文 )        <br /></a></li>
</ul>
<h5>18. 缩减，缩减，缩减</h5>
<p>回望我们大多数人写的第一个页面，一定会发现严重的 “DIV癖”( divitis )，通常初学者的本能就是把一个段落用DIV包起来，然后为了控制定位而套上更多的DIV。—— 其实这是一种低效而有害的做法。</p>
<p><b>网页写完后，一定要多次回头检查，尽量的减少元素的数量。</b></p>
<p><b>能用UL布局的列表就不要用一个个的DIV去布局。</b></p>
<p>正如写文章的关键是“缩减，缩减，缩减”一样，写页面也要遵循这个标准。</p>
<h5>19. 为所有的图片加上Alt属性</h5>
<p>为图片加上alt属性的好处是不言而喻的 —— 这样可以让禁用图片或者使用特殊设备的用户无障碍得了解你的王爷信息，并且对图像搜索引擎友好。</p>
<p>Firefox不支持显示图像Alt属性，可以加入title属性：</p>
<ol>
<li>&lt;img src=&quot;cornImage.jpg&quot; alt=&quot;图片标题&quot; title=&quot;图片标题&quot; /&gt; </li>
</ol>
<h5>20. 学会熬夜</h5>
<p>我经常不知不觉的学习工作到凌晨，我认为这是个很好的状况。</p>
<p>我的“啊～哈！”时间（ &quot;AH-HA&quot; moments，指柳暗花明或豁然开朗的时刻）通常都发生在深夜，比如我彻底理解JavaScript的“闭包”概念，就是在这样一种情况下。如果你还没有感受过这种奇妙的时刻，那就马上试试吧！</p>
<h5>21. 查看源代码</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0213.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image021" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="297" alt="clip_image021" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image021-thumb2.jpg" width="290" border="0" /></a></p>
<p>没有什么比模仿你的偶像能让你更快的学习HTML。起初，我们都要甘做复印机，然后慢慢得发展自己的风格。研究你喜欢的网站页面代码，看看他们是怎么实现的。这是高手的必经之路，你一定要试一下。注意：只是学习和模仿他们的编码风格，而不是抄袭和照搬！</p>
<p>留意网络上各种炫酷的JavaScript效果，如果看上去是使用了插件，那根据它源码中head标签内的文件名，就可以找到这个插件名称，然后就可以学习它据为己用。</p>
<h5>22. 为所有的元素定义样式</h5>
<p>这一条在你制作其他公司企业网站时尤为必要。你自己不使用blockquote标记？那用户可能会用，你自己不使用OL？用户也可能会。花时间做一个页面，显示出ul, ol, p, h1-h6, blockquotes, 等等元素的样式，检查一下是否有遗漏。</p>
<h5>23. 使用第三方服务</h5>
<p>译者注：英文原文标题为“使用Twitter”</p>
<p>现在互联网上流行着许多可以免费加在网页中的API，这些工具非常强大。它可以帮你实现许多巧妙的功能，更重要的是可以帮你宣传网站。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0232.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image023" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="85" alt="clip_image023" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image023-thumb2.jpg" width="345" border="0" /></a></p>
<h5>24. 学习Photoshop</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image025.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image025" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="545" alt="clip_image025" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image025-thumb.jpg" width="567" border="0" /></a></p>
<p>Photoshop是前端工程师的一个重要工具，如果你已经熟练掌握HTML和CSS，那不妨多学习一下Photshop。</p>
<ol>
<li>Psdtuts+上有许多英文的饰品教程：<a href="http://psd.tutsplus.com/category/videos/">Videos section</a> </li>
<li><a href="http://www.lynda.com/">Lynda.com</a> 也有大量教程，不过要支付$25美元 </li>
<li>&quot;<a href="http://www.mydamnchannel.com/You_Suck_at_Photoshop/Season_1/1DistortWarpandLayerEffects_1373.aspx">You Suck at Photoshop</a>&quot; 系列教程 </li>
<li>花费几个小时的时间学习Photoshop的快捷键操作 </li>
</ol>
<h5>25. 学习每一个HTML标签</h5>
<p>虽然有些HTML标签很少用到，但你依然应该了解他们。比如“abbr”、“cite”等，你必须学习它们以备不时之需。</p>
<p>顺便说说上面两个标签：</p>
<p><b>abbr</b><b>：</b></p>
<p>表示一个缩写形式，比如 &quot;Inc.&quot;、&quot;etc.&quot;。通过对缩写词语进行标记，您就能够为浏览器、拼写检查程序、翻译系统以及搜索引擎分度器提供有用的信息。    <br />url：<a href="http://www.w3school.com.cn/tags/tag_abbr.asp">http://www.w3school.com.cn/tags/tag_abbr.asp</a></p>
<p><b>cite</b><b>：</b></p>
<p>通常表示它所包含的文本对某个参考文献的引用，比如书籍或者杂志的标题。    <br />按照惯例，引用的文本将以斜体显示。     <br />url：<a href="http://www.w3school.com.cn/tags/tag_cite.asp">http://www.w3school.com.cn/tags/tag_cite.asp</a></p>
<h5>26. 参与社区讨论</h5>
<p>网络上有许许多多优秀的资源，而社区中也隐藏着许多高手，这里你既可以自学，也能请教经验丰富的开发者。</p>
<h5>27. 使用CSS Reset</h5>
<p>Css Reset也就Reset Css ,就是重置一些标签样式，或者说默认的样式。</p>
<p>关于是否应该使用CSS Reset，网上也有激烈的争论，笔者是建议使用的。你可以先选用一些成熟的CSS Reset，然后慢慢演变成适合自己的。这里有<a href="http://oncoding.net/rebuild/css/article200903/14.html">一些好用的CSS Reset(中文)</a>。</p>
<h5>28. 对齐元素</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image026.gif" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image026" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="632" alt="clip_image026" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image026-thumb.gif" width="620" border="0" /></a></p>
<p>简单来说，你应该尽可能的对齐你的网页元素。可以观察一下你喜欢的网站，它们的LOGO、标题、图表、段落肯定是对得非常整齐的。否则就会显得混乱和不专业。</p>
<h5>29. 关于PSD切片</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0271.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image027" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="630" alt="clip_image027" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image027-thumb1.jpg" width="620" border="0" /></a></p>
<p>现在你已经掌握了HTML、CSS、Photoshop知识，那么你还需要学习如何把PSD转换为网页上的图片和背景，下面有两个不错的教程：</p>
<ul>
<li><a href="http://net.tutsplus.com/videos/screencasts/slice-and-dice-that-psd/">Slice and Dice that PSD</a> </li>
<li><a href="http://net.tutsplus.com/videos/screencasts/converting-a-design-from-psd-to-html/">From PSD to HTML/CSS</a> </li>
</ul>
<h5>30. 不要随意使用框架</h5>
<p>Javascript和CSS都有许多优秀的框架，但如果你是初学者，不要急于使用它们。如果你还没能熟练的驾驭CSS，使用框架会混淆你的知识体系。</p>
<p>CSS框架是为熟练开发者设计的，这样会节省它们大量的时间。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/oc/41248?tag_related" href="http://www.yeeyan.com/articles/view/oc/41248?tag_related">http://www.yeeyan.com/articles/view/oc/41248?tag_related</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/815/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12个针对网页设计师的非常便利的CSS框架、模板和摘录网站</title>
		<link>http://blog.acmind.com/archives/784</link>
		<comments>http://blog.acmind.com/archives/784#comments</comments>
		<pubDate>Tue, 02 Jun 2009 01:34:37 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[网页]]></category>
		<category><![CDATA[框架]]></category>
		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=784</guid>
		<description><![CDATA[如果您经常性地需要建立和开发新的网站，那么您就应该考虑使用模板创建，收集有用的代码片段等等。为了加快开发的进程，您就应该这样做，在需要的适 合您可以使用、修改并优化这些模板文件；如果是作为商业用途的您应该检查下许可条款。然而，到目前为止，这是从最榜的站点中挑选出来的最好的站点的普通清单。好好地使用它们吧！
除此之外，您也可以参考下这些文章：
八种布局方案改善你的设计     IE不支持的10个非常有用的CSS属性     CSS处理大背景图片     五种方法让CSS实现垂直居中     针对IE8正式版的CSS hack
1. CSSTidy

CSSTidy 一个开源的CSS解析器和优化器。 它可以作为可执行文件 (Windows, Linux 和 Mac 中是有效的) 控制每个命令行和作为PHP脚本 (这两个功能几乎相同).     相反，大多数其它的CSS解析器都没有使用正则表达式，而CSSTidy则完全支持CSS2且具有更高的可靠性。”
贴上它们的信息，因为它们说的比我说的要强多了。
某些人可能会有个疑问 &#8211; 为什么您需要优化自己的CSS代码? 仅仅因为，如果您想要更清洁的代码，更快的载入速度，这样，你们俩 &#8211; 您跟访问者都将得以与此！
这里获取可执行文件 or use 在线优化!
2. Clean CSS

您也可以使用这个非常类似的在线优化版本，但我是个反复无常的人，所以我用这个网站要更多一些。这就要求挑选一个您喜欢的吧！
3. Blueprint CSS

“Blueprint 是一个 CSS框架, 其目的是减少你的CSS开发时间。在您项目的顶部预置它会给您的CSS打下坚实的基础。非常易于使用网格、合理的排版甚至是用样式进行打印。”
非常有用的模板文件，帮助您不是反复地从零开始编写代码 &#8211; 现在您可以花费更多的时间来天下新的特征和考虑如何设计，然后是反复的过程。

4. [...]]]></description>
			<content:encoded><![CDATA[<p>如果您经常性地需要建立和开发新的网站，那么您就应该考虑使用模板创建，收集有用的代码片段等等。为了加快开发的进程，您就应该这样做，在需要的适 合您可以使用、修改并优化这些模板文件；如果是作为商业用途的您应该检查下许可条款。然而，到目前为止，这是从最榜的站点中挑选出来的最好的站点的普通清单。好好地使用它们吧！</p>
<p>除此之外，您也可以参考下这些文章：</p>
<p><a href="http://www.iwanna.cn/archives/2009/05/24/1129/">八种布局方案改善你的设计</a>     <br /><a href="http://www.iwanna.cn/archives/2009/05/22/1113/">IE不支持的10个非常有用的CSS属性</a>     <br /><a href="http://www.iwanna.cn/archives/2009/05/11/1046/">CSS处理大背景图片</a>     <br /><a href="http://www.iwanna.cn/archives/2009/05/07/983/">五种方法让CSS实现垂直居中</a>     <br /><a href="http://www.iwanna.cn/archives/2009/05/07/981/">针对IE8正式版的CSS hack</a></p>
<p><a href="http://csstidy.sourceforge.net/">1. CSSTidy</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0015.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="288" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb4.jpg" width="590" border="0" /></a></p>
<p><em>CSS</em>Tidy 一个开源的CSS解析器和优化器。 它可以作为可执行文件 (Windows, Linux 和 Mac 中是有效的) 控制每个命令行和作为PHP脚本 (这两个功能几乎相同).     <br />相反，大多数其它的<em>CSS</em>解析器都没有使用正则表达式，而CSSTidy则完全支持CSS2且具有更高的可靠性。”</p>
<p>贴上它们的信息，因为它们说的比我说的要强多了。</p>
<p>某些人可能会有个疑问 &#8211; 为什么您需要优化自己的<em>CSS</em>代码? 仅仅因为，如果您想要更清洁的代码，更快的载入速度，这样，你们俩 &#8211; 您跟访问者都将得以与此！</p>
<p><a href="http://csstidy.sourceforge.net/download.php">这里获取可执行文件</a> or use <a href="http://floele.flyspray.org/csstidy/css_optimiser.php">在线优化</a>!</p>
<p><a href="http://cleancss.com/">2. Clean CSS</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0023.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="363" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb3.jpg" width="590" border="0" /></a></p>
<p>您也可以使用这个非常类似的在线优化版本，但我是个反复无常的人，所以我用这个网站要更多一些。这就要求挑选一个您喜欢的吧！</p>
<p><a href="http://www.blueprintcss.org/">3. Blueprint CSS</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0035.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="77" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image003-thumb5.jpg" width="260" border="0" /></a></p>
<p>“Blueprint 是一个 <strong><em>CSS</em></strong><strong>框架</strong>, 其目的是减少你的CSS开发时间。在您项目的顶部预置它会给您的CSS打下坚实的基础。非常易于使用网格、合理的排版甚至是用样式进行打印。”</p>
<p>非常有用的模板文件，帮助您不是反复地从零开始编写代码 &#8211; 现在您可以花费更多的时间来天下新的特征和考虑如何设计，然后是反复的过程。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0042.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="337" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image004-thumb2.jpg" width="590" border="0" /></a></p>
<p><a href="http://www.code-sucks.com/">4. Code-Sucks</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0054.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="84" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005-thumb4.jpg" width="260" border="0" /></a></p>
<p>收藏了许多非常好的，如<em>CSS</em>布局、代码段 (CSS, JavaScript, PHP), 网站模板等。这使web的发展进程变得敏捷。良好的使用使用这些吧。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0063.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="451" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb3.jpg" width="438" border="0" /></a></p>
<p><a href="http://snipplr.com/">5. Snipplr</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0073.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image007" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="86" alt="clip_image007" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image007-thumb3.jpg" width="265" border="0" /></a></p>
<p>Snipplr是存储和组织很多代码片段的非常有用的地方 (Javascript, HTML, PHP, <em>CSS</em>, Ruby)。随着您的发展进程会经常使用。并且每个人都可以分享和添加它们的片段，当然，这部分中热门代码段无疑就是代表最佳的和经常被大家使用的。</p>
<p><a href="http://css.maxdesign.com.au/">6. MaxDesign</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0083.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="464" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008-thumb3.jpg" width="590" border="0" /></a></p>
<p><a href="http://meyerweb.com/eric/tools/css/reset/">7. MeyerWeb CSS Reset</a></p>
<p>Eric Meyer <em>CSS</em> reset 非常受还有。您应该使用重置来消除浏览器之前默认风格的不同。同时，Eric也指出，这仅仅是个起点，但非常好用。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0092.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image009" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="223" alt="clip_image009" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image009-thumb2.jpg" width="590" border="0" /></a></p>
<p><a href="http://developer.yahoo.com/yui/examples/">8. YUI Library</a></p>
<p>“每个YUI库中的组件都有300个一些列的例子来说明它的实施。这些例子可以作为您研究YUI的出发点，如，获取代码段作为您编程的开始，或者只是作为您开发各种互动模式灵感的源泉。”</p>
<p>非常有用的模板文件，出发点非常好，并且收藏了很好的例子以满足于几乎所有的网页设计师。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0102.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image010" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="324" alt="clip_image010" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image010-thumb2.jpg" width="287" border="0" /></a></p>
<p><a href="http://960.gs/">9. 960 Grid System</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0112.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image011" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="clip_image011" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image011-thumb2.jpg" width="590" border="0" /></a></p>
<p>这个网格系统正在变得很受欢迎 &#8211; 他们提供常用尺寸, 基于 960 像素的宽度，提供 12 列跟 16 列网格系统。设计师们使用网格是为了使它们的网站看起来更为和谐和精准。当您下载了该网格系统，会得到几个模板文件跟mockups，它会是您的得力助手。</p>
<h6><a href="http://960.gs/files/960_download.zip">Download</a> / <a href="http://www.1stwebdesigner.com/wp-content/uploads/2009/01/demo.html">Demo</a></h6>
<p><a href="http://sencss.kilianvalkhof.com/">10. Sensible Standards CSS Framework</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0122.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image012" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="277" alt="clip_image012" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image012-thumb2.jpg" width="590" border="0" /></a></p>
<p>这个框架也是基于 Eric Meyer reset 系统, 当然也有许多新的基础样式特征，没有任何双重重置和更多，到它的首页查看更多的细节吧。</p>
<p><a href="http://www.spiffycorners.com/">11. CSS 圆角</a></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0132.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image013" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="clip_image013" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image013-thumb2.jpg" width="526" border="0" /></a></p>
<p>我猜测，您肯定听到过不少关于圆角实现的争论和如何创建它，从这里您可以快速地在线获得圆角跟样式。</p>
<p><a href="http://www.contentwithstyle.co.uk/content/a-css-framework">12. 内容与风格</a></p>
<p>良好的框架集有助于您迅速快捷开发新的网站，使您更加关心图形设计而不是代码的编写。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0142.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image014" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="132" alt="clip_image014" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image014-thumb2.jpg" width="511" border="0" /></a></p>
<p>我希望这些参考网站有助于提升您的技能并加速您的发展进程！我相信除了这些网站之外还有许多，如果您知道一些，那么请您留下链接地址，感激不尽！</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/seasun/44063" href="http://www.yeeyan.com/articles/view/seasun/44063">http://www.yeeyan.com/articles/view/seasun/44063</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/784/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正则表达式高级技巧基本概念实例详解</title>
		<link>http://blog.acmind.com/archives/755</link>
		<comments>http://blog.acmind.com/archives/755#comments</comments>
		<pubDate>Tue, 02 Jun 2009 01:10:18 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[实例]]></category>
		<category><![CDATA[表达式]]></category>
		<category><![CDATA[高级]]></category>
		<category><![CDATA[技巧]]></category>
		<category><![CDATA[概念]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=755</guid>
		<description><![CDATA[正则表达式(Regular Expression, abbr. regex) 功能强大，能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是，简单的正则表达式对于一些高级运用，功能远远不够。若要进行筛选的结构比较复杂，你可能就需要用到高级正则表达式。
本文为您介绍正则表达式的高级技巧。我们筛选出了八个常用的概念，并配上实例解析，每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解，请先阅读这篇文章，或者这个教程，或者维基条目。
这里的正则语法适用于PHP，与Perl兼容。
1. 贪婪/懒惰

所有能多次限定的正则运算符都是贪婪的。他们尽可能多地匹配目标字符串，也就是说匹配结果会尽可能地长。不幸的是，这种做法并不总是我们想要的。因此，我们添加“懒惰”限定符来解决问题。在各个贪婪运算符后添加“?”能让表达式只匹配尽可能短的长度。另外，修改器“U”也能惰化能多次限定的运算符。理解贪婪与懒惰的区别是运用高级正则表达式的基础。
贪婪操作符
操作符 * 匹配之前的表达式零次或零次以上。它是一个贪婪操作符。请看下面的例子：
preg_match( '/&#60;h1&#62;.*&#60;\/h1&#62;/', '&#60;h1&#62;这是一个标题。&#60;/h1&#62;
&#160;
&#60;h1&#62;这是另一个。&#60;/h1&#62;', $matches ); 
句点(.)能代表除换行符外的任意字符。上面的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号(*)来匹配标签内的所有内容。匹配结果如下：
&#60;h1&#62;这是一个标题。&#60;/h1&#62;&#60;h1&#62;这是另一个。&#60;/h1&#62;
整个字串都被返回。* 操作符会连续匹配所有内容—— 甚至包括中间的 h1 闭合标签。因为它是贪婪的，匹配整个字串是符合其利益最大化原则。
懒惰操作符
把上面的式子稍作修改，加上一个问号(?)，能让表达式变懒惰：
/&#60;h1&#62;.*?&#60;\/h1&#62;/
这样它会觉得，只需匹配到第一个 h1 结尾标签就完成任务了。
另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上，如果没有加上问号，它会寻找尽可能多的重复次数，加上的话，则会尽可能少重复（当然也就是“重复n次”最少）。
# 建立字串
$str = 'hihihi oops hi';
# 使用贪婪的{n,}操作符进行匹配
preg_match( '/(hi){2,}/', $str, $matches );&#160; # matches[0] 将是 'hihihi'
# 使用堕化了的 {n,}? 操作符匹配
preg_match( '/(hi){2,}?/', $str, $matches );&#160; # matches[0] 将是 'hihi'
2. 回返引用(Back referencing)

有什么用？
回返引用(Back referencing)一般被翻译成“反向引用”、“后向引用”、“向后引用”，个人觉得“回返引用”更为贴切。它是在正则表达式内部引用之前捕获到的内容的方法。例如，下面这个简单例子的目的是匹配出引号内部的内容：
# 建立匹配数组
$matches = array();
&#160;
# 建立字串
$str [...]]]></description>
			<content:encoded><![CDATA[<p>正则表达式(Regular Expression, abbr. regex) 功能强大，能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是，简单的正则表达式对于一些高级运用，功能远远不够。若要进行筛选的结构比较复杂，你可能就需要用到<strong>高级正则表达式</strong>。</p>
<p>本文为您<strong>介绍正则表达式的高级技巧</strong>。我们筛选出了八个常用的概念，并配上实例解析，每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解，请先阅读<a href="http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#introduction">这篇文章</a>，或者<a href="http://www.regexlab.com/zh/deelx/syntax.htm">这个教程</a>，或者<a href="http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F">维基条目</a>。</p>
<p>这里的正则语法适用于PHP，与Perl兼容。</p>
<h5>1. 贪婪/懒惰</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0013.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb3.jpg" width="420" border="0" /></a></p>
<p>所有能多次限定的正则运算符都是贪婪的。他们<strong>尽可能多</strong>地匹配目标字符串，也就是说匹配结果会<strong>尽可能地长</strong>。不幸的是，这种做法并不总是我们想要的。因此，我们添加“懒惰”限定符来解决问题。在各个贪婪运算符后添加“?”能让表达式只匹配<strong>尽可能短</strong>的长度。另外，修改器“U”也能惰化能多次限定的运算符。理解贪婪与懒惰的区别是运用高级正则表达式的基础。</p>
<h6>贪婪操作符</h6>
<p>操作符 * 匹配之前的表达式零次或零次以上。它是一个贪婪操作符。请看下面的例子：</p>
<pre>preg_match( '/&lt;h1&gt;.*&lt;\/h1&gt;/', '&lt;h1&gt;这是一个标题。&lt;/h1&gt;</pre>
<pre>&#160;</pre>
<pre>&lt;h1&gt;这是另一个。&lt;/h1&gt;', $matches ); </pre>
<p>句点(.)能代表除换行符外的任意字符。上面的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号(*)来匹配标签内的所有内容。匹配结果如下：</p>
<pre>&lt;h1&gt;这是一个标题。&lt;/h1&gt;&lt;h1&gt;这是另一个。&lt;/h1&gt;</pre>
<p>整个字串都被返回。* 操作符会连续匹配所有内容—— 甚至包括中间的 h1 闭合标签。因为它是贪婪的，匹配整个字串是符合其利益最大化原则。</p>
<h6>懒惰操作符</h6>
<p>把上面的式子稍作修改，加上一个问号(?)，能让表达式变懒惰：</p>
<pre>/&lt;h1&gt;.*?&lt;\/h1&gt;/</pre>
<p>这样它会觉得，只需匹配到第一个 h1 结尾标签就完成任务了。</p>
<p>另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上，如果没有加上问号，它会寻找尽可能多的重复次数，加上的话，则会尽可能少重复（当然也就是“重复n次”最少）。</p>
<pre># 建立字串</pre>
<pre>$str = 'hihihi oops hi';</pre>
<pre># 使用贪婪的{n,}操作符进行匹配</pre>
<pre>preg_match( '/(hi){2,}/', $str, $matches );&#160; # matches[0] 将是 'hihihi'</pre>
<pre># 使用堕化了的 {n,}? 操作符匹配</pre>
<pre>preg_match( '/(hi){2,}?/', $str, $matches );&#160; # matches[0] 将是 'hihi'</pre>
<h5>2. 回返引用(Back referencing)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0022.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="310" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image002-thumb2.jpg" width="320" border="0" /></a></p>
<h6>有什么用？</h6>
<p><strong>回返引用(Back referencing)</strong>一般被翻译成“反向引用”、“后向引用”、“向后引用”，个人觉得“回返引用”更为贴切。它是在正则表达式内部引用<strong>之前捕获到的内容</strong>的方法。例如，下面这个简单例子的目的是匹配出引号内部的内容：</p>
<pre># 建立匹配数组</pre>
<pre>$matches = array();</pre>
<pre>&#160;</pre>
<pre># 建立字串</pre>
<pre>$str = &quot;&quot;This is a 'string'&quot;&quot;;</pre>
<pre>&#160;</pre>
<pre># 用正则表达式捕捉内容</pre>
<pre>preg_match( &quot;/(\&quot;|').*?(\&quot;|')/&quot;, $str, $matches );</pre>
<pre>&#160;</pre>
<pre># 输出整个匹配字串</pre>
<pre>echo&#160; $matches[0];</pre>
<p>它会输出：</p>
<pre>&quot;This is a'</pre>
<p>显然，这并不是我们想要的内容。</p>
<p>这个表达式从开头的双引号开始匹配，遭遇单引号之后就错误地结束了匹配。这是因为表达式里说：(”|’)，也就是双引号(”)和单引号(’)均可。要修正这个问题，你可以用到回返引用。<strong>表达式\1,\2,…,\9</strong> 是对前面已捕获到的各个子内容的编组序号，能作为对这些编组的“指针”而被引用。在此例中，第一个被匹配的引号就由<code>\1</code>代表。</p>
<h6>如何运用？</h6>
<p>将上面的例子中，后面的闭合引号替换为1：</p>
<pre>preg_match( '/(\&quot;|').*?\1/', $str, $matches );</pre>
<p>这会正确地返回字串：</p>
<pre>&quot;This is a 'string'&quot;</pre>
<p><strong>译注思考题：</strong></p>
<p>如果是中文引号，前引号和后引号不是同一个字符，怎么办？</p>
<p>还记得PHP函数 <code>preg_replace</code> 吗？其中也有回返引用。只不过我们没有用 \1 … \9，而是用了 $1 … $9 … $n （此处任意数目均可）作为回返指针。例如，如果你想把所有的段落标签<code>&lt;p&gt;</code>都替换成文本：</p>
<pre>$text = preg_replace( '/&lt;p&gt;(.*?)&lt;/p&gt;/',</pre>
<pre>&quot;&amp;lt;p&amp;gt;$1&amp;lt;/p&amp;gt;&quot;, $html );</pre>
<p>参数$1是一个回返引用，代表段落标签<code>&lt;p&gt;</code>内部的文字，并插入到替换后的文本里。这种简便易用的表达式写法为我们提供了一个获取已匹配文字的简单方法，甚至在替换文本时也能使用。</p>
<h5>3. 已命名捕获组(Named Groups)</h5>
<p>当在一个表达式内多次用到回调引用时，很容易就把事情搞混淆，要弄清那些数字（1 … 9）都代表哪一个子内容是件很麻烦的事。回调引用的一个替代方法是使用带名字的捕获组（下文简称“有名组”）。有名组使用<code>(?P&lt;name&gt;pattern)</code>来设定，name代表组名，pattern是配合该有名组的正则结构。请看下面的例子：</p>
<pre>/(?P&lt;quote&gt;&quot;|').*?(?P=quote)/</pre>
<p>上式中，quote就是组名，<code>&quot;|'</code>是改组匹配内容的正则。后面的(?P=quote)是在调用组名为quote的有名组。这个式子的效果和上面的回调引用实例一样，只不过是用了有名组来实现。是不是更加易读易懂了？</p>
<p>有名组也能用于处理已匹配内容之数组的内部数据。赋予特定正则的组名也能作为所匹配到的内容在数组内部的索引词。</p>
<pre>preg_match( '/(?P&lt;quote&gt;&quot;|\')/', &quot;'String'&quot;, $matches );</pre>
<pre>&#160;</pre>
<pre># 下面的语句输出“'”(不包括双引号)</pre>
<pre>echo $matches[1];</pre>
<pre>&#160;</pre>
<pre># 使用组名调用，也会输出“'”</pre>
<pre>echo $matches['quote'];</pre>
<p>所以，有名组并不只是让写代码更容易，它也能用于组织代码。</p>
<h5>4. 字词边界(Word Boundaries)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0034.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image003-thumb4.jpg" width="420" border="0" /></a></p>
<p><strong>字词边界</strong>是字串里的字词字符（包括字母、数字和下划线，自然也包括汉字）和非字词字符之间的位置。其特殊之处就在于，它并不匹配某个实在的字符。它的长度是<strong>零</strong>。 <code>\b</code> 匹配所有字词边界。</p>
<p>不幸的是，字词边界一般都被忽视掉了，大部分人都没有在意他的现实意义。 例如，如果你想要匹配单词“import”：</p>
<pre>/import/</pre>
<p>注意了！正则表达式有时候很调皮的。下面的字串也能和上面的式子匹配成功：</p>
<pre>important</pre>
<p>你或许觉得，只要在import前后加上空格，不就可以匹配这个独立的单词了：</p>
<pre>/ import /</pre>
<p>那如果遇上这种情况呢：</p>
<pre>The trader voted for the import</pre>
<p>当 import 这个词在字串开头或者结尾时，修改后的表达式仍然不能用。因此，考虑各种情况是必须的：</p>
<pre>/(^import | import | import$)/i</pre>
<p>别慌，还没完呢。如果遇到标点符号了呢？就为了满足这一个单词的匹配，你的正则可能就需要这样写：</p>
<pre>/(^import(:|;|,)? | import(:|;|,)? | import(\.|\?|\!)?$)/i</pre>
<p>对于只匹配一个单词来说，这样做实在是有点大动干戈了。正因如此，字词边界才显得意义重大。要适应上述要求，以及<strong>很多其他情况变种</strong>，有了字符边界，我们所需写的代码只是：</p>
<pre>/\bimport\b/</pre>
<p>上面所有情况都得到了解决。 <code>\b</code> 的灵活性就在于，它是一个没有长度的匹配。它只匹配两个实际字符之间想象出的位置。它检查两个相邻字符是否是一个为单字，另一个为非单字。情况符合，就返回匹配。如果遇到了单词的开头或结尾， <code>\b</code> 会把它当成是非单词字符对待。由于import里面的 <code>i</code> 仍然被看成是单词字符，import 就被匹配出来了。</p>
<p>注意，与<code>\b</code>相对，我们还有<code>\B</code>，此操作符匹配两个单字或者两个非单字之间的位置。因此，如果你想匹配在某个单词内部的‘hi’，可以使用：</p>
<pre>\Bhi\B</pre>
<p>“this”、“hight”，都会返回匹配，而“hi there”则不会返回匹配。</p>
<h5>5. 最小组团(Atomic Groups)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0053.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image005" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="286" alt="clip_image005" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image005-thumb3.jpg" width="420" border="0" /></a></p>
<p><strong>最小组团</strong>是无捕捉的特殊正则表达式分组。通常用来提高正则表达式的效能，也能用于消除特定匹配。一个最小组团可以用(?&gt;pattern) 来定义，其中pattern是匹配式。</p>
<pre>/(?&gt;his|this)/</pre>
<p>当正则引擎针对最小组团进行匹配时，它会跳过组团内标记的回溯位置。以单词“smashing”为例，当用上面的正则表达式匹配时，正则引擎会先尝试在“smashing”里寻找“his”。显然，找不到任何匹配。此时，最小组团就发挥作用了：正则引擎会放弃所有回溯位置。也就是说，它不会尝试再从“smashing”里查找“this”。为什么要这样设置？因为“his”都没有返回匹配结果，包含有“his”的“this”当 然就更匹配不了了！</p>
<p>上面的例子并没有什么实用性，我们用<code>/t?his?/</code> 也能达到效果。再看看下面的例子：</p>
<pre>/\b(engineer|engrave|end)\b/</pre>
<p>如果把“engineering”拿去匹配，正则引擎会先匹配到“engineer”，但接下来就遇到了字词边界，b，所以匹配不成功。然后，正则引擎又会尝试在字串里寻找下一个匹配内容：engrave。匹配到eng的时候，后面的又对不上了，匹配失败。最后，尝试“end”，结果同样是失败。仔细观察，你会发现，一旦engineer匹配失败，并且都抵达了字词边界，“engrave”和“end”这两个词就已经不可能匹配成功了。这两个词都比 engineer短小，正则引擎不应该再多做无谓的尝试。</p>
<pre>/\b(?&gt;engineer|engrave|end)\b/</pre>
<p>上面的替代写法更能节省正则引擎的匹配时间，提高代码的工作效率。</p>
<h5>6. 递归(Recursion)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0062.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image006" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="clip_image006" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image006-thumb2.jpg" width="420" border="0" /></a></p>
<p><strong>递归(Recursion)</strong>用于匹配嵌套结构，例如括弧嵌套， (this (that))，HTML标签嵌套<code>&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;</code>。我们使用<code>(?R)</code>来代表递归过程中的子模式。下面是一个匹配嵌套括弧的例子：</p>
<pre>/\(((?&gt;[^()]+)|(?R))*\)/</pre>
<p>最外层使用了反义符的括号“<code>\(</code>”匹配嵌套结构的开端。然后是一个多选项操作符<code>( * | * )</code>，可能匹配除括号外的所有字符 “<code>(?&gt;[^()]+)</code>”，也可能是通过子模式“<code>(?R)</code>”来再次匹配整个表达式。请注意，这个操作符会尽量多地匹配所有嵌套。</p>
<p>递归的另一个实例如下：</p>
<pre>/&lt;([\w]+).*?&gt;((?&gt;[^&lt;&gt;]+)|((?R)))*&lt;\/\1&gt;/</pre>
<p>以上表达式综合运用了字符分组，贪婪操作符、回溯，以及最小化组团来匹配嵌套标签。第一个括弧内分组<code>([w]+)</code>匹配出标签名，用于接下来的应用。若找到这尖括号样式的标签，则尝试寻找标签内容的剩余部分。下一个括弧括起来的子表达式和上一个实例非常相似：要么匹配不包括尖括号的所有字符 <code>?&gt;[^&lt;&gt;]+</code>，要么递归匹配整个表达式<code>(?R)</code>。表达式最后的<code>&lt;/1&gt;</code>代表闭合标签。</p>
<h5>7. 回调(Callbacks)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0072.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image007" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="310" alt="clip_image007" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image007-thumb2.jpg" width="420" border="0" /></a></p>
<p>匹配结果中的特定内容有时可能会需要某种特别的修改。要应用多重而复杂的修改，正则表达式<strong>的回调</strong>就有了用武之地。回调是用于函数<code>preg_replace_callback</code>中的动态修改字串的方式。你可以为<code>preg_replace_callback</code>指定某个函数为参数，此函数能接收匹配结果数组为参数，并将数组修改后返回，作为替换的结果。</p>
<p>例如，我们想将某字串中的字母全部转变成大写。十分不巧，PHP没有直接转化字母大小写的正则操作符。要完成这项任务，就可以用到正则回调。首先，表达式要匹配出所有需要被大写的字母：</p>
<pre>/\b\w/</pre>
<p>上式同时使用了字词边界和字符类。光有这个式子还不够，我们还需要一个回调函数：</p>
<pre>function upper_case( $matches ) {</pre>
<pre>return strtoupper( $matches[0] );</pre>
<pre>}</pre>
<p>函数<code>upper_case</code>接收匹配结果数组，并将整个匹配结果转化成大写。 在此例中，<code>$matches[0]</code>代表需要被大写化的字母。然后，我们再利用<code>preg_replace_callback</code>实现回调：</p>
<pre>preg_replace_callback( '/\b\w/', &quot;upper_case&quot;, $str );</pre>
<p>一个简单的回调即有这般强大的力量。</p>
<h5>8. 注释(Commenting)</h5>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image0082.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image008" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="clip_image008" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image008-thumb2.jpg" width="420" border="0" /></a></p>
<p><strong>注释</strong>不用来匹配字串，但确实是正则表达式中最重要的部分。当正则越写越深入，越写越复杂，要推译出究竟什么东西被匹配就会变得越来越困难。在正则表达式中间加上注释，是最小化将来的迷糊和困惑的最佳方式。</p>
<p>要在正则表达式内部加上注释，使用<code>(?#comment)</code>格式。把“comment”替换成你的注释语句：</p>
<pre>/(?#数字)\d/</pre>
<p>如果你打算把代码公之于众，为正则表达式加上注释就显得尤为重要。这样别人才能更容易看懂和修改你的代码。和其他场合的注释一样，这样做也能为你重访自己以前写的程序时提供方便。</p>
<p>考虑使用“x”或“(?x)”修改器来格式化注释。这个修改器让正则引擎忽略表达式参数之间的空格。“有用的”空格仍然能够通过<code>[ ]</code>或<code>\ </code>（反义符加空格）来匹配。</p>
<pre>/</pre>
<pre>\d&#160;&#160;&#160; #digit</pre>
<pre>[ ]&#160;&#160; #space</pre>
<pre>\w+&#160;&#160; #word</pre>
<pre>/x</pre>
<p>上面的代码与下面的式子作用一样：</p>
<pre>/\d(?#digit)[ ](?#space)\w+(?#word)/</pre>
<p>请时刻注意代码的可读性。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/benhuoer/44086" href="http://www.yeeyan.com/articles/view/benhuoer/44086">http://www.yeeyan.com/articles/view/benhuoer/44086</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/755/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS网页布局ID和Class类的命名介绍</title>
		<link>http://blog.acmind.com/archives/400</link>
		<comments>http://blog.acmind.com/archives/400#comments</comments>
		<pubDate>Wed, 27 May 2009 08:30:28 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[布局]]></category>
		<category><![CDATA[命名]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[id]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=400</guid>
		<description><![CDATA[ 关于CSS网页布局id与class命名或许成为大家比较头疼的问题，在webjx.com中早已有相关的介绍，但还是不能满足大家对知识的渴求。     
 一、用class_name方式写类名。     
 以前喜欢用class-name写，不过好像两样也没什么差别。但我比较反对用className写类名，因为始终对浏览器大小写敏感的问题抱有怀疑态度。但是id我会写成驼峰式，理由见下一条。     
 二、样式都用class而不用id。     
 有三个理由。      1，id不可以重复，所以用class的话，可以肆无忌惮的用无数次。      2，id的优先级太高，若是写了一个#page_content a {color:#f60} ，那你完蛋了，里面要改链接颜色，都必须加上#page_content才能越过这个优先级。      3，id专门留给JS用，这样才符合表现与行为分离的原则。所以id我用驼峰式，也是为了体现这一点。     
 三、margin和padding，尽量省略最后一个值。   [...]]]></description>
			<content:encoded><![CDATA[<p> 关于<a href="http://webdesign.chinaitlab.com/List_1367.html">CSS</a>网页布局id与class命名或许成为大家比较头疼的问题，在webjx.com中早已有相关的介绍，但还是不能满足大家对知识的渴求。     </p>
<p> 一、用class_name方式写类名。     </p>
<p> 以前喜欢用class-name写，不过好像两样也没什么差别。但我比较反对用className写类名，因为始终对浏览器大小写敏感的问题抱有怀疑态度。但是id我会写成驼峰式，理由见下一条。     </p>
<p> 二、样式都用class而不用id。     </p>
<p> 有三个理由。     <br /> 1，id不可以重复，所以用class的话，可以肆无忌惮的用无数次。     <br /> 2，id的优先级太高，若是写了一个#page_content a {color:#f60} ，那你完蛋了，里面要改链接颜色，都必须加上#page_content才能越过这个优先级。     <br /> 3，id专门留给JS用，这样才符合表现与行为分离的原则。所以id我用驼峰式，也是为了体现这一点。     </p>
<p> 三、margin和padding，尽量省略最后一个值。     </p>
<p> 比如margin: 20px 10px 5px 10px; ，左右值是一样的，就应该省略掉最后一个值，写成margin: 20px 10px 5px; 这样到时候要改左右间距，改一个就好，免得改漏了。其实这个问题虽然很细小，但是可以看得出对margin四个值省略规则的熟练程度。     </p>
<p> 四、按标准写css，再针对特定浏览器作hack。     </p>
<p> 比如，通常我们会遇到如下的写法：     <br /> .side_col_webjx {     <br /> float:left;     <br /> display: inline;     <br /> margin-left: 20px;     <br /> }     <br /> 而我的写法会是：     <br /> .side_col_webjx {     <br /> float: left;     <br /> margin-left: 20px;     <br /> }     <br /> * .side_col_webjx {     <br /> _display:inline; /*hacked for IE 6*/     <br /> }     <br /> 看明白了么？不应该把hack混在一起，也不应该用一种侥幸的心态，觉得float:left与display:inline写在一起没事。嗯，它们俩确实没事儿，但是其他的hack就不一定了。而且这里写display:inline纯粹就是为了解决IE6的bug，所以前面加上下划线，以明确的表达你的目的。     <br /> 另外不要以为凡是hack都是为IE准备的。其实有些hack是针对其他浏览器的，比如FF。这就要求你对css标准的熟练掌握，能够自信的判断哪些渲染是遵守标准，哪些违反标准的。     <br /> 此外，我喜欢在hack前面加上星号，其实这纯粹是个人习惯了。可能过段时间我就不这么用了，呵呵。     </p>
<p> 五、记得加空格。     </p>
<p> .class_name { property: value; } 。我个人觉得合理的空格是优秀代码的一个指标。按英文的习惯，标点后面都应该带空格（如果你写This is a pen.That’s a pencil.句点后面不加空格， word里面会有错误提示）。所以既然css是外国人发明的，应该按他们的格式来写。类似的，在JS里var a = b + c;里面的空格也应该都要加。     </p>
<p> 六、适当的层叠（Cascading)或缩进以定义css的“作用域”。     </p>
<p> 啥叫“css的作用域”？其实并不是所有的样式都在所有的地方使用。有的样式只用在某一块里面，比如“导航栏”里的“搜索框”，可能应该写成：     <br /> .nav .search {}     <br /> 而有时候用层叠会增加代码优先级，所以也可以用缩进来“象征性的”体现作用域。像这样：     <br /> .login_box {}     <br /> .forgot_pwd{}     <br /> 缩进，是为了表示它们对应的标签具有父子关系。但这样只能起一个提醒的作用。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/400/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web标准及验证</title>
		<link>http://blog.acmind.com/archives/347</link>
		<comments>http://blog.acmind.com/archives/347#comments</comments>
		<pubDate>Wed, 27 May 2009 07:34:03 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[验证]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[标准]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=347</guid>
		<description><![CDATA[关于HTML，还有什么要了解的？
你可以以多种不同的方式来编写HTML；同时，浏览器也可以以多种不同的方式来理解HTML。你可以认为HTML有很多种方言。这就是为什么某些网站会在不同的浏览器上显示出不同效果的原因。
为了解决这一问题，HTML发明人Tim Berners-Lee先生创办了万维网联盟（World Wide Web Consortium，W3C）来致力于制订通用的HTML标准。但这是一条漫长而艰难的路程。
过去，在浏览器都要收费的年代里，Netscape曾是占据统治地位的浏览器。那时的HTML标准是2.0和3.2。但是，作为市场份额达90%以上的Netscape，它不必、同时也没有太在意通用标准。相反地，Netscape创造了自己特有的元素，这些元素在其它浏览器上将不起作用。
在很长一段时间内，微软几乎完全忽略了因特网。但不久之后，微软开始与Netscape竞争，并推出了IE浏览器。尽管IE浏览器（Internet Explorer）的早期版本在支持HTML标准方面比不上Netscape，但由于它是免费提供的（免费总是很受欢迎的），所以IE很快便成为最流行的浏览器。
微软从IE的第4版和第5版开始致力于对W3C HTML标准作更多支持。而Netscape则没有设法开发新版浏览器，只是继续供应已经过时的第4版浏览器。
其余的事，大家都知道，就不必提了。今天，HMTL标准已经发展到4.01版和XHMTL。现在，占据市场90%以上的份额的是IE浏览器了。IE 也有自己特有的元素，但它也支持W3C HTML标准。同样地，其它的浏览器，比如Mozilla、Opera和Netscape等，都是既有自己特有的元素，也同时支持W3C HTML标准。
因此，只要你遵循W3C标准来编写HTML，你的网页将永远能在所有浏览器上显示出来。幸运的是，你在本教程学到的是XHTML，它是最新的、更严格、更纯正的HTML版本。
酷 ！如何向别人透露HTML的版本信息？
HTML有很多不同种类，所以你需要告诉浏览器，你的HTML使用的是哪种“方言”（比如XHTML）。具体做法是采用文档类型声明。文档类型声明应写在HTML文档的开头部分：
例1：     
&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34;
    &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;

&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; lang=&#34;en&#34;&#62;

&#60;head&#62;
&#60;title&#62;网页标题&#60;/title&#62;
&#60;/head&#62;

&#60;body&#62;
&#60;p&#62;一些文字&#60;/p&#62;
&#60;/body&#62;

&#60;/html&#62;

除了要给出文档类型声明以外（上例中第一行，它告诉浏览器这个文档是XHMTL），还需要在html标签中加入一些信息，也就是添加两个属性xmlns和lang。
xmlns是“XML-Name-Space”（XML名称空间）的缩写，其值固定为http://www.w3.org/1999/xhtml。关于名称空间，你只需了解这么多。但如果你希望作更多了解的话，可以登录W3C网站阅读有关名称空间（namespaces）的内容。
lang属性用于指定当前文档所使用的语言，其值采用ISO 639标准中列出的世界各国语言代码。上例中，我们指定文档采用的语言为英语（对应的属性值为“en”）。
通过HTML文档头部的文档类型声明，浏览器可以知道如何读取和显示你的HTML。今后，可以使用上例作为模板来编写你的HTML文档。 
此外，文档类型声明在验证网页时也很有用。
验证？ 为什么要验证文档？如何验证呢？
你可以用W3C的免费验证器（validator）来检查你的HTML文档是否符合你在文档类型声明中所指定的类型。
为了测试如何验证文档，请编写一个网页并将它上传到因特网上，现在，打开网页validator.w3.org，在网页里输入你网页的网址（URL），然后验证它。如果你的HTML没有错误，将显示成功信息。否则，你将会得到错误报告，它会详细告诉你出错的位置和原因。你可以在网页里故意制造一些错误，看看会返回什么样的结果。
这个验证器不仅仅对找错有帮助。有些浏览器会尽量修复HTML中的错误，按照它们推测的正确结果去显示网页。使用这样的浏览器，你会忽视网页中存在的错误。而该网页在其它的浏览器上看到的效果可能会截然不同，甚至根本无法显示。所以，可以用验证器帮你找到可能被你忽视的错误。
请始终坚持验证你的网页，以确保它们能正确地显示。
]]></description>
			<content:encoded><![CDATA[<h4>关于HTML，还有什么要了解的？</h4>
<p>你可以以多种不同的方式来编写HTML；同时，浏览器也可以以多种不同的方式来理解HTML。你可以认为<strong>HTML有很多种方言</strong>。这就是为什么某些网站会在不同的浏览器上显示出不同效果的原因。</p>
<p><strong>为了解决这一问题，HTML发明人Tim Berners-Lee先生创办了<a href="http://www.w3.org">万维网联盟（World Wide Web Consortium，W3C）</a>来致力于制订通用的HTML标准</strong>。但这是一条漫长而艰难的路程。</p>
<p>过去，在浏览器都要收费的年代里，Netscape曾是占据统治地位的浏览器。那时的HTML标准是2.0和3.2。但是，作为市场份额达90%以上的Netscape，它不必、同时也没有太在意通用标准。相反地，Netscape创造了自己特有的元素，这些元素在其它浏览器上将不起作用。</p>
<p>在很长一段时间内，微软几乎完全忽略了因特网。但不久之后，微软开始与Netscape竞争，并推出了IE浏览器。尽管IE浏览器（Internet Explorer）的早期版本在支持HTML标准方面比不上Netscape，但由于它是免费提供的（免费总是很受欢迎的），所以IE很快便成为最流行的浏览器。</p>
<p>微软从IE的第4版和第5版开始致力于对W3C HTML标准作更多支持。而Netscape则没有设法开发新版浏览器，只是继续供应已经过时的第4版浏览器。</p>
<p>其余的事，大家都知道，就不必提了。今天，HMTL标准已经发展到4.01版和XHMTL。现在，占据市场90%以上的份额的是IE浏览器了。IE 也有自己特有的元素，但它也支持W3C HTML标准。同样地，其它的浏览器，比如Mozilla、Opera和Netscape等，都是既有自己特有的元素，也同时支持W3C HTML标准。</p>
<p><strong>因此，只要你遵循W3C标准来编写HTML，你的网页将永远能在所有浏览器上显示出来</strong>。幸运的是，<strong>你在本教程学到的是XHTML，它是最新的、更严格、更纯正的HTML版本</strong>。</p>
<h4>酷 ！如何向别人透露HTML的版本信息？</h4>
<p>HTML有很多不同种类，所以你需要告诉浏览器，你的HTML使用的是哪种“方言”（比如XHTML）。具体做法是采用文档类型声明。文档类型声明应写在HTML文档的开头部分：</p>
<p><strong>例1：</strong>     </p>
<pre class="mycode">&lt;!DOCTYPE html PUBLIC <span style="color: #a31515">&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span>&gt;

&lt;html xmlns=<span style="color: #a31515">&quot;http://www.w3.org/1999/xhtml&quot; </span>lang=<span style="color: #a31515">&quot;en&quot;</span>&gt;

&lt;head&gt;
&lt;title&gt;网页标题&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;p&gt;一些文字&lt;/p&gt;
&lt;/body&gt;

&lt;/html&gt;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>除了要给出文档类型声明以外（上例中第一行，它告诉浏览器这个文档是XHMTL），还需要在html标签中加入一些信息，也就是添加两个属性<code>xmlns</code>和<code>lang</code>。</p>
<p><code>xmlns</code>是“XML-Name-Space”（XML名称空间）的缩写，其值固定为<strong>http://www.w3.org/1999/xhtml</strong>。关于名称空间，你只需了解这么多。但如果你希望作更多了解的话，可以登录<a href="http://www.w3.org/TR/1999/REC-xml-names-19990114/">W3C网站</a>阅读有关名称空间（namespaces）的内容。</p>
<p><code>lang</code>属性用于指定当前文档所使用的语言，其值采用<a href="http://www.w3.org/WAI/ER/IG/ert/iso639.htm#2letter">ISO 639标准</a>中列出的世界各国语言代码。上例中，我们指定文档采用的语言为英语（对应的属性值为“en”）。</p>
<p>通过HTML文档头部的文档类型声明，浏览器可以知道如何读取和显示你的HTML。今后，可以使用上例作为模板来编写你的HTML文档。 </p>
<p>此外，文档类型声明在验证网页时也很有用。</p>
<h4>验证？ 为什么要验证文档？如何验证呢？</h4>
<p>你可以用<a href="http://validator.w3.org">W3C的免费验证器（validator）</a>来检查你的HTML文档是否符合你在文档类型声明中所指定的类型。</p>
<p>为了测试如何验证文档，请编写一个网页并将它上传到因特网上，现在，打开网页<a href="http://validator.w3.org">validator.w3.org</a>，在网页里输入你网页的网址（URL），然后验证它。如果你的HTML没有错误，将显示成功信息。否则，你将会得到错误报告，它会详细告诉你出错的位置和原因。你可以在网页里故意制造一些错误，看看会返回什么样的结果。</p>
<p>这个验证器不仅仅对找错有帮助。有些浏览器会尽量修复HTML中的错误，按照它们推测的正确结果去显示网页。使用这样的浏览器，你会忽视网页中存在的错误。而该网页在其它的浏览器上看到的效果可能会截然不同，甚至根本无法显示。所以，可以用验证器帮你找到可能被你忽视的错误。</p>
<p>请始终坚持验证你的网页，以确保它们能正确地显示。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/347/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何判断Javascript脚本加载完成</title>
		<link>http://blog.acmind.com/archives/346</link>
		<comments>http://blog.acmind.com/archives/346#comments</comments>
		<pubDate>Wed, 27 May 2009 07:28:24 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[加载]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=346</guid>
		<description><![CDATA[我们可以对加载的 JS 对象使用 onload 来判断（js.onload），此方法 Firefox2、Firefox3、Safari3.1+、Opera9.6+ 浏览器都能很好的支持，但 IE6、IE7 却不支持。曲线救国 —— IE6、IE7 我们可以使用 js.onreadystatechange 来跟踪每个状态变化的情况（一般为 loading 、loaded、interactive、complete），当返回状态为 loaded 或 complete 时，则表示加载完成，返回回调函数。
对于 readyState 状态需要一个补充说明：

在 interactive 状态下，用户可以参与互动。 
Opera 其实也支持 js.onreadystatechange，但他的状态和 IE 的有很大差别。 

具体实现代码如下： 
function include_js(file) {
    var _doc = document.getElementsByTagName('head')[0];
    var js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    [...]]]></description>
			<content:encoded><![CDATA[<p>我们可以对加载的 JS 对象使用 onload 来判断（js.onload），此方法 Firefox2、Firefox3、Safari3.1+、Opera9.6+ 浏览器都能很好的支持，但 IE6、IE7 却不支持。曲线救国 —— IE6、IE7 我们可以使用 js.onreadystatechange 来跟踪每个状态变化的情况（一般为 loading 、loaded、interactive、complete），当返回状态为 loaded 或 complete 时，则表示加载完成，返回回调函数。</p>
<p>对于 readyState 状态需要一个补充说明：</p>
<ol>
<li>在 interactive 状态下，用户可以参与互动。 </li>
<li>Opera 其实也支持 js.onreadystatechange，但他的状态和 IE 的有很大差别。 </li>
</ol>
<p>具体实现代码如下： </p>
<pre class="mycode">function include_js(file) {
    var _doc = document.getElementsByTagName(<span style="color: #a31515">'head'</span>)[0];
    var js = document.createElement(<span style="color: #a31515">'script'</span>);
    js.setAttribute(<span style="color: #a31515">'type'</span>, <span style="color: #a31515">'text/javascript'</span>);
    js.setAttribute(<span style="color: #a31515">'src'</span>, file);
    _doc.appendChild(js);

    <span style="color: blue">if </span>(!<span style="color: green">/*@cc_on!@*/</span>0) { <span style="color: green">//if not IE
        //Firefox2、Firefox3、Safari3.1+、Opera9.6+ support js.onload
        </span>js.onload = function () {
            alert(<span style="color: #a31515">'Firefox2、Firefox3、Safari3.1+、Opera9.6+ support js.onload'</span>);
        }
    } <span style="color: blue">else </span>{
        <span style="color: green">//IE6、IE7 support js.onreadystatechange
        </span>js.onreadystatechange = function () {
            <span style="color: blue">if </span>(js.readyState == <span style="color: #a31515">'loaded' </span>|| js.readyState == <span style="color: #a31515">'complete'</span>) {
                alert(<span style="color: #a31515">'IE6、IE7 support js.onreadystatechange'</span>);
            }
        }
    }

    <span style="color: blue">return false</span>;
}

<span style="color: green">//execution function
</span>include_js(<span style="color: #a31515">'http://www.planabc.net/wp-includes/js/jquery/jquery.js'</span>);</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/346/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用XML的五种场合</title>
		<link>http://blog.acmind.com/archives/345</link>
		<comments>http://blog.acmind.com/archives/345#comments</comments>
		<pubDate>Wed, 27 May 2009 07:19:24 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[使用]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=345</guid>
		<description><![CDATA[1、数据交换   用XML在应用程序和公司之间作数据交换已不是什么秘密了，毫无疑问应被列为第一位。    那么为什么XML在这个领域里的地位这么重要呢？原因就是XML使用元素和属性来描述数    据。在数据传送过程中，XML始终保留了诸如父/子关系这样的数据结构。几个应用程序    可以共享和解析同一个XML文件，不必使用传统的字符串解析或拆解过程。    相反，普通文件不对每个数据段做描述(除了在头文件中)，也不保留数据关系结构。使    用XML做数据交换可以使应用程序更具有弹性，因为可以用位置(与普通文件一样)或用元    素名(从数据库)来存取XML数据。    
2、Web服务    Web服务是最令人激动的革命之一，它让使用不同系统和不同编程语言的人们能够相互交    流和分享数据。其基础在于Web服务器用XML在系统之间交换数据。交换数据通常用XML标    记，能使协议取得规范一致，比如在简单对象处理协议(Simple Object Access Protoc     ol, SOAP)平台上。   [...]]]></description>
			<content:encoded><![CDATA[<p>1、数据交换   <br />用XML在应用程序和公司之间作数据交换已不是什么秘密了，毫无疑问应被列为第一位。    <br />那么为什么XML在这个领域里的地位这么重要呢？原因就是XML使用元素和属性来描述数    <br />据。在数据传送过程中，XML始终保留了诸如父/子关系这样的数据结构。几个应用程序    <br />可以共享和解析同一个XML文件，不必使用传统的字符串解析或拆解过程。    <br />相反，普通文件不对每个数据段做描述(除了在头文件中)，也不保留数据关系结构。使    <br />用XML做数据交换可以使应用程序更具有弹性，因为可以用位置(与普通文件一样)或用元    <br />素名(从数据库)来存取XML数据。    </p>
<p>2、Web服务    <br />Web服务是最令人激动的革命之一，它让使用不同系统和不同编程语言的人们能够相互交    <br />流和分享数据。其基础在于Web服务器用XML在系统之间交换数据。交换数据通常用XML标    <br />记，能使协议取得规范一致，比如在简单对象处理协议(Simple Object Access Protoc     <br />ol, SOAP)平台上。    <br />SOAP可以在用不同编程语言构造的对象之间传递消息。这意味着一个C#对象能够与一个    <br />Java对象进行通讯。这种通讯甚至可以发生在运行于不同操作系统上的对象之间。DCOM     <br />, CORBA或Java RMI只能在紧密耦合的对象之间传递消息，SOAP则可在松耦合对象之间传    <br />递消息。    </p>
<p>3、内容管理    <br />XML只用元素和属性来描述数据，而不提供数据的显示方法。这样，XML就提供了一个优    <br />秀的方法来标记独立于平台和语言的内容。    <br />使用象XSLT这样的语言能够轻易地将XML文件转换成各种格式文件，比如HTML, WML, PD     <br />F, flat file, EDI, 等等。XML具有的能够运行于不同系统平台之间和转换成不同格式    <br />目标文件的能力使得它成为内容管理应用系统中的优秀选择。    </p>
<p>4、Web集成    <br />现在有越来越多的设备也支持XML了。使得Web开发商可以在个人电子助理和浏览器之间    <br />用XML来传递数据。    <br />为什么将XML文本直接送进这样的设备去呢？这样作的目的是让用户更多地自己掌握数据    <br />显示方式，更能体验到实践的快乐。常规的客户/服务(C/S)方式为了获得数据排序或更    <br />换显示格式，必须向服务器发出申请；而XML则可以直接处理数据，不必经过向服务器申    <br />请查询-返回结果这样的双向“旅程”，同时在设备也不需要配制数据库。    <br />甚至还可以对设备上的XML文件进行修改并将结果返回给服务器。想像一下，一台具有互    <br />联网功能并支持XML的电冰箱将会给市场带来多么大的冲击吧。你从此不必早起去取牛奶    <br />了！    </p>
<p>5、配制    <br />许多应用都将配制数据存储在各种文件里，比如.INI文件。虽然这样的文件格式已经使    <br />用多年并一直很好用，但是XML还是以更为优秀的方式为应用程序标记配制数据。使用.     <br />NET里的类，如XmlDocument和XmlTextReader，将配制数据标记为XML格式，能使其更具    <br />可读性，并能方便地集成到应用系统中去。使用XML配制文件的应用程序能够方便地处理    <br />所需数据，不用象其他应用那样要经过重新编译才能修改和维护应用系统。    <br />如前所述，这里提到的五种使用XML的途径不包括全部场合。</p>
<p>&#160;</p>
<p>摘自：<a title="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=54" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=54">http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=54</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/345/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#类和接口、虚方法和抽象方法及值类型和引用类型的区别</title>
		<link>http://blog.acmind.com/archives/339</link>
		<comments>http://blog.acmind.com/archives/339#comments</comments>
		<pubDate>Wed, 27 May 2009 04:09:33 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[引用]]></category>
		<category><![CDATA[值]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[虚方法]]></category>
		<category><![CDATA[抽象]]></category>
		<category><![CDATA[接口]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=339</guid>
		<description><![CDATA[1.C#类和接口的区别   解答：    接口是负责功能的定义，项目中通过接口来规范类，操作类以及抽象类的概念！    而类是负责功能的具体实现！    在类中也有抽象类的定义，抽象类与接口的区别在于：    抽象类是一个不完全的类，类里面有抽象的方法，属性，也可以有具体的方法和属性，需要进一步的专业化。    但接口是一个行为的规范，里面的所有东西都是抽象的！    一个类只可以继承一个基类也就是父类，但可以实现多个接口    PS： 接口除了规范一个行为之外，在具体项目中的实际作用也是十分重要的，在面向对象的设计原则以及设计模式的使用中，无不体现作为一个接口的使用好处，最直接 的就是设计原则中OCP（开放封闭原则），我们使用接口，而不需要关心他的具体实现，具体实现的细节变化也无关客户端（使用接口的类）的使用，对与扩展是 开放的，我们可以另写一个接口的实现来扩展当前程序，而不影响上层的使用，但对修改是封闭的，即我们不能够再去修改接口的定义，当然这个“不能够”是指在 规范原则上不应该这么做！
2.抽象类和接口的区别    解答：    抽象类（abstract class）可以包含功能定义和实现，接口（interface）只能包含功能定义    抽象类是从一系列相关对象中抽象出来的概念， 因此反映的是事物的内部共性；接口是为了满足外部调用而定义的一个功能约定， 因此反映的是事物的外部特性    分析对象，提炼内部共性形成抽象类，用以表示对象本质，即“是什么” [...]]]></description>
			<content:encoded><![CDATA[<p>1.C#类和接口的区别   <br />解答：    <br />接口是负责功能的定义，项目中通过接口来规范类，操作类以及抽象类的概念！    <br />而类是负责功能的具体实现！    <br />在类中也有抽象类的定义，抽象类与接口的区别在于：    <br />抽象类是一个不完全的类，类里面有抽象的方法，属性，也可以有具体的方法和属性，需要进一步的专业化。    <br />但接口是一个行为的规范，里面的所有东西都是抽象的！    <br />一个类只可以继承一个基类也就是父类，但可以实现多个接口    <br />PS： 接口除了规范一个行为之外，在具体项目中的实际作用也是十分重要的，在面向对象的设计原则以及设计模式的使用中，无不体现作为一个接口的使用好处，最直接 的就是设计原则中OCP（开放封闭原则），我们使用接口，而不需要关心他的具体实现，具体实现的细节变化也无关客户端（使用接口的类）的使用，对与扩展是 开放的，我们可以另写一个接口的实现来扩展当前程序，而不影响上层的使用，但对修改是封闭的，即我们不能够再去修改接口的定义，当然这个“不能够”是指在 规范原则上不应该这么做！</p>
<p>2.抽象类和接口的区别    <br />解答：    <br />抽象类（abstract class）可以包含功能定义和实现，接口（interface）只能包含功能定义    <br />抽象类是从一系列相关对象中抽象出来的概念， 因此反映的是事物的内部共性；接口是为了满足外部调用而定义的一个功能约定， 因此反映的是事物的外部特性    <br />分析对象，提炼内部共性形成抽象类，用以表示对象本质，即“是什么”     <br />为外部提供调用或功能需要扩充时优先使用接口</p>
<p>3. C#语言中，值类型和引用类型有何不同     <br />解答：    <br />值类型和引用类型的区别在于，值类型的变量直接存放实际的数据，而引用类型的变量存放的则是数据的地址，即对象的引用。    <br />值类型变量直接把变量的值保存在堆栈中，引用类型的变量把实际数据的地址保存在堆栈中，而实际数据则保存在堆中。注意，堆和堆栈是两个不同的概念，在内存中的存储位置也不相同，堆一般用于存储可变长度的数据，如字符串类型;而堆栈则用于存储固定长度的数据，如整型类型的数据int(每个int变量占用四 个字节)。由数据存储的位置可以得知，当把一个值变量赋给另一个值变量时，会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量，则会在 堆栈中保存对同一个堆位置的两个引用，即在堆栈中保存的是同一个堆的地址。在进行数据操作时，对于值类型，由于每个变量都有自己的值，因此对一个变量的操 作不会影响到其它变量;对于引用类型的变量，对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作，如果两个引用类型的变量引用同一个对象，实际 含义就是它们在堆栈中保存的堆的地址相同，因此对一个变量的操作就会影响到引用同一个对象的另一个变量。</p>
<p>4.结构和类的区别    <br />解答：    <br />1) 结构是一个值类型，保存在栈上，而类是一个引用类型，保存在受管制的堆上。    <br />2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。    <br />3) 一般用结构存储多种类型的数据，当创建一个很多类或对象共用的小型对象时，使用结构效率更高。</p>
<p>4.抽象方法和虚方法的区别    <br />解答：    <br />抽象方法    <br />使用abstract关键字 public abstract bool Withdraw(…);     <br />抽象方法是必须被派生类覆写的方法。    <br />抽象方法是可以看成是没有实现体的虚方法    <br />如果类中包含抽象方法，那么类就必须定义为抽象类，不论是否还包含其它一般方法    <br />虚方法    <br />使用virtual关键字 public virtual bool Withdraw(…);     <br />调用虚方法，运行时将确定调用对象是什么类的实例，并调用适当的覆写的方法。    <br />虚方法可以有实现体    <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;     <br />虚拟方法和抽象方法有什么区别？    <br />抽象方法只有声明没有实现，需要在子类中实现；虚拟方法有声明和实现，并且可以在子类中覆盖，也可以不覆盖使用父类的默认实现    <br />虚拟方法有实现代码    <br />抽象方法则没有，    <br />并且抽象类不能被实例化，只能实例化实现了全部抽象方法的派生类    <br />抽象方法是虚拟方法的一种    <br />抽象方法没有实现，它的存在只是为派生类统一接口；派生类应该实现这个方法    <br />如果编写一个基类，它永远不会被实现，那么就应该将这个类中的一个或多个方法定义为    <br />抽象方法。    <br />抽象方法只有声明没有实现，需要在子类中实现；虚拟方法有声明和实现，并且可以在子类中覆盖，也可以不覆盖使用父类的默认实现    <br />补充一点    <br />只允许在抽象类中使用抽象方法声明    <br />学习    <br />其实大家首先要搞清楚，虚方法与多态性关系密切，虚方法允许派生类完全或部分重写该类的方法，需写方法体。抽象类中可以包含抽象方法与一般的方法，抽象类不 可以new,抽象方法只是一个定义，没有方法体，也就是没有{}，也不要在里面写内容。它们两个相像的一点是都用override重写</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.zxbc.cn/html/20090419/70325.html" href="http://www.zxbc.cn/html/20090419/70325.html">http://www.zxbc.cn/html/20090419/70325.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/339/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008和ASP.NET 3.5使用之初体验</title>
		<link>http://blog.acmind.com/archives/338</link>
		<comments>http://blog.acmind.com/archives/338#comments</comments>
		<pubDate>Wed, 27 May 2009 03:50:37 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[辅助工具]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=338</guid>
		<description><![CDATA[一、 前言
当大家还在使用 Visual Studio 2005 的时候，微软的下一代开发工具——Visual Studio 2008正悄悄地在酝酿中，未来微软的新开发工具将使得开发应用程序更容易，对VB、C# 语言提供了更多的支持，开发人员未来将可以透过新的开发工具来进行 LINQ (Language Integrated Query)、ASP.NET AJAX、WPF、SilverLight (先前称为 WPF/E)，Office 2007等新技术的开发，甚至于将只在 Visual Studio 2005的Team Suite 版本中才有的 Test 工具整合到 Visual Studio 2008中。
对于坚持学习的技术人员而言，能尽快一睹Visual Studio 2008的风采无疑是很兴奋的。笔者下载了Visual Studio 2008 Beta1，并进行了初步的试用。给人的感觉是，Visual Studio 2008的整体风格与框架与以前很相似，感觉很熟悉。当然，微软在.NET Framework及Visual Studio所下的功夫不可谓不大啊，可以感觉到其更新力度之大。
作为软件开发人员，一定会对下一代Visual Studio 2008的外壳感兴趣。一个好的开发环境可以让开发工作事半功倍。可以发现新版VS的开发界面分为两个版本：整合模式和孤立模式，分别对基于语言的开发和基于特别工具的开发作了优化。并将Iron Python引入了Visual Studio，下图的界面将在Visual Studio 2008的Beta2版本中出现。   
Visual Studio 2008将包含对LINQ（Language-Integrated Query）的支持，通过把查询的概念变成一流的编程概念，LINQ将使得.NET中的数据访问面貌一新。Visual Studio 2008包含一个对象/关系的映射器，允许开发人员为关系数据创建数据模型，然后开发人员可以在VB和C#中编写丰富的LINQ查询来获取数据，绑定这些数据，以及更新这些数据。现在VS对所有的LINQ查询以及结果值提供完整的Intellisense支持。
笔者认为，除了那些框架和工具类的精彩新特性外，开发人员(包括所有的.NET应用类型的开发人员)会非常喜爱Visual Studio 2008的一件事情是，VB和C#将包含一些新语言特性和改进。这些语言改动将以既微妙又深刻的方式改进我们的开发体验，势将改进效率，减小我们需要键入的代码量。
二、Visual Studio 2008

（1） 微软的擦边球——多定向技术

对Visual [...]]]></description>
			<content:encoded><![CDATA[<p><b>一、</b> <b>前言</b></p>
<p>当大家还在使用 Visual Studio 2005 的时候，微软的下一代开发工具——Visual Studio 2008正悄悄地在酝酿中，未来微软的新开发工具将使得开发应用程序更容易，对VB、C# 语言提供了更多的支持，开发人员未来将可以透过新的开发工具来进行 LINQ (Language Integrated Query)、ASP.NET AJAX、WPF、SilverLight (先前称为 WPF/E)，Office 2007等新技术的开发，甚至于将只在 Visual Studio 2005的Team Suite 版本中才有的 Test 工具整合到 Visual Studio 2008中。</p>
<p>对于坚持学习的技术人员而言，能尽快一睹Visual Studio 2008的风采无疑是很兴奋的。笔者下载了Visual Studio 2008 Beta1，并进行了初步的试用。给人的感觉是，Visual Studio 2008的整体风格与框架与以前很相似，感觉很熟悉。当然，微软在.NET Framework及Visual Studio所下的功夫不可谓不大啊，可以感觉到其更新力度之大。</p>
<p>作为软件开发人员，一定会对下一代Visual Studio 2008的外壳感兴趣。一个好的开发环境可以让开发工作事半功倍。可以发现新版VS的开发界面分为两个版本：整合模式和孤立模式，分别对基于语言的开发和基于特别工具的开发作了优化。并将Iron Python引入了Visual Studio，下图的界面将在Visual Studio 2008的Beta2版本中出现。   <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image0011.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="458" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image001-thumb1.jpg" width="545" border="0" /></a></p>
<p>Visual Studio 2008将包含对LINQ（Language-Integrated Query）的支持，通过把查询的概念变成一流的编程概念，LINQ将使得.NET中的数据访问面貌一新。Visual Studio 2008包含一个对象/关系的映射器，允许开发人员为关系数据创建数据模型，然后开发人员可以在VB和C#中编写丰富的LINQ查询来获取数据，绑定这些数据，以及更新这些数据。现在VS对所有的LINQ查询以及结果值提供完整的Intellisense支持。</p>
<p>笔者认为，除了那些框架和工具类的精彩新特性外，开发人员(包括所有的.NET应用类型的开发人员)会非常喜爱Visual Studio 2008的一件事情是，VB和C#将包含一些新语言特性和改进。这些语言改动将以既微妙又深刻的方式改进我们的开发体验，势将改进效率，减小我们需要键入的代码量。</p>
<p>二、<b>Visual Studio 2008</b></p>
<p><b></b></p>
<p><b>（1）</b> <b>微软的擦边球——多定向技术</b></p>
<p><b></b></p>
<p>对Visual Studio以前的版本而言，其中一个最大的明显不足之处在于每一个VS版本都要绑定一个特定版本的CLR。比如，使用Visual Studio 2005时，开发人员就不可能创建除了.NET 2.0应用以外的其他应用程序。在Visual Studio 2008里，这一问题会随着一个微软称之为多定向（Multi-targeting）的技术出现而得到部分解决。</p>
<p>Visual Studio 2008将是第一个允许开发人员针对多个.NET Framework版本开发的Visual Studio版本。这意味着开发人员可以打开或创建一个项目，明确地指定.NET Framework 2.0或者3.0或者3.5版本，Visual Studio会自动地过滤Intellisense、工具箱控件、添加引用的对话框项诸如此类的东西，只显示指定框架版本里支持的那些特性。然后开发人员可以针对这些不同框架版本进行编译，还能得到每个版本的完全的调试支持。</p>
<p>多定向(Multi-Targeting)的很大的好处在于，开发人员可以马上在 Visual Studio Orcas中使用绝大多数的新特性(譬如，所见即所得设计器和JavaScript 编辑器等)，即使开发人员还在开发或更新老一点版本的项目。</p>
<p>从.NET 1.0到3.5，只能有一个版本的CLR可以被装载到一个进程里。因为Visual Studio本身部分上就是用.NET框架构建的，所以它也只能装载自带的CLR版本。这就使得它几乎不可能和基于其他版本的应用一起工作。 Visual Studio 2008其实也没有真正地解决这个问题。可以称其为打了一个擦边球，因为.NET 3.0和3.5实际上只是构建于2.0运行时上的类库。因为这个问题没有得到彻底的解决，所以如果开发人员要构建.NET 1.0或者.NET 1.1应用，还是需要选择各自的开发工具，VS2002或者VS2003。不过利好的一面是，至少项目文件不会改变，VS 2005的用户也可以和VS 2008的用户协同工作。</p>
<p><b>（2）</b> <b>所见即所得——HTML/CSS编辑器</b></p>
<p><b></b></p>
<p>这个版本终于实现了Dreamwaver几年前就实现的功能：分割视图(Split View)-就是同时将HTML源码和所见即所得设计模式打开的视图。同时，用户选择一个页面上的对象，在代码中也可高亮显示所选对象的代码，就是这里可能还有Bug，因为高亮的部分总是有点错位。此外，AJAX以及javascript的支持也被内置（支持javascript的Intellisense）。还有对于CSS的一些新的改进，感觉用起来像是在用Word里面的样式，也许对于美工来说有用。</p>
<p>Visual Studio 2008的这一新特性将提供：无比丰富的CSS支持，包括CSS属性窗口，CSS继承图示器，CSS预览，以及CSS管理器)；极大改进的视图转换性能，可以从源码模式转换成HTML设计模式将会瞬时完成；对源码视图内控件设计器的支持，包括属性构造器，事件接通(wire-up)以及向导将会在源码视图内正常工作；更丰富的标尺(ruler)和布局支持，可喜的是，它们的值将被自动储存在外部的CSS文件中；对内嵌模板页(nested master pages)的设计器支持。   <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image002.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="457" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image002-thumb.jpg" width="587" border="0" /></a></p>
<p>Visual Studio 2008在CSS方面也在较大的改进。新的“管理样式”属性窗口允许开发人员在样式表内轻易地创建、管理和重构CSS规则。譬如，开发人员可以在样式表里拖放规则来重新安排它们的次序，在多个文件里对它们进行重构，以及在所见即所得设计器里选择一个HTML元素来应用CSS规则。</p>
<p>当开发人员在所见即所得设计器里选择一个HTML元素时，现在也可以使用CSS属性窗口来查看该元素上所有的CSS规则以及它们对应的设置。这个特性所带来的好处是，它可以显示从多个CSS规则继承而来的层叠式设置(cascading settings)。</p>
<p><b>三、</b> <b>ASP.NET 3.5</b></p>
<p><b></b></p>
<p><b>（1）</b> <b>AJAX</b><b>和JavaScript支持</b></p>
<p>在ASP.NET 3.5中将包括所有的ASP.NET AJAX 1.0内置功能。包含在内的将是Visual Studio中显著改进的AJAX和JavaScript工具支持，包括JavaScript Intellisense 和更加丰富的调试支持。   <br /><a href="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image0031.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image003" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="412" alt="clip_image003" src="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image003-thumb1.jpg" width="573" border="0" /></a></p>
<p>VS中的JavaScript intellisense引擎对所有标准的ASP.NET AJAX 库概念(类，属性，枚举等等)都有丰富的支持。除了对任何正常的JavaScript代码提供 Intellisense 支持外，VS现在还允许开发人员添加可选的注释概要信息来为Intellisense提供额外的提示。</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image004.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="327" alt="clip_image004" src="http://blog.acmind.com/wp-content/uploads/2009/05/clip-image004-thumb.jpg" width="592" border="0" /></a></p>
<p>在调试AJAX 和JavaScript时，开发人员现在可以在开发人员的服务器端代码中设置客户端JavaScript断点，VS 现在可以自动地在客户端把它们接连起来(这些断点也可以在开发人员关闭项目/解决方案时保存起来)。在调试时，开发人员现在也有完整的监视窗口(watch window)，intermediate 窗口和其他更多的支持。 VS中的解决方案管理器现在也自动地列出正在运行的JavaScript文档文件，允许开发人员在任何脚本资源里轻松地设置断点。</p>
<p><b>（2）</b> <b>ADO.net</b><b>的改进</b></p>
<p><b></b></p>
<p>ASP.NET3.5有一些很酷的特性，主要体现在LINQ上面，同时对C#及VB.NET等语言的改进上。这可以极大的提高开发效率。</p>
<p>除了允许编写使用LINQ的代码外，很明显地，在ASP.NET中提供完全的数据绑定支持，允许轻松地把任何 ASP.NET UI 控件连接到LINQ实体上去，可以不用编写任何代码即可支持分页、排序、编辑、删除、添加新数据。</p>
<p>虽然笔者还没有在项目中使用这个东西，但是已经可以体会他的用意。这个”一个对象/关系的映射器”，实际上为用户创建了一个结构化数据集，使得使用起这个数据集类型的时候可以直接操作里面的数据。可惜结构化数据集这个东西效率上差了一些，所以不牵扯到死锁问题的时候，恐怕用的人也不会特别多。</p>
<p>但事实上，ASP.NET3.5中提供的新特性并不是特别的多。如果对比查看一下System.Web.Ui命名空间，则可以发现，仅增加了几个新控件：ListView及DataPager等。</p>
<p>ListView是一个基于CSS的崭新ASP.NET 数据控件，间于Repeater及GridView之间，帮助开发人员更容易地建造数据驱动。它提供了像Repeater那样丰富的模版，同时又具在grid的高级特性，如翻页、排序及可编辑功能。但遗憾的是，它并没有支持键盘的上下移动功能。</p>
<p>还有很多LINQDataSource，它可以很容易的创建及展示LINQ数据。</p>
<p><b>（3）</b> <b>Silverlight</b><b>和XAML</b></p>
<p><b></b></p>
<p>Silverlight是个跨平台、跨浏览器的.NET插件，允许设计师和开发人员在浏览器中建造丰富的媒体体验和RIA应用。ASP.NET 3.5在见面上支持Silverlight及XAML等插件。Silverlight在最近可以风光无限，并且有可能嵌入到下一代的运行时环境中。ASP.NET 3.5 也将支持对Rails等动态语言的支持，将提供动态框架来支持对数据库的管理与操作。</p>
<p>笔者认为，到目前为止，ASP.NET可能出于品牌稳定性方面的考虑吧，所以比较核心的变化并没有。但笔者依然认为.NET 3.5将是了不起的更新版本。在ASP.NET 2.0的剧变曾经引发巨大的软件开发模式。那么，我们可以期待，ASP.NET 3.5将给我们带来更大的软件开发效率的提高。</p>
<p><b>四、</b> <b>关于Orcas的思考</b></p>
<p>笔者的疑问还是有的，这个版本的C++是否还能开发本地代码?开发本地代码还是要强迫开发人员安装.Net framework吗?这个版本的.Net framework对开发硬件控制是否有新功能,总不能让我们开发应用而不与如打印机、POS机、PDA、摄像头、优盘、像机、语音等设备打交道吧? 这个版本对开发报表是否功能加强，应用程序的中国报表一直是很头痛的事。</p>
<p>在微软的开发工具还没有正式推出之前，前面所有一切提到的技术都有可能改变。但是从这个未来的开发工具本质上来讲，它想带给程式开发工程师的便利性，这是毋庸置疑的。面对新的一代語言 (VB9.0、C# 3.0) 和崭新的程式设计方式，我们要怎样透过更加便利的开发工具来增加产能。面对技术不断的更新，如何应用新技术来解決目前的困难，如此种种都将是未来的一大挑战。</p>
<p>微软提供了如此功能完备的软件，笔者禁不住在想，微软到底想要干什么？不用编写代码就能完成应用程序的开发，这等于就是说，Visual Studio 2008将完全就是一个可以让任何人都可以定制软件的工具。技术门槛越来越低，越来越多的项目不需要专业的软件开发人员。.对于企业来说成本降低，因为他们以后可以自己造软件，造软件不是什么难事情了，也许不久的将来不需要什么软件公司。难道微软是想把全世界的软件都自己做了？笔者认为，其实微软就想着卖自己的产品，希望每个Windows用户都会买一个做软件的工具，然后自己去做自己想要的东西.这无疑是打破大部分人的饭碗。当然这只是笔者个人的观点。</p>
<p><b>五、</b> <b>小论</b></p>
<p>笔者在前面介绍总结了Visual Studio 2008的新特性。当然，这并不是说Visual Studio 2008并无缺点可挑。例如，Visual Studio 2008偶尔也会突然的死机，呵呵，这虽然不像在Visual Studio 2005中那么频繁。当然，就在使用Visual Studio Beat1的 过程中，笔者还是非常满意的。感觉它确实可以提高软件开发的效率。据微软称Visual Studio 2008、NET 3.5及Windows Server 2008将于2008年2月27日发布。因此，大家都可以比较快的在今年年底看到最终的版本。如果读者还没有试过Visual Studio 2008，那么有必要下载一个Beta1试验一下。当然，读者也可稍等，等到Beta2发布，同时，据称，Beta2将包括一个Go-live的许可文 件，从而可以真正来体验。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.blogjava.net/sterning/archive/2007/08/03/134211.html" href="http://www.blogjava.net/sterning/archive/2007/08/03/134211.html">http://www.blogjava.net/sterning/archive/2007/08/03/134211.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/338/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

