<?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/tag/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>在现代网页设计中的模态窗口</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>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>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>设计项目开始前，9件需要了解客户的事情</title>
		<link>http://blog.acmind.com/archives/729</link>
		<comments>http://blog.acmind.com/archives/729#comments</comments>
		<pubDate>Tue, 02 Jun 2009 00:46:36 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<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=729</guid>
		<description><![CDATA[作为设计师，你的每个客户和项目都是独一无二的。有些事情，你需要了解或者熟知你的所有客户，才能为他们做出最好的设计。建设一个有效的解决具体业务需求的网站，需要设计人员准确理解很多业务的细节。
在这篇文章中，我们会看到9件设计师与客户在设计开始前需要讨论的事情，以增加成功的可能性。这些是围绕去了解客户业务与需求的话题，而不是像付款与最后期限这样的合同问题。
1. 商业目的
几乎所有的商业行为都有任务与远景声明。如果你想要设计出真实反映业务和对客户有效的网站，了解基本的商业存在原因与他的目标是绝对有必要的。
如果你不清楚客户的核心职责或者他们存在的原因，一定要在开始向目前把这些问题弄明白。虽然是很简单的资料，但是没有他们，项目很有可能误入歧途。
2. 具体产品与服务的业务
一旦清晰了业务存在原因，熟知具体事项与客户是如何从业务中得到收入也是非常重要的事情。无论是建立电子商务网站，还是普通的信息站，或者任何其他类型的网站，有必要知道客户准备为网站用户提供什么。
3. 客户的用户统计数据
讨论业务的产品和服务会让你获得有关为产品与服务付费的用户的更多信息，有效果的网站是以用户为中心，这个对身为设计师的你是至关重要的，你的客户需要准确的了解谁将使用这个网站，谁是有可能对提供的业务感兴趣。
尽可能多的获取这方面信息是非常好的做法。比如目标用户的年龄，性别，职业，收入等等，这些对确定网站的设计风格非常有帮助。此外，为搜集更多有关用户对产品与服务感兴趣的原因而建立网站，有利于提高潜能。
4. 企业文化
好的网站能反映企业，使之成为整体市场营销和企业形象有效的一部分。为了创建能准确表现企业的网站，你需要在一定程度上了解他们的企业文化。很多时候你可以通过业务人员了解他们的文化（如果可能的话）。与不同的员工进行交谈，与不同的客户或者用户交谈（如果可能的话），通过观察其现有的营销材料，比 如小册子，名片和广告。
5. 目前网站需要改善的地方
如果你的项目是需要对现有网站重新设计，这个时候你需要知道的一个重要事情是为什么他们选择了重新设计，特别是为改善现状重新设计他们制定了什么？是因为他们网站上了岁数仅需要换换面貌？还是因为发生了业务发生了重大改变需要新的设计与信息？还是提供的新产品和服务不属于旧的网站的一部分？还是现在 的网站不能为新的业务提供有效的帮助。虽然这是非常合乎逻辑需要考虑的事情，但是需要你向客户索取资料，并弄清楚他们着手重新设计的原因，这是许多人不会想到你需要完全明白的。
6. 他们对新网站的期望
假如目前网站存在失败或者过时的具体地方。一定要深入了解客户对新网站提高业务水平的期望是怎样的。期望是决定他们对你的工作的满意度的巨大因素。所以为了满足用户，知道项目最终的结果是什么非常重要。
7. 项目成败的决定性因素
网站的新设计会给企业带来令人满意的感觉改善。但是最终将有其他的影响因素，决定项目的成败。作为设计师，有效的工作会给客户带来提高业务的网站设计。清楚的认知项目成败的因素是非常重要的。也许是成功仅仅在于增加了销售量。也许是网站更准确的反应了企业的重大事情。无论是哪种，知道如何衡量能帮助 你把重点放在合适的方面。
8. 他们选择你做设计师的原因
有如此众多的自由设计师和设计公司可供选择，很明显客户选择了你是有原因的。也有一些是使客户觉得你是最合适的人选的相关事情。这也许因为你以往作品中的具体项目。也许因为在签约之前你表现出的有效沟通和对细节的关注。也许是因为你的定价。
无论是何种情况，有些关于你或者你的工作的事情，是鼓励你的客户和你一起去了解其他设计师。这一决定背后的原因往往会帮助你更好的了解他们想要的或者对你的期望。
9. 他们维护网站的计划
目前几乎每一个网站的设计开发都会使用某种类型的CMS.他们不断维护更新网站的需求影响着CMS的选择和如何建立网站。
他们计划增加新的页面与经常在存在的页面改动图片和文字么？他们需要各种各样的模板，为不同的目的建立特定页面吗？他们仅仅是偶尔或者很少更新页面么？理解客户不断前进中的需求能帮助你决定为特定的项目使用正确的CMS。在某些情况下，客户可能已经有了他们想使用的 CMS,但是这样的情况不经常遇到。
&#160;
摘自：http://www.yeeyan.com/articles/view/61966/44096
]]></description>
			<content:encoded><![CDATA[<p>作为设计师，你的每个客户和项目都是独一无二的。有些事情，你需要了解或者熟知你的所有客户，才能为他们做出最好的设计。建设一个有效的解决具体业务需求的网站，需要设计人员准确理解很多业务的细节。</p>
<p>在这篇文章中，我们会看到9件设计师与客户在设计开始前需要讨论的事情，以增加成功的可能性。这些是围绕去了解客户业务与需求的话题，而不是像付款与最后期限这样的合同问题。</p>
<p><font color="#ffffff"><b>1. </b><b>商业目的</b></font></p>
<p>几乎所有的商业行为都有任务与远景声明。如果你想要设计出真实反映业务和对客户有效的网站，了解基本的商业存在原因与他的目标是绝对有必要的。</p>
<p>如果你不清楚客户的核心职责或者他们存在的原因，一定要在开始向目前把这些问题弄明白。虽然是很简单的资料，但是没有他们，项目很有可能误入歧途。<a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001.gif" 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="1" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb.gif" width="1" border="0" /></a></p>
<p><font color="#ffffff"><b>2. </b><b>具体产品与服务的业务</b></font></p>
<p>一旦清晰了业务存在原因，熟知具体事项与客户是如何从业务中得到收入也是非常重要的事情。无论是建立电子商务网站，还是普通的信息站，或者任何其他类型的网站，有必要知道客户准备为网站用户提供什么。</p>
<p><font color="#ffffff"><b>3. </b><b>客户的用户统计数据</b></font></p>
<p>讨论业务的产品和服务会让你获得有关为产品与服务付费的用户的更多信息，有效果的网站是以用户为中心，这个对身为设计师的你是至关重要的，你的客户需要准确的了解谁将使用这个网站，谁是有可能对提供的业务感兴趣。</p>
<p>尽可能多的获取这方面信息是非常好的做法。比如目标用户的年龄，性别，职业，收入等等，这些对确定网站的设计风格非常有帮助。此外，为搜集更多有关用户对产品与服务感兴趣的原因而建立网站，有利于提高潜能。</p>
<p><font color="#ffffff"><b>4. </b><b>企业文化</b></font></p>
<p>好的网站能反映企业，使之成为整体市场营销和企业形象有效的一部分。为了创建能准确表现企业的网站，你需要在一定程度上了解他们的企业文化。很多时候你可以通过业务人员了解他们的文化（如果可能的话）。与不同的员工进行交谈，与不同的客户或者用户交谈（如果可能的话），通过观察其现有的营销材料，比 如小册子，名片和广告。</p>
<p><font color="#ffffff"><b>5. </b><b>目前网站需要改善的地方</b></font></p>
<p>如果你的项目是需要对现有网站重新设计，这个时候你需要知道的一个重要事情是为什么他们选择了重新设计，特别是为改善现状重新设计他们制定了什么？是因为他们网站上了岁数仅需要换换面貌？还是因为发生了业务发生了重大改变需要新的设计与信息？还是提供的新产品和服务不属于旧的网站的一部分？还是现在 的网站不能为新的业务提供有效的帮助。虽然这是非常合乎逻辑需要考虑的事情，但是需要你向客户索取资料，并弄清楚他们着手重新设计的原因，这是许多人不会想到你需要完全明白的。</p>
<p><font color="#ffffff"><b>6. </b><b>他们对新网站的期望</b></font></p>
<p>假如目前网站存在失败或者过时的具体地方。一定要深入了解客户对新网站提高业务水平的期望是怎样的。期望是决定他们对你的工作的满意度的巨大因素。所以为了满足用户，知道项目最终的结果是什么非常重要。</p>
<p><font color="#ffffff"><b>7. </b><b>项目成败的决定性因素</b></font></p>
<p>网站的新设计会给企业带来令人满意的感觉改善。但是最终将有其他的影响因素，决定项目的成败。作为设计师，有效的工作会给客户带来提高业务的网站设计。清楚的认知项目成败的因素是非常重要的。也许是成功仅仅在于增加了销售量。也许是网站更准确的反应了企业的重大事情。无论是哪种，知道如何衡量能帮助 你把重点放在合适的方面。</p>
<p><font color="#ffffff"><b>8. </b><b>他们选择你做设计师的原因</b></font></p>
<p>有如此众多的自由设计师和设计公司可供选择，很明显客户选择了你是有原因的。也有一些是使客户觉得你是最合适的人选的相关事情。这也许因为你以往作品中的具体项目。也许因为在签约之前你表现出的有效沟通和对细节的关注。也许是因为你的定价。</p>
<p>无论是何种情况，有些关于你或者你的工作的事情，是鼓励你的客户和你一起去了解其他设计师。这一决定背后的原因往往会帮助你更好的了解他们想要的或者对你的期望。</p>
<p><font color="#ffffff"><b>9. </b><b>他们维护网站的计划</b></font></p>
<p>目前几乎每一个网站的设计开发都会使用某种类型的CMS.他们不断维护更新网站的需求影响着CMS的选择和如何建立网站。</p>
<p>他们计划增加新的页面与经常在存在的页面改动图片和文字么？他们需要各种各样的模板，为不同的目的建立特定页面吗？他们仅仅是偶尔或者很少更新页面么？理解客户不断前进中的需求能帮助你决定为特定的项目使用正确的CMS。在某些情况下，客户可能已经有了他们想使用的 CMS,但是这样的情况不经常遇到。</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.yeeyan.com/articles/view/61966/44096" href="http://www.yeeyan.com/articles/view/61966/44096">http://www.yeeyan.com/articles/view/61966/44096</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/729/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>单例模式</title>
		<link>http://blog.acmind.com/archives/130</link>
		<comments>http://blog.acmind.com/archives/130#comments</comments>
		<pubDate>Sat, 17 Jan 2009 02:20:06 +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=130</guid>
		<description><![CDATA[Singleton.cs
class Singleton
{
    private static Singleton instance;

    private Singleton()
    {

    }

    public static Singleton GetInstance()
    {
        if (instance == null)
        {
    [...]]]></description>
			<content:encoded><![CDATA[<p>Singleton.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Singleton
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> Singleton instance;

    <span style="color: #0000ff">private</span> Singleton()
    {

    }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Singleton GetInstance()
    {
        <span style="color: #0000ff">if</span> (instance == <span style="color: #0000ff">null</span>)
        {
            instance = <span style="color: #0000ff">new</span> Singleton();
        }

        <span style="color: #0000ff">return</span> instance;
    }
}</pre>
<p>Client.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Client
{
    <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
    {
        Singleton s1 = Singleton.GetInstance();
        Singleton s2 = Singleton.GetInstance();

        <span style="color: #0000ff">if</span> (s1 = s2)
        {
            Console.WriteLine(&quot;<span style="color: #8b0000">两个对象是相同的实例</span>&quot;);
        }

        Console.Read();
    }
}</pre>
<p>单例模式，保证一个类仅有一个实例，并提供一个访问它的全局访问点。</p>
<p>通常我们可以让一个全局变量使得一个对象被访问，但它不能防止你实例化多个对象。一个最好的办法就是，让类自身负责保存它的唯一实例。这个类可以保证没有其它实例可以被创建，并且它可以提供一个访问该实例的方法。</p>
<p>单例模式因为Singleton类封装它的唯一实例，这样它可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。</p>
<p>单例与实用类静态方法的区别：实用类通常也会采用私有化的构造方法来避免其有实例。但与单例还是有区别的。比如实用类不保存状态，仅提供一些静态方法或静态属性以供使用，而单例类是有状态的。实用类不能用于继承多态，而单例虽然实例唯一，却是可以有子类来继承。实用类只不过是一些方法属性的集合，而单例类却是有着唯一的对象实例。</p>
<p>C#与公共语言运行库也提供了一种“静态初始化”方法，这种方法不需要开发人员显式地编写线程安全代码，即可解决多线程环境下它是不安全的问题。代码如下：</p>
<p>SingletonCharp.cs</p>
<pre class="mycode"><span style="color: #0000ff">public</span> <span style="color: #0000ff">sealed</span> <span style="color: #0000ff">class</span> SingletonCharp
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">readonly</span> SingletonCharp instance = <span style="color: #0000ff">new</span> SingletonCharp();
    <span style="color: #0000ff">private</span> SingletonCharp()
    {

    }
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> SingletonCharp GetInstance()
    {
        <span style="color: #0000ff">return</span> instance;
    }
}</pre>
<p>这种静态初始化的方式是在自己被加载时就将自己实例化，所以被形象地称之为饿汉式单例类。</p>
<p>原先的单例模式处理方式是要在第一次被引用时，才会将自己实例化，所以就被称为懒汉式单例类。</p>
<p><strong>注：</strong></p>
<ul>
<li><strong>单例模式的特点：1、单例类只能有一个实例；2、单例类必须自己创建自己的唯一实例；3、单例类必须给所有其它对象提供这一实例。</strong> </li>
<li><strong>在哪些情况下使用单例模式：1、使用Singleton模式有一个必要条件：在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来，如果一个类可以有几个实例共存，就不要使用单例模式；2、不要使用单例模式存取全局变量。这违背了单例模式的用意，最好放到对应类的静态成员中。3、不要将数据库连接做成单例，因为一个系统可能会与数据库有多个连接，并且在有连接池的情况下，应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例，所以可能会造成资源无法及时释放，带来问题。</strong> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/130/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>抽象工厂模式</title>
		<link>http://blog.acmind.com/archives/129</link>
		<comments>http://blog.acmind.com/archives/129#comments</comments>
		<pubDate>Sat, 17 Jan 2009 02:10:26 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<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=129</guid>
		<description><![CDATA[ 
User.cs
class User
{
    private int _id;
    public int ID
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _name;
  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image11.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="500" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb11.png" width="652" border="0" /></a> </p>
<p>User.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> User
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span> _id;
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> ID
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _id; }
        <span style="color: #0000ff">set</span> { _id = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">string</span> _name;
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> NAME
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _name; }
        <span style="color: #0000ff">set</span> { _name = <span style="color: #0000ff">value</span>; }
    }
}</pre>
<p>IUser.cs</p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IUser
{
    <span style="color: #0000ff">void</span> Insert(User user);

    User GetUser(<span style="color: #0000ff">int</span> id);
}</pre>
<p>SqlserverUser.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> SqlserverUser : IUser
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Insert(User user)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在SQL Server中给User表增加一条记录。</span>&quot;);
    }

    <span style="color: #0000ff">public</span> User GetUser(<span style="color: #0000ff">int</span> id)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在SQL Server中根据ID得到User表一条记录。</span>&quot;);
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
    }
}</pre>
<p>AccessUser.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> AccessUser : IUser
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Insert(User user)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在Access中给User表增加一条记录。</span>&quot;);
    }

    <span style="color: #0000ff">public</span> User GetUser(<span style="color: #0000ff">int</span> id)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在Access中根据ID得到User表一条记录。</span>&quot;);
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
    }
}</pre>
<p>Department.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Department
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span> _id;
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> ID
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _id; }
        <span style="color: #0000ff">set</span> { _id = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">string</span> _deptName;
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> DeptName
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _deptName; }
        <span style="color: #0000ff">set</span> { _deptName = <span style="color: #0000ff">value</span>; }
    }
}</pre>
<p>IDepartment.cs</p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IDepartment
{
    <span style="color: #0000ff">void</span> Insert(Department department);

    Department GetDepartment(<span style="color: #0000ff">int</span> id);
}</pre>
<p>SqlserverDepartment.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> SqlserverDepartment : IDepartment
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Insert(Department department)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在SQL Server中给Department表增加一条记录。</span>&quot;);
    }

    <span style="color: #0000ff">public</span> Department GetDepartment(<span style="color: #0000ff">int</span> id)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在SQL Server中根据ID得到Department表一条记录。</span>&quot;);
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
    }
}</pre>
<p>AccessDepartment.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> AccessDepartment : IDepartment
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Insert(Department department)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在Access中给Department表增加一条记录。</span>&quot;);
    }

    <span style="color: #0000ff">public</span> Department GetDepartment(<span style="color: #0000ff">int</span> id)
    {
        Console.WriteLine(&quot;<span style="color: #8b0000">在Access中根据ID得到Department表一条记录。</span>&quot;);
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
    }
}</pre>
<p>IFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IFactory
{
    IUser CreateUser();

    IDepartment CreateDepartment();
}</pre>
<p>SqlserverFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> SqlserverFactory : IFactory
{
    <span style="color: #0000ff">public</span> IUser CreateUser()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> SqlserverUser();
    }

    <span style="color: #0000ff">public</span> IDepartment CreateDepartment()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> SqlserverDepartment();
    }
}</pre>
<p>AccessFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> AccessFactory : IFactory
{
    <span style="color: #0000ff">public</span> IUser CreateUser()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> AccessUser();
    }

    <span style="color: #0000ff">public</span> IDepartment CreateDepartment()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> AccessDepartment();
    }
}</pre>
<p>Client.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Client
{
    <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
    {
        User user = <span style="color: #0000ff">new</span> User();
        Department department = <span style="color: #0000ff">new</span> Department();

        IFactory factory = <span style="color: #0000ff">new</span> SqlserverFactory();
        <span style="color: #008000">//IFactory factory = new AccessFactory();</span>

        IUser iu = factory.CreateUser();
        iu.Insert(user);
        iu.GetUser(1);

        IDepartment id = factory.CreateDepartment();
        id.Insert(department);
        id.GetDepartment(1);

        Console.Read();
    }
}</pre>
<p><strong>小结：</strong></p>
<ul>
<li><strong>本例分析：只有一个User类和User操作类时，是只需要工厂模式的，但现在加入新表，而且SQL Server与Access又是两大不同的分类，所以解决这种涉及多个产品系列的问题，用到了抽象工厂模式。</strong> </li>
<li><strong>优点：最大的好处是易于交换产品系列，由于具体工厂类，如IFactory factory=new AccessFactory()，在一个应用中只需要在初始化时出现一次，这就使得改变一个应用的具体工厂变得非常容易，它只需要改变具体工厂即可使用不同的产品配置；第二大好处是，它让具体的创建实例过程与客户端分离，客户端是通过它们的抽象接口操纵实例，产品的具体类名也被具体工厂的实现分离，不会出现在客户代码中。</strong> </li>
<li><strong>缺点：比如我们要增加项目表Project，至少要增加三个类，IProject、SqlserverProject、AccessProject，还需要更改IFactory、SqlserverFactory和AccessFactory才可以完全实现；另外，客户端程序类不只一个时，很多地方都在用IUser或IDepartment，每一个类在开始都会声明IFactory factory=new SqlserverFactory()，如果我有100个调用数据库的类，就要更改100次IFactory factory=new SqlserverFactory()。［此种情况时可以考虑用简单工厂模式＋抽象工厂模式进行，随后也可以再过渡到反射＋抽象工厂模式（反射＋配置文件）］。</strong> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/129/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单工厂模式VS.工厂方法模式</title>
		<link>http://blog.acmind.com/archives/126</link>
		<comments>http://blog.acmind.com/archives/126#comments</comments>
		<pubDate>Sat, 17 Jan 2009 01:58:09 +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=126</guid>
		<description><![CDATA[先将上面2个图拿出来做比较：
简单工厂：

工厂方法：

1、简单工厂模式下，工厂类与具体父类及具体子类都有关联；而工厂模式下，工厂类只与具体父类有关联，由工厂子类负责与具体子类进行关联。
2、如果在简单工厂模式下加入新功能扩展，就要对工厂类做修改，加入新功能；而在工厂模式下，只是单纯地加入工厂子类和具体子类，而不需要对工厂类做修改，做到了“开放扩展，封闭修改”。
3、其实尽管对工厂类不需要做修改了，但是也要对客户端做修改，因为添加了对新功能的调用。也就是说工厂模式做到了对工厂类的开闭原则，却解决不了对客户端的修改。
4、一些情况下，可以考虑用工厂模式＋反射来解决客户端修改问题。
]]></description>
			<content:encoded><![CDATA[<p>先将上面2个图拿出来做比较：</p>
<p>简单工厂：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image0011.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="343" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image001-thumb1.jpg" width="531" border="0" /></a></p>
<p>工厂方法：</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image0021.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="389" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image002-thumb2.jpg" width="673" border="0" /></a></p>
<p>1、简单工厂模式下，工厂类与具体父类及具体子类都有关联；而工厂模式下，工厂类只与具体父类有关联，由工厂子类负责与具体子类进行关联。</p>
<p>2、如果在简单工厂模式下加入新功能扩展，就要对工厂类做修改，加入新功能；而在工厂模式下，只是单纯地加入工厂子类和具体子类，而不需要对工厂类做修改，做到了“开放扩展，封闭修改”。</p>
<p>3、其实尽管对工厂类不需要做修改了，但是也要对客户端做修改，因为添加了对新功能的调用。也就是说工厂模式做到了对工厂类的开闭原则，却解决不了对客户端的修改。</p>
<p>4、一些情况下，可以考虑用工厂模式＋反射来解决客户端修改问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/126/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>工厂方法模式</title>
		<link>http://blog.acmind.com/archives/121</link>
		<comments>http://blog.acmind.com/archives/121#comments</comments>
		<pubDate>Sat, 17 Jan 2009 01:54:43 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<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=121</guid>
		<description><![CDATA[ 
Operation.cs
public class Operation
{
    private double _numberA = 0;
    private double _numberB = 0;

    public double NumberA
    {
        get { return _numberA; }
        set { _numberA = value; }
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image10.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="393" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb10.png" width="677" border="0" /></a> </p>
<p>Operation.cs</p>
<pre class="mycode"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Operation
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">double</span> _numberA = 0;
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">double</span> _numberB = 0;

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> NumberA
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _numberA; }
        <span style="color: #0000ff">set</span> { _numberA = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> NumberB
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _numberB; }
        <span style="color: #0000ff">set</span> { _numberB = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationAdd.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationAdd : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA + NumberB;
        <span style="color: #0000ff">return</span> result;
    }

}</pre>
<p>OperationSub.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationSub : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA - NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationMul.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationMul : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA * NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationDiv.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationDiv : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        <span style="color: #0000ff">if</span> (NumberB == 0)
            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> Exception(&quot;<span style="color: #8b0000">除数不能为0。</span>&quot;);
        result = NumberA / NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>IFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IFactory
{
    Operation CreateOperation();
}</pre>
<p>AddFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> AddFactory : IFactory
{
    <span style="color: #0000ff">public</span> Operation CreateOperation()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> OperationAdd();
    }
}</pre>
<p>SubFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> SubFactory : IFactory
{
    <span style="color: #0000ff">public</span> Operation CreateOperation()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> OperationSub();
    }
}</pre>
<p>MulFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> MulFactory : IFactory
{
    <span style="color: #0000ff">public</span> Operation CreateOperation()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> OperationMul();
    }
}</pre>
<p>DivFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> DivFactory : IFactory
{
    <span style="color: #0000ff">public</span> Operation CreateOperation()
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> OperationDiv();
    }
}</pre>
<p>Client.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Client
{
    <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
    {
        IFactory operFactory = <span style="color: #0000ff">new</span> AddFactory();
        Operation oper = operFactory.CreateOperation();
        oper.NumberA = 1;
        oper.NumberB = 2;
        <span style="color: #0000ff">double</span> result = oper.GetResult();
        Console.WriteLine(result);
    }
}</pre>
<p><strong>小结：</strong></p>
<ul>
<li><strong>模式分析：工厂方法模式是类的创建模式，主要实现的是定义一个创建产品对象的工厂接口，将实际创建工作推迟到子类中。工厂方法模式有一个别名叫多态性工厂模式，因为具体工厂类都有共同的接口或共同的抽象父类。</strong> </li>
<li><strong>优点：核心的工厂类不再负责所有产品的创建，仅仅负责给出具体工厂必须实现的接口，而不接触哪一个产品类被实例化这种细节，使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。当系统扩展需要添加新的产品对象时，仅仅需要有添加一个具体对象以及一个具体工厂对象，原有工厂对象不需要进行任何修改，符合“开放－封闭”原则。</strong> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单工厂模式</title>
		<link>http://blog.acmind.com/archives/94</link>
		<comments>http://blog.acmind.com/archives/94#comments</comments>
		<pubDate>Fri, 16 Jan 2009 18:06:39 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<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=94</guid>
		<description><![CDATA[&#160;
Operation.cs
public class Operation
{
    private double _numberA = 0;
    private double _numberB = 0;

    public double NumberA
    {
        get { return _numberA; }
        set { _numberA = value; }
  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image3.png" class="highslide-image" onclick="return hs.expand(this);"><img title="" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="347" alt="" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb3.png" width="535" border="0" /></a>&#160;
<p>Operation.cs</p>
<pre class="mycode"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Operation
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">double</span> _numberA = 0;
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">double</span> _numberB = 0;

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> NumberA
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _numberA; }
        <span style="color: #0000ff">set</span> { _numberA = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> NumberB
    {
        <span style="color: #0000ff">get</span> { <span style="color: #0000ff">return</span> _numberB; }
        <span style="color: #0000ff">set</span> { _numberB = <span style="color: #0000ff">value</span>; }
    }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationAdd.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationAdd : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA + NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationSub.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationSub : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA - NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationMul.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationMul : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        result = NumberA * NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationDiv.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> OperationDiv : Operation
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">double</span> GetResult()
    {
        <span style="color: #0000ff">double</span> result = 0;
        <span style="color: #0000ff">if</span> (NumberB == 0)
            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> Exception(&quot;<span style="color: #8b0000">除数不能为0。</span>&quot;);
        result = NumberA / NumberB;
        <span style="color: #0000ff">return</span> result;
    }
}</pre>
<p>OperationFactory.cs</p>
<pre class="mycode"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> OperationFactory
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Operation CreateOperate(<span style="color: #0000ff">string</span> operate)
    {
        Operation oper = <span style="color: #0000ff">null</span>;
        <span style="color: #0000ff">switch</span> (operate)
        {
            <span style="color: #0000ff">case</span> &quot;<span style="color: #8b0000">+</span>&quot;:
                oper = <span style="color: #0000ff">new</span> OperationAdd();
                <span style="color: #0000ff">break</span>;
            <span style="color: #0000ff">case</span> &quot;<span style="color: #8b0000">-</span>&quot;:
                oper = <span style="color: #0000ff">new</span> OperationSub();
                <span style="color: #0000ff">break</span>;
            <span style="color: #0000ff">case</span> &quot;<span style="color: #8b0000">*</span>&quot;:
                oper = <span style="color: #0000ff">new</span> OperationMul();
                <span style="color: #0000ff">break</span>;
            <span style="color: #0000ff">case</span> &quot;<span style="color: #8b0000">/</span>&quot;:
                oper = <span style="color: #0000ff">new</span> OperationDiv();
                <span style="color: #0000ff">break</span>;
        }
        <span style="color: #0000ff">return</span> oper;
    }
}</pre>
<p>Client.cs</p>
<pre class="mycode"><span style="color: #0000ff">class</span> Client
{
    <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
    {
        Operation oper;
        oper = OperationFactory.CreateOperate(&quot;<span style="color: #8b0000">+</span>&quot;);
        oper.NumberA = 1;
        oper.NumberB = 2;
        <span style="color: #0000ff">double</span> result = oper.GetResult();
        Console.WriteLine(result);
    }
}</pre>
<p><strong>小结：</strong></p>
<ul>
<li><strong>模式分析：简单工厂模式根据提供给它的数据，返回几个类中的一个类的实例。通常返回的类都有一个公共父类和公共方法。</strong> </li>
<li><strong>优点：工厂类含有必要的判断逻辑，可以决定在什么时候创建哪一个产品类的实例，客户端可以免除直接创建产品对象的责任，通过这种方法实现了对责任的分割。</strong> </li>
<li><strong>缺点：工厂类集中了所有产品创建逻辑，一旦不能工作，整个系统都要受到影响。同时，系统扩展困难，一旦添加新产品就不得不修改工厂逻辑。</strong> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/94/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UML类图图示及代码对应</title>
		<link>http://blog.acmind.com/archives/60</link>
		<comments>http://blog.acmind.com/archives/60#comments</comments>
		<pubDate>Fri, 16 Jan 2009 16:47:51 +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>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[模式]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=60</guid>
		<description><![CDATA[UML类图图示样例

代码对应：

interface IFly
{
    void Fly();
}
 
interface ILanguage
{
    void Speak();
}
 
class WideGoose : IFly
{

}
 
class Penguin : Bird
{
    private Climate climate;
}
 
class WideGooseAggregate
{
    private WideGoose[] arrayWideGoose;
}
 
class Bird
{
    private Wing wing;
    public Bird()
    {
   [...]]]></description>
			<content:encoded><![CDATA[<p><b>UML</b><b>类图图示样例</b></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image001.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="500" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image001-thumb.jpg" width="564" border="0" /></a></p>
<p><b>代码对应：</b></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image002.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="153" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image002-thumb.jpg" width="226" border="0" /></a></p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IFly
{
    <span style="color: #0000ff">void</span> Fly();
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image4.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb4.png" width="123" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">interface</span> ILanguage
{
    <span style="color: #0000ff">void</span> Speak();
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image5.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb5.png" width="214" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> WideGoose : IFly
{

}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image6.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb6.png" width="295" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> Penguin : Bird
{
    <span style="color: #0000ff">private</span> Climate climate;
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image7.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb7.png" width="263" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> WideGooseAggregate
{
    <span style="color: #0000ff">private</span> WideGoose[] arrayWideGoose;
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image8.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb8.png" width="282" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> Bird
{
    <span style="color: #0000ff">private</span> Wing wing;
    <span style="color: #0000ff">public</span> Bird()
    {
        wing = <span style="color: #0000ff">new</span> Wing();
    }
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image9.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb9.png" width="376" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">abstract</span> <span style="color: #0000ff">class</span> Animal
{
    <span style="color: #0000ff">public</span> Metabolism(Oxygen oxygen,Water water)
    {

    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/60/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

