<?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://shawphy.com/tag/%e4%ba%a4%e4%ba%92%e8%ae%be%e8%ae%a1/feed" rel="self" type="application/rss+xml" />
	<link>http://shawphy.com</link>
	<description>关注HTML,CSS,JavaScript,jQuery等前端开发</description>
	<lastBuildDate>Mon, 02 Jan 2012 09:47:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>禁用脚本时显示元素——再从前端角度浅谈产品设计中的可用性和可访问性</title>
		<link>http://shawphy.com/2009/04/noscript-for-css.html</link>
		<comments>http://shawphy.com/2009/04/noscript-for-css.html#comments</comments>
		<pubDate>Mon, 27 Apr 2009 17:44:17 +0000</pubDate>
		<dc:creator>Shawphy</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[交互设计]]></category>
		<category><![CDATA[前端开发]]></category>
		<category><![CDATA[可用性]]></category>
		<category><![CDATA[可访问性]]></category>

		<guid isPermaLink="false">http://shawphy.com/?p=159</guid>
		<description><![CDATA[三个月前，老鱼在其博客和支付宝UED博客中发表了浅谈产品设计中的可用性和可访问性。 文中阐述了这样一种状况，页面上有元素需要暂时隐藏以避免过多的信息对用户产生干扰。而隐藏的信息需要通过脚本的交互显示出来，以增强可用性。那么对于不启用脚本的用户，如何保证可访问性的问题。 文中提到两种方案： 实现方案1：采用css样式设置企业注册信息的容器默认为隐藏，当用户点选企业后通过js脚本改变容器的隐藏属性为显示。 实现方案2：通过脚本控制企业注册信息的容器的初始状态为隐藏，当用户点选企业后通过脚本改变容器的隐藏属性为显示。 方案一的缺点在于无视可访问性 方案二的缺点在于“要在页面结构加载完成后，再去初始化要隐藏的容器，当客户端网速不佳的情况下，会先显示企业注册信息的内容，几秒后又不见了，体验上有所折扣。” 我又在文章的一楼评论中提出了两个方案：解决了第二个方案的缺点 实现方案3：把脚本直接紧跟着需要隐藏的元素后面 实现方案4：在页面头部最开始的地方写入脚本，这个脚本用于生成隐藏元素的css代码。 方案三的缺点在于结构行为和样式的高度耦合，非常不利于维护，且易被同行耻笑。 方案四比上面略好，但同样由于行为和样式的混杂，不利于维护。 还有这位兄弟提出的 实现方案5：用脚本给body加上个class，所有需要隐藏的元素的CSS都用这个class开头，比如 .js #id{display:none;} 今日又发现新思路，利用noscript标签。这个圡圡的标签。这本来应该是最先想到的，却似乎思维被僵化了，一味从JS和CSS角度去看了，忽略了HTML本身。 实现方案6：首先使用方案一，直接用CSS隐藏元素，然后再方案一的基础上，增加noscript标签，其中的再写入CSS用来覆盖先前的CSS。（演示代码代码在本文结尾） 是的，就这么简单、这么的圡，但很有效。对于 IE 6 和 Firefox 3测试通过。Chrome上我找不到关闭脚本的选项，故未经测试。 当一切看起来这么美好的时候，放到W3C的验证里边就有麻烦了，XHTML下他说noscript不能没有object?我很晕，然后放上object后他又说style不能放在这里，只能放在head里。我换用了link也一样报错。换了html 4也没有好转。 我在XHTML的描述中没有找到相关内容 http://www.w3.org/TR/xhtml1/ 而在HTML 4.01中发现，http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.1 然后我纳闷了一下，里边并没有提到noscript里不能放style和link。进一步考据，找到http://www.w3.org/TR/html401/struct/links.html#h-12.1.3 这里提到 The LINK element may only appear in the &#8230; <a href="http://shawphy.com/2009/04/noscript-for-css.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>三个月前，老鱼在其博客和支付宝UED博客中发表了<a href="http://ued.alipay.com/?p=826">浅谈产品设计中的可用性和可访问性</a>。<br />
文中阐述了这样一种状况，页面上有元素需要暂时隐藏以避免过多的信息对用户产生干扰。而隐藏的信息需要通过脚本的交互显示出来，以增强可用性。那么对于不启用脚本的用户，如何保证可访问性的问题。<br />
文中提到两种方案：</p>
<blockquote><p>
<strong>实现方案1：</strong>采用css样式设置企业注册信息的容器默认为隐藏，当用户点选企业后通过js脚本改变容器的隐藏属性为显示。<br />
<strong>实现方案2：</strong>通过脚本控制企业注册信息的容器的初始状态为隐藏，当用户点选企业后通过脚本改变容器的隐藏属性为显示。
</p></blockquote>
<p>方案一的缺点在于无视可访问性<br />
方案二的缺点在于“要在页面结构加载完成后，再去初始化要隐藏的容器，当客户端网速不佳的情况下，会先显示企业注册信息的内容，几秒后又不见了，体验上有所折扣。”</p>
<p>我又在文章的<a href="http://ued.alipay.com/?p=826#comment-396">一楼评论</a>中提出了两个方案：解决了第二个方案的缺点</p>
<blockquote><p><strong>实现方案3：</strong>把脚本直接紧跟着需要隐藏的元素后面<br />
<strong>实现方案4：</strong>在页面头部最开始的地方写入脚本，这个脚本用于生成隐藏元素的css代码。
</p></blockquote>
<p>方案三的缺点在于结构行为和样式的高度耦合，非常不利于维护，且易被同行耻笑。<br />
方案四比上面略好，但同样由于行为和样式的混杂，不利于维护。</p>
<p>还有<a href="http://blog.fouland.com/2009/01/noscript-for-css/">这位兄弟</a>提出的</p>
<blockquote><p><strong>实现方案5：</strong>用脚本给body加上个class，所有需要隐藏的元素的CSS都用这个class开头，比如 .js #id{display:none;}
</p></blockquote>
<p>今日又发现新思路，利用noscript标签。这个圡圡的标签。这本来应该是最先想到的，却似乎思维被僵化了，一味从JS和CSS角度去看了，忽略了HTML本身。</p>
<blockquote><p><strong>实现方案6：</strong>首先使用方案一，直接用CSS隐藏元素，然后再方案一的基础上，增加noscript标签，其中的再写入CSS用来覆盖先前的CSS。（演示代码代码在本文结尾）
</p></blockquote>
<p>是的，就这么简单、这么的圡，但很有效。对于 IE 6 和 Firefox 3测试通过。Chrome上我找不到关闭脚本的选项，故未经测试。</p>
<p>当一切看起来这么美好的时候，放到W3C的验证里边就有麻烦了，XHTML下他说noscript不能没有object?我很晕，然后放上object后他又说style不能放在这里，只能放在head里。我换用了link也一样报错。换了html 4也没有好转。<br />
我在XHTML的描述中没有找到相关内容 http://www.w3.org/TR/xhtml1/<br />
而在HTML 4.01中发现，<a href="http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.1">http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.1</a><br />
然后我纳闷了一下，里边并没有提到noscript里不能放style和link。进一步考据，找到<a href="http://www.w3.org/TR/html401/struct/links.html#h-12.1.3">http://www.w3.org/TR/html401/struct/links.html#h-12.1.3</a><br />
这里提到</p>
<blockquote><p>The LINK element may only appear in the head of a document. </p></blockquote>
<p>又找到 <a href="http://www.w3.org/TR/html401/present/styles.html#h-14.2.3">http://www.w3.org/TR/html401/present/styles.html#h-14.2.3</a></p>
<blockquote><p>The STYLE element allows authors to put style sheet rules in the head of the document. </p></blockquote>
<p>但无论如何，我head里放个noscript，里边再带个style或者link就不让我通过验证了！什么世道！</p>
<p>当然，这么2的事情，W3标准的制定小组早就想到啦！ 在HTML 5中，这个问题将会被解决。可以参考这里： <a href="http://www.w3.org/TR/html5/semantics.html#the-noscript-element">http://www.w3.org/TR/html5/semantics.html#the-noscript-element</a>。同时代码页成功通过了验证。</p>
<p>标准这种东西我向来就把他当作迷信一样，不可不信也不可全信。对于这个问题，我宁可不遵守。因为无论从技术实现，还是语义化HTML，抑或者可用性角度来看，这都是个完美的解决方案，我不想被标准这个玩意所束缚。一方面现在主流的浏览器都支持，没有兼容性问题，另一方面将来的标准也支持这种做法，何乐而不为呢？</p>
<p>两种情况下不适合用方案六：<br />
1，你是极端完美主义者。<br />
2，你的老板或者客户只认W3C验证。</p>
<p>测试地址：<br />
<a href="http://shawphy.com/demo/noscript-for-css.html">http://shawphy.com/demo/noscript-for-css.html</a><br />
直接到W3C接受检验：<br />
<a href="http://validator.w3.org/check?uri=http://shawphy.com/demo/noscript-for-css.html">http://validator.w3.org/check?uri=http://shawphy.com/demo/noscript-for-css.html</a><br />
附代码，我为了方便其间，用了HTML 5的doctype：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">HTML</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">http-equiv</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Content-Type</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">content</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/html; charset=utf-8</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">用noscript在禁用脚本时显示元素</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">generator</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">content</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">editplus</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">author</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">content</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Shawphy(shawphy.com)</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; div{display:none;}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">noscript</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; div{display:block;}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">noscript</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; 你看不到</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://validator.w3.org/check?uri=http%3A%2F%2Fshawphy.com%2Fdemo%2Fnoscript-for-css.html</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">到W3C验证</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://shawphy.com/2009/04/noscript-for-css.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

