<?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>Prower&#039;s Blog &#187; 前端开发</title>
	<atom:link href="http://www.prower.cn/category/technic/feed" rel="self" type="application/rss+xml" />
	<link>http://www.prower.cn</link>
	<description>关注互联网、体验互联网，记录成长历程</description>
	<lastBuildDate>Thu, 05 Jan 2012 00:40:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>两侧背景自动延伸的CSS实现方法</title>
		<link>http://www.prower.cn/technic/1778</link>
		<comments>http://www.prower.cn/technic/1778#comments</comments>
		<pubDate>Mon, 22 Feb 2010 03:29:45 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css技巧]]></category>
		<category><![CDATA[定位属性]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1778</guid>
		<description><![CDATA[方法来源于土豆网的导航，在这里纪录一下实现的思路。 主要是利用 position 属性的 absolute 和 relative 配合 z-index 来实现的，通过position:absolute将需要平铺的背景层叠在另一背景上，这样即可以实现同一位置的两个背景，再使用z-index将内容提升到最高阶显示。 &#60;div id=”a”&#62; &#60;div id=”b”&#62; &#60;ul&#62; &#60;li&#62;&#60;a href=”http://www.prower.cn/category/internet”&#62;互联网谈&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href=”http://www.prower.cn/category/interaction”&#62;交互设计&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href=”http://www.prower.cn/category/technic”&#62;技术言论&#60;/a&#62;&#60;/li&#62; &#60;/ul&#62; &#60;div id=”c”&#62;&#60;/div&#62; &#60;/div&#62; &#60;div id=”d”&#62;&#60;/div&#62; &#60;/div&#62; 首先将其中一个背景样式写在&#60;div id=”a”&#62;上，然后是将另一个背景样式写在&#60;div id=”d”&#62;上，&#60;div id=”b”&#62;为内容层，&#60;div id=”c”&#62;是另一个背景样式层，可以自由的出现在&#60;div id=”b”&#62;里面的任何一个位置。如土豆网中间的那个有弧线的背景。 然后是样式方面： #a {background:#f00; height:50px; position:relative; width:100%;} #b {height:50px; margin:0 auto; position:relative; width:950px; z-index:9000;} #c {background:#ff0; height:50px; position:absolute; left:100px; top:0; width:100px; z-index:-1;} #d [...]]]></description>
			<content:encoded><![CDATA[<p>方法来源于土豆网的导航，在这里纪录一下实现的思路。</p>
<p>主要是利用 <strong>position </strong>属性的 <strong>absolute </strong>和 <strong>relative</strong> 配合 <strong>z-index</strong> 来实现的，通过position:absolute将需要平铺的背景层叠在另一背景上，这样即可以实现同一位置的两个背景，再使用z-index将内容提升到最高阶显示。</p>
<blockquote><p>&lt;div id=”a”&gt;<br />
&lt;div id=”b”&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=”http://www.prower.cn/category/internet”&gt;互联网谈&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”http://www.prower.cn/category/interaction”&gt;交互设计&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”http://www.prower.cn/category/technic”&gt;技术言论&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;div id=”c”&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;div id=”d”&gt;&lt;/div&gt;<br />
&lt;/div&gt;</p></blockquote>
<p><span id="more-1778"></span></p>
<p>首先将其中一个背景样式写在&lt;div id=”a”&gt;上，然后是将另一个背景样式写在&lt;div id=”d”&gt;上，&lt;div id=”b”&gt;为内容层，&lt;div id=”c”&gt;是另一个背景样式层，可以自由的出现在&lt;div id=”b”&gt;里面的任何一个位置。如土豆网中间的那个有弧线的背景。</p>
<p>然后是样式方面：</p>
<blockquote><p>#a {background:#f00; height:50px; position:relative; width:100%;}<br />
#b {height:50px; margin:0 auto; position:relative; width:950px; z-index:9000;}<br />
#c {background:#ff0; height:50px; position:absolute; left:100px; top:0; width:100px; z-index:-1;}<br />
#d {background:#f60; height:50px; position:absolute; left:0; top:0; width:50%; z-index:1;}<br />
ul {line-height:50px; position:relative; z-index:9001;}</p></blockquote>
<p>具体代码参见：<a href="http://www.prower.cn/page/menu.html" target="_blank">两侧背景自动延伸的CSS实现方法</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1778/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Prower V3主题的Bug修改</title>
		<link>http://www.prower.cn/technic/1743</link>
		<comments>http://www.prower.cn/technic/1743#comments</comments>
		<pubDate>Sat, 16 Jan 2010 06:54:33 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[prower v3]]></category>
		<category><![CDATA[reeoo]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress Theme]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1743</guid>
		<description><![CDATA[距Prower V3主题发布已经有好多个月了，期间有一些Bug一直没有去修改，现在发布一下这两个小Bug的修改方法，其中一个是日期的问题，另一个是侧边栏样式的问题。 原主题发布页里的主题包已经更新了，最新下载的不需要再修改了。 日期问题 主题中使用的日志时间调用是： &#60;?php the_data () ?&#62; 这个函数是可以通过后台的设置来修改时间的显示方式的，但也存在一个问题就是，如果一天之内发布了两个或以上的日志，那么只会在最新发布的日志显示时间，同一天内的其他日志将不会在列表里显示日期出来，只需要将index.php里的这个函数修改为： &#60;?php the_time(&#8216;Y-m-d&#8217;) ?&#62; 这样日期问题即可解决，但这样日期的设置就是固定的，不能通过后台去修改。 侧边栏样式问题 Prower V3主题支持小工具挂件，但启用小工具之后标题样式会有些问题，这是因为当时写主题的时候疏忽造成的，functions.php文件中的： if ( function_exists(&#8216;register_sidebar&#8217;) ) register_sidebar(array( &#8216;before_widget&#8217; =&#62; &#8216;&#60;li id=”%1$s”&#62;&#8217;, &#8216;after_widget&#8217; =&#62; &#8216;&#60;/li&#62;&#8217;, &#8216;before_title&#8217; =&#62; ”, &#8216;after_title&#8217; =&#62; ”, )); 只需修改下以下代码皆可： if ( function_exists(&#8216;register_sidebar&#8217;) ) register_sidebar(array( &#8216;before_widget&#8217; =&#62; &#8216;&#60;li id=”%1$s”&#62;&#8217;, &#8216;after_widget&#8217; =&#62; &#8216;&#60;/li&#62;&#8217;, &#8216;before_title&#8217; =&#62; &#8216;&#60;h2&#62;&#8217;, &#8216;after_title&#8217; =&#62; &#8216;&#60;/h2&#62;&#8217;, [...]]]></description>
			<content:encoded><![CDATA[<p>距<a href="http://www.prower.cn/work/1655" target="_blank">Prower V3</a>主题发布已经有好多个月了，期间有一些Bug一直没有去修改，现在发布一下这两个小Bug的修改方法，其中一个是日期的问题，另一个是侧边栏样式的问题。</p>
<p>原主题发布页里的主题包已经更新了，最新下载的不需要再修改了。</p>
<p><strong>日期问题</strong></p>
<p>主题中使用的日志时间调用是：</p>
<blockquote><p>&lt;?php the_data () ?&gt;</p></blockquote>
<p><span id="more-1743"></span></p>
<p>这个函数是可以通过后台的设置来修改时间的显示方式的，但也存在一个问题就是，如果一天之内发布了两个或以上的日志，那么只会在最新发布的日志显示时间，同一天内的其他日志将不会在列表里显示日期出来，只需要将index.php里的这个函数修改为：</p>
<blockquote><p>&lt;?php the_time(&#8216;Y-m-d&#8217;) ?&gt;</p></blockquote>
<p>这样日期问题即可解决，但这样日期的设置就是固定的，不能通过后台去修改。</p>
<p><strong>侧边栏样式问题</strong></p>
<p>Prower V3主题支持小工具挂件，但启用小工具之后标题样式会有些问题，这是因为当时写主题的时候疏忽造成的，functions.php文件中的：</p>
<blockquote><p>if ( function_exists(&#8216;register_sidebar&#8217;) )<br />
register_sidebar(array(<br />
&#8216;before_widget&#8217; =&gt; &#8216;&lt;li id=”%1$s”&gt;&#8217;,<br />
&#8216;after_widget&#8217; =&gt; &#8216;&lt;/li&gt;&#8217;,<br />
&#8216;before_title&#8217; =&gt; ”,<br />
&#8216;after_title&#8217; =&gt; ”,<br />
));</p></blockquote>
<p>只需修改下以下代码皆可：</p>
<blockquote><p>if ( function_exists(&#8216;register_sidebar&#8217;) )<br />
register_sidebar(array(<br />
&#8216;before_widget&#8217; =&gt; &#8216;&lt;li id=”%1$s”&gt;&#8217;,<br />
&#8216;after_widget&#8217; =&gt; &#8216;&lt;/li&gt;&#8217;,<br />
&#8216;before_title&#8217; =&gt; &#8216;&lt;h2&gt;&#8217;,<br />
&#8216;after_title&#8217; =&gt; &#8216;&lt;/h2&gt;&#8217;,<br />
));</p></blockquote>
<p>另，最近即将推出<a title="Web design inspiration and gallery" href="http://reeoo.com" target="_blank">Reeoo.com</a>这个主题，不过是以付费的方式提供，想尝试一下付费主题是否在国内行得通，欢迎留言讨论。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1743/feed</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>取巧的边框等高</title>
		<link>http://www.prower.cn/technic/1714</link>
		<comments>http://www.prower.cn/technic/1714#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:29:31 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[等高]]></category>
		<category><![CDATA[边框]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1714</guid>
		<description><![CDATA[左右结构是平常页面中最经常看到的结构，简洁一些的页面就会使用边框将左右两边隔开，但往往由于左右两边的内容可能是不等高的，所以就会有一高一低的现象。这个时候不管是给A写个边框还是给B写个边框，都会有高低不平，解决这个边框的高低不平之前有看过很多解决方法，但总的来说有些复杂，其实有一种取巧的方法就可以做到，那就是利用CSS属性中的负值。 比如这个示例图中的边框，取一个DIV将A、B两部分都包容起来，然后写border：1px solid #000;再给A容器写右边框border-right:1px solid #000;B容器也写边框border-left:1px solid #000;这样不管哪边高哪边低，都会保证起码有一条边框线是从头到底的。 但这样两条边框线就会造成重复，于是可以给B容器写margin-left:-1px;这样让两条边框重叠在一起，即可解决边框重复的问题。 PS:回头一看，写了个这么囧的日志，算了，既然写了就发了吧。]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1715 alignleft" title="css_border" src="http://www.prower.cn/wp-content/uploads/2009/12/css_border.png" alt="css_border" width="250" height="100" />左右结构是平常页面中最经常看到的结构，简洁一些的页面就会使用边框将左右两边隔开，但往往由于左右两边的内容可能是不等高的，所以就会有一高一低的现象。这个时候不管是给A写个边框还是给B写个边框，都会有高低不平，解决这个边框的高低不平之前有看过很多解决方法，但总的来说有些复杂，其实有一种取巧的方法就可以做到，那就是利用CSS属性中的负值。</p>
<p>比如这个示例图中的边框，取一个DIV将A、B两部分都包容起来，然后写border：1px solid #000;再给A容器写右边框border-right:1px solid #000;B容器也写边框border-left:1px solid #000;这样不管哪边高哪边低，都会保证起码有一条边框线是从头到底的。</p>
<p>但这样两条边框线就会造成重复，于是可以给B容器写margin-left:-1px;这样让两条边框重叠在一起，即可解决边框重复的问题。</p>
<p>PS:回头一看，写了个这么囧的日志，算了，既然写了就发了吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1714/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IE下文本被折行的解决方案</title>
		<link>http://www.prower.cn/technic/1483</link>
		<comments>http://www.prower.cn/technic/1483#comments</comments>
		<pubDate>Sat, 27 Jun 2009 09:13:40 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[white-space]]></category>
		<category><![CDATA[word-break]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1483</guid>
		<description><![CDATA[无论何时，IE总是让页面制作者感到那么的黯然销魂，尤其是IE6，IE7次之，虽然IE8已经做了很大的改进，但由于XP用户的数量实在太大，而且大部分不愿意升级他们的浏览器，所以页面制作者只能一次又一次的被IE6折磨得死去活来。 今天在写页面的时候，碰到了折行的问题，正好复习一下CSS中关于断行处理的问题，在这里纪录一下心得： HTML结构及CSS样式如下： &#60;ul&#62; &#60;li&#62;&#60;a href=”#”&#62;&#8230;&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href=”#”&#62;&#8230;&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href=”#”&#62;&#8230;&#60;/a&#62;&#60;/li&#62; &#60;/ul&#62; li {float:left; margin-right:10px; line-height:20px;} 这是不定宽的浮动，可是当这段结构在IE6及IE7下显示却变成了这样，文字被折行显示： 这个折行显示的问题，只要强制文本不换行显示就可以解决，在CSS中关于换行的属于有两个分别是word-break以及white-space，其中word-break是IE的专有属性，由于这个折行问题只在IE下会出现，所以先试一下word-break。 word-break有三个参数：normal、break-all、keep-all normal : 　依照亚洲语言和非亚洲语言的文本规则，允许在字内换行 break-all : 　该行为与亚洲语言的normal相同。也允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本 keep-all : 　与所有非亚洲语言的normal相同。对于中文，韩文，日文，不允许字断开。适合包含少量亚洲文本的非亚洲文本 由于是要不允许文本字间断行，所以使用第三个参数keep-all，但是当文字中有空格的时候，依然会出现折行的现象： 而white-space则是检索对象的空格处理方式的，同样有三个参数：normal、pre、nowrap normal : 默认处理方式 pre : 用等宽字体显示预先格式化的文本。不合并字间的空白距离和进行两端对齐。参阅pre对象 nowrap : 强制在同一行内显示所有文本，直到文本结束或者遭遇br对象。参阅td，div等对象的nowrap属性（特性） 所以当文本对象中存在空格，导致文本显示折行的话，可以使用white-space:nowrap，即可解决文本折行的问题。]]></description>
			<content:encoded><![CDATA[<p>无论何时，IE总是让页面制作者感到那么的黯然销魂，尤其是IE6，IE7次之，虽然IE8已经做了很大的改进，但由于XP用户的数量实在太大，而且大部分不愿意升级他们的浏览器，所以页面制作者只能一次又一次的被IE6折磨得死去活来。</p>
<p>今天在写页面的时候，碰到了折行的问题，正好复习一下CSS中关于断行处理的问题，在这里纪录一下心得：</p>
<p>HTML结构及CSS样式如下：</p>
<blockquote><p>&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=”#”&gt;&#8230;&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”#”&gt;&#8230;&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”#”&gt;&#8230;&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p>li {float:left; margin-right:10px; line-height:20px;}</p></blockquote>
<p><span id="more-1483"></span></p>
<p>这是不定宽的浮动，可是当这段结构在IE6及IE7下显示却变成了这样，文字被折行显示：</p>
<p><img class="alignnone size-full wp-image-1484" title="blogroll" src="http://www.prower.cn/wp-content/uploads/2009/06/blogroll.png" alt="blogroll" width="239" height="156" /></p>
<p>这个折行显示的问题，只要强制文本不换行显示就可以解决，在CSS中关于换行的属于有两个分别是<strong>word-break</strong>以及<strong>white-space</strong>，其中word-break是IE的专有属性，由于这个折行问题只在IE下会出现，所以先试一下word-break。</p>
<p>word-break有三个参数：normal、break-all、keep-all</p>
<blockquote><p><strong>normal</strong> : 　依照亚洲语言和非亚洲语言的文本规则，允许在字内换行</p>
<p><strong>break-all</strong> : 　该行为与亚洲语言的normal相同。也允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本</p>
<p><strong>keep-all</strong> : 　与所有非亚洲语言的normal相同。对于中文，韩文，日文，不允许字断开。适合包含少量亚洲文本的非亚洲文本</p></blockquote>
<p>由于是要不允许文本字间断行，所以使用第三个参数keep-all，但是当文字中有空格的时候，依然会出现折行的现象：</p>
<p><img class="alignnone size-full wp-image-1485" title="blogroll_1" src="http://www.prower.cn/wp-content/uploads/2009/06/blogroll_1.png" alt="blogroll_1" width="245" height="163" /></p>
<p>而<strong>white-space</strong>则是检索对象的空格处理方式的，同样有三个参数：normal、pre、nowrap</p>
<blockquote><p><strong>normal : </strong> 默认处理方式</p>
<p><strong>pre : </strong> 用等宽字体显示预先格式化的文本。不合并字间的空白距离和进行两端对齐。参阅pre对象</p>
<p><strong>nowrap : </strong> 强制在同一行内显示所有文本，直到文本结束或者遭遇br对象。参阅td，div等对象的nowrap属性（特性）</p></blockquote>
<p>所以当文本对象中存在空格，导致文本显示折行的话，可以使用white-space:nowrap，即可解决文本折行的问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1483/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>为什么视觉设计师需要懂HTML</title>
		<link>http://www.prower.cn/technic/1465</link>
		<comments>http://www.prower.cn/technic/1465#comments</comments>
		<pubDate>Tue, 23 Jun 2009 13:56:04 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[产品设计]]></category>
		<category><![CDATA[平面设计]]></category>
		<category><![CDATA[视觉设计]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1465</guid>
		<description><![CDATA[注：本文所说的视觉设计师专指网页视觉设计师。 网页设计师与平面设计师都归类为设计师，其实这两个职业是跨行业的，虽然有很多设计师一直在跨行业工作着。这两个职业的最大区别应该是在思维上，对于平面设计师来说，天马行空般的创新思维很重要，他们需要的是在一张白纸上勾画出符合客户需求的绚丽创意；而对于网页设计师来说，更多的是需要考虑创意在网络上实现的成本以及可能性，天马行空般的思维成了次要的。 这也就是为何很多时候，网页设计师去做平面设计师的工作要比反过来容易得多。也许可以用这样一个比喻来形容：网页设计师去做平面设计师的工作就像是放开圈养在马棚里的马，也许没了撒野的能力，但还能奔跑；而平面设计师去做网页设计师的工作，则更像是原本狂奔的野马突然被圈养在马棚里，框架的束缚会让野马变成手足无措。 回到标题提出的问题，为什么视觉设计师需要懂HTML？ HTML就是那束缚野马的框架。任何天马行空的创意都需要限定在这个框架之中，并非是创意无法实现，而是需要考虑实现创意的成本。 对于平面设计师来说，画面是设计的核心，画面就是他们所想要表达的内容；而对于网页设计师来说，画面则是用来衬托内容的一种形式，内容才是网页设计师所要表达出来的核心。 相对于平面设计的单一性来说，网页设计更多的还有注重设计的可重用性。每个网站都是由很多的页面构成的，而这些页面中的样式大部分都是可重用的。 如果视觉设计师不懂HTML，不能准确的分析一个网页的结构，那将可能给开发的成本带来很大的提高。而互联网产品的一个特点是更新迭代的时间快，如果投入的成本过高则会影响更新迭代的速率，最终将会影响到产品的发展。 最后说一点，如果视觉设计师不懂HTML，那对开发人员来说，则是一种灾难。]]></description>
			<content:encoded><![CDATA[<p>注：本文所说的视觉设计师专指网页视觉设计师。</p>
<p>网页设计师与平面设计师都归类为设计师，其实这两个职业是跨行业的，虽然有很多设计师一直在跨行业工作着。这两个职业的最大区别应该是在思维上，对于平面设计师来说，天马行空般的创新思维很重要，他们需要的是在一张白纸上勾画出符合客户需求的绚丽创意；而对于网页设计师来说，更多的是需要考虑创意在网络上实现的成本以及可能性，天马行空般的思维成了次要的。</p>
<p>这也就是为何很多时候，网页设计师去做平面设计师的工作要比反过来容易得多。也许可以用这样一个比喻来形容：网页设计师去做平面设计师的工作就像是放开圈养在马棚里的马，也许没了撒野的能力，但还能奔跑；而平面设计师去做网页设计师的工作，则更像是原本狂奔的野马突然被圈养在马棚里，框架的束缚会让野马变成手足无措。</p>
<p><span id="more-1465"></span></p>
<p>回到标题提出的问题，为什么视觉设计师需要懂HTML？</p>
<p>HTML就是那束缚野马的框架。任何天马行空的创意都需要限定在这个框架之中，并非是创意无法实现，而是需要考虑实现创意的成本。</p>
<p>对于平面设计师来说，画面是设计的核心，画面就是他们所想要表达的内容；而对于网页设计师来说，画面则是用来衬托内容的一种形式，内容才是网页设计师所要表达出来的核心。</p>
<p>相对于平面设计的单一性来说，网页设计更多的还有注重设计的可重用性。每个网站都是由很多的页面构成的，而这些页面中的样式大部分都是可重用的。</p>
<p>如果视觉设计师不懂HTML，不能准确的分析一个网页的结构，那将可能给开发的成本带来很大的提高。而互联网产品的一个特点是更新迭代的时间快，如果投入的成本过高则会影响更新迭代的速率，最终将会影响到产品的发展。</p>
<p>最后说一点，如果视觉设计师不懂HTML，那对开发人员来说，则是一种灾难。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1465/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>博客侧边栏订阅样式共享</title>
		<link>http://www.prower.cn/technic/1440</link>
		<comments>http://www.prower.cn/technic/1440#comments</comments>
		<pubDate>Fri, 12 Jun 2009 16:41:02 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[prowerV2]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[wordpress themes]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1440</guid>
		<description><![CDATA[博客之前侧边栏有六个订阅方式，分别是六个不同的在线阅读器，当时考虑的是提供更多的阅读器提供方式以满足不同需求的读者，但通过对订阅统计的分析，发现订阅博客的读者基本上是在Google Reader和鲜果两大阅读器阵营，而且更重要的是除了六个阅读器外没有提供原生的订阅链接，所以就修改了这一块的样式。 有朋友觉得这个样式好看些，希望共享样式出来，所以在这里就把样式共享出来。这里的修改只针对Prower V2这个主题。 先下载这个图片上传到主题的images文件夹里： 然后复制这段HTML结构到主题的rsidebar.php文件里替换原来的RSS结构，当然你要修改其中的订阅地址为你自己博客的订阅地址： &#60;div id=”rss”&#62; &#60;link title=”RSS 2.0&#8243; type=”application/rss+xml” href=”http://feed.prower.cn” rel=”alternate” /&#62; &#60;a id=”rssGoogle” title=”用Google阅读器订阅” href=”http://fusion.google.com/add?feedurl=http://feed.prower.cn” target=”_blank”&#62;用Google阅读器订阅&#60;/a&#62; &#60;a id=”rssIcon” title=”RSS订阅” href=”http://feed.prower.cn” target=”_blank”&#62;RSS订阅&#60;/a&#62; &#60;a id=”rssXiangou” title=”用鲜果阅读器订阅” href=”http://www.xianguo.com/subscribe.php?url=http://feed.prower.cn” target=”_blank”&#62;用鲜果阅读器订阅&#60;/a&#62; &#60;/div&#62; 再复制以下样式到style.css文件里，替换原来的RSS样式： #rss {width:290px; height:50px; overflow:hidden;} #rssGoogle,#rssIcon,#rssXiangou {float:left; padding-top:50px; overflow:hidden; display:block; background:url(images/rssBg.png) no-repeat;} #rssGoogle:hover,#rssIcon:hover,#rssXiangou:hover {background:url(images/rssBg.png) no-repeat -290px 0;} #rssGoogle {background-position:0 0; width:113px;} #rssGoogle:hover {background-position:-290px 0;} [...]]]></description>
			<content:encoded><![CDATA[<p>博客之前侧边栏有六个订阅方式，分别是六个不同的在线阅读器，当时考虑的是提供更多的阅读器提供方式以满足不同需求的读者，但通过对订阅统计的分析，发现订阅博客的读者基本上是在Google Reader和鲜果两大阅读器阵营，而且更重要的是除了六个阅读器外没有提供原生的订阅链接，所以就修改了这一块的样式。</p>
<p>有朋友觉得这个样式好看些，希望共享样式出来，所以在这里就把样式共享出来。这里的修改只针对<a href="http://www.prower.cn/work/1058" target="_blank">Prower V2</a>这个主题。</p>
<p>先下载这个图片上传到主题的images文件夹里：</p>
<p><img class="alignnone" title="RSS背景" src="http://www.prower.cn/wp-content/themes/prowerV2/images/rssBg.png" alt="" width="580" height="50" /></p>
<p><span id="more-1440"></span></p>
<p>然后复制这段HTML结构到主题的rsidebar.php文件里替换原来的RSS结构，当然你要修改其中的订阅地址为你自己博客的订阅地址：</p>
<blockquote><p>&lt;div id=”rss”&gt;<br />
&lt;link title=”RSS 2.0&#8243; type=”application/rss+xml” href=”http://feed.prower.cn” rel=”alternate” /&gt;<br />
&lt;a id=”rssGoogle” title=”用Google阅读器订阅” href=”http://fusion.google.com/add?feedurl=http://feed.prower.cn” target=”_blank”&gt;用Google阅读器订阅&lt;/a&gt;<br />
&lt;a id=”rssIcon” title=”RSS订阅” href=”http://feed.prower.cn” target=”_blank”&gt;RSS订阅&lt;/a&gt;<br />
&lt;a id=”rssXiangou” title=”用鲜果阅读器订阅” href=”http://www.xianguo.com/subscribe.php?url=http://feed.prower.cn” target=”_blank”&gt;用鲜果阅读器订阅&lt;/a&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>再复制以下样式到style.css文件里，替换原来的RSS样式：</p>
<blockquote><p>#rss {width:290px; height:50px; overflow:hidden;}<br />
#rssGoogle,#rssIcon,#rssXiangou {float:left; padding-top:50px; overflow:hidden; display:block; background:url(images/rssBg.png) no-repeat;}<br />
#rssGoogle:hover,#rssIcon:hover,#rssXiangou:hover {background:url(images/rssBg.png) no-repeat -290px 0;}<br />
#rssGoogle {background-position:0 0; width:113px;}<br />
#rssGoogle:hover {background-position:-290px 0;}<br />
#rssIcon {background-position:-113px 0; width:79px;}<br />
#rssIcon:hover{background-position:-403px 0;}<br />
#rssXiangou {background-position:-192px 0; width:98px;}<br />
#rssXiangou:hover {background-position:-482px 0;}</p></blockquote>
<p>完成以上三步，侧边栏的订阅样式就可以和我现在的一样了。</p>
<p><span style="color: #800000;">更新：如果复制过去后不能显示图片，请手动修改HTML结构里的双引号。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1440/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>前端开发调试利器：IETester</title>
		<link>http://www.prower.cn/technic/1262</link>
		<comments>http://www.prower.cn/technic/1262#comments</comments>
		<pubDate>Fri, 27 Mar 2009 05:28:06 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[IETester]]></category>
		<category><![CDATA[兼容性]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1262</guid>
		<description><![CDATA[话说搞前端开发的，每天都要被那些不同内核的浏览器折腾得死去活来的，除去使用同一WebKit内核的Safari和Chrome，还有使用Gecko内核的Firefox，最要命的是微软的Internet Explorer系列浏览器，在市场上同时存在三个不同年代的版本，每个版本对WEB标准的支持都各有不同，这简直是要了开发人员的命。 从前年开始微软就说要强制升级用户电脑中的IE6到IE7，结果事实证明这只是个不是愚人节的愚人玩笑而已，直到今天IE6仍在用户桌面浏览器的份额中领先着。 而最为让开发人员头痛的是，一台电脑默认情况下只能装一个版本的IE，所以开发时即使要调试IE浏览器也只能是通过安装绿色版或是其他模拟IE的软件去进行调试，但由于这些软件并不是原生的IE浏览器，所以有些时候开发人员不得不面临在软件里调试正常的页面到了原生的IE下又出现问题的尴尬局面。 IETester则是个很优秀的IE调试软件，可调试的IE版本从IE5.5到IE8，基本上完全覆盖了市面上所存在的IE版本，当然如果还有比IE5.5更老的IE版本的话，那就直接抛弃外加鄙视他吧。 一般情况下，WEB开发调试比较好的顺序是先Firefox然后再IE，有不对的地方再写Hacks，而如果这个调试顺序反过来的话，整个调试过程显然就要困难上一些。 在Firefox下有个前端开发人员必备的优秀插件——Firebug，而IE下也有个优秀的插件——DebugBar，而最新发布的IETester版本集成了DebugBar插件，很大程序上方便了开发人员。当然新版的IETester安装文件里没有集成DebugBar的安装，需要另外手动安装。 提供最新的DebugBar V5.2.2版下载：DebugBar V5.2.2]]></description>
			<content:encoded><![CDATA[<p>话说搞前端开发的，每天都要被那些不同内核的<a title="浏览器之战国时期" href="http://www.prower.cn/internet/503" target="_blank">浏览器</a>折腾得死去活来的，除去使用同一WebKit内核的Safari和Chrome，还有使用Gecko内核的Firefox，最要命的是微软的Internet Explorer系列浏览器，在市场上同时存在三个不同年代的版本，每个版本对WEB标准的支持都各有不同，这简直是要了开发人员的命。</p>
<p>从前年开始微软就说要强制升级用户电脑中的IE6到IE7，结果事实证明这只是个不是愚人节的愚人玩笑而已，直到今天IE6仍在用户桌面浏览器的份额中领先着。</p>
<p>而最为让开发人员头痛的是，一台电脑默认情况下只能装一个版本的IE，所以开发时即使要调试IE浏览器也只能是通过安装绿色版或是其他模拟IE的软件去进行调试，但由于这些软件并不是原生的IE浏览器，所以有些时候开发人员不得不面临在软件里调试正常的页面到了原生的IE下又出现问题的尴尬局面。</p>
<p><a href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">IETester</a>则是个很优秀的IE调试软件，可调试的IE版本从IE5.5到IE8，基本上完全覆盖了市面上所存在的IE版本，当然如果还有比IE5.5更老的IE版本的话，那就直接抛弃外加鄙视他吧。</p>
<p><span id="more-1262"></span></p>
<p><img class="alignnone size-medium wp-image-1264" title="ietester" src="http://www.prower.cn/wp-content/uploads/2009/03/ietester-600x476.png" alt="ietester" width="600" height="476" /></p>
<p>一般情况下，WEB开发调试比较好的顺序是先Firefox然后再IE，有不对的地方再写Hacks，而如果这个调试顺序反过来的话，整个调试过程显然就要困难上一些。</p>
<p>在Firefox下有个前端开发人员必备的优秀插件——<a href="https://addons.mozilla.org/zh-CN/firefox/addon/1843" target="_blank">Firebug</a>，而IE下也有个优秀的插件——<a href="http://www.debugbar.com/" target="_blank">DebugBar</a>，而最新发布的IETester版本集成了DebugBar插件，很大程序上方便了开发人员。当然新版的IETester安装文件里没有集成DebugBar的安装，需要另外手动安装。</p>
<p>提供最新的DebugBar V5.2.2版下载：<a title="DebugBar" href="http://www.box.net/shared/ypq88ngl1r" target="_blank">DebugBar V5.2.2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1262/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>网页优化之CSS Sprites</title>
		<link>http://www.prower.cn/technic/1249</link>
		<comments>http://www.prower.cn/technic/1249#comments</comments>
		<pubDate>Wed, 25 Mar 2009 12:55:36 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[CSS Sprites]]></category>
		<category><![CDATA[代码优化]]></category>
		<category><![CDATA[网页优化]]></category>
		<category><![CDATA[背景定位]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1249</guid>
		<description><![CDATA[对于访问者来说，网站的页面能够即时的呈现出来，无疑是让人感到很愉快的一件事；而相反的是如果网页打开速度很慢的话，无疑这个网站将损失很多的用户。据许多研究表明：用户最满意的打开网页时间，是在2秒以下；用户能够忍受的最长等待时间的中位数，在6～8秒之间；如果等待12秒以后，网页还是没有载入，那么99%以上的用户会关闭这个网页，不再等待。 网页的呈现速度直接影响到网站的用户访问数量，所以网站优化是网站建设中必不可少的步骤。虽然网页加载过程中的大部分时间是耗在图片及FLASH等元素的加载上，但很多时候，这些图片或是FLASH等元素是网站的建设者很难控制的，所以大部分的网站优化还是从网站的代码优化着手。 减少HTTP请求数则是代码优化中很基础也很重要的一个环节，而一个网页中的所使用到的图片（诸如小图标之类的）往往占有很大部分的HTTP请求，所以将这些图片合并成一张大的背景图时，不但可以减少图片整体的大小外，最重要的还是可以减少HTTP请求数。 对于CSS的背景图属性相信大部分人都知道，其中有一个属性是“background-position”，即是背景图像定位，利用这个属性可以很容易的定位到图像的某个位置，这就是CSS Sprites的原理。 通过将多个小图片合并成一张大图片，然后利用背景图像定位指定地方所需要的图片，这样子浏览器只需要下载一次这张图片，就可以用于多个地方的图片显示。 虽然利用CSS Sprites可以减少HTTP请求数，也可以减少图片的总体大小，但并不是所有的网页中的背景图都可以利用CSS Sprites来解决的，比如有平铺行为的背景图就不太适合使用CSS Sprites来处理。因为小图片合并而成的大图片可能会产生空隙，如果有空隙的话，就无法使用CSS Sprites来处理平铺背景。 虽然CSS Sprites有很多好处，但同样有让开发人员郁闷的地方，那就是要计算大图片里的小图片的精确位置，图片大了的话计算起精确位置时会让很多同学抓狂的。]]></description>
			<content:encoded><![CDATA[<p>对于访问者来说，网站的页面能够即时的呈现出来，无疑是让人感到很愉快的一件事；而相反的是如果网页打开速度很慢的话，无疑这个网站将损失很多的用户。据许多研究<a title="网页打开速度的心理学" href="http://www.ruanyifeng.com/blog/2009/03/the_psychology_of_web_performance.html" target="_blank">表明</a>：用户最满意的打开网页时间，是在2秒以下；用户能够忍受的最长等待时间的中位数，在6～8秒之间；如果等待12秒以后，网页还是没有载入，那么99%以上的用户会关闭这个网页，不再等待。</p>
<p>网页的呈现速度直接影响到网站的用户访问数量，所以网站优化是网站建设中必不可少的步骤。虽然网页加载过程中的大部分时间是耗在图片及FLASH等元素的加载上，但很多时候，这些图片或是FLASH等元素是网站的建设者很难控制的，所以大部分的网站优化还是从网站的代码优化着手。</p>
<p>减少HTTP请求数则是代码优化中很基础也很重要的一个环节，而一个网页中的所使用到的图片（诸如小图标之类的）往往占有很大部分的HTTP请求，所以将这些图片合并成一张大的背景图时，不但可以减少图片整体的大小外，最重要的还是可以减少HTTP请求数。</p>
<p><span id="more-1249"></span></p>
<p>对于<a title="CSS背景图像属性解读" href="http://www.prower.cn/technic/309" target="_blank">CSS的背景图属性</a>相信大部分人都知道，其中有一个属性是“<span style="color: #008000;">background-position</span>”，即是背景图像定位，利用这个属性可以很容易的定位到图像的某个位置，这就是CSS Sprites的原理。</p>
<p>通过将多个小图片合并成一张大图片，然后利用背景图像定位指定地方所需要的图片，这样子浏览器只需要下载一次这张图片，就可以用于多个地方的图片显示。</p>
<p>虽然利用CSS Sprites可以减少HTTP请求数，也可以减少图片的总体大小，但并不是所有的网页中的背景图都可以利用CSS Sprites来解决的，比如有平铺行为的背景图就不太适合使用CSS Sprites来处理。因为小图片合并而成的大图片可能会产生空隙，如果有空隙的话，就无法使用CSS Sprites来处理平铺背景。</p>
<p>虽然CSS Sprites有很多好处，但同样有让开发人员郁闷的地方，那就是要计算大图片里的小图片的精确位置，图片大了的话计算起精确位置时会让很多同学抓狂的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1249/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Flash的层叠顺序问题(z-index)</title>
		<link>http://www.prower.cn/technic/1032</link>
		<comments>http://www.prower.cn/technic/1032#comments</comments>
		<pubDate>Thu, 08 Jan 2009 02:50:40 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[z-index]]></category>
		<category><![CDATA[层叠顺序]]></category>
		<category><![CDATA[窗口模式]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=1032</guid>
		<description><![CDATA[很多人在写页面代码时都会遇到过这样一个问题，那就是当Flash与页面中的其它HTML结构有重叠的时候，默认情况下Flash总是显示在最上面，从而遮挡住了与它有重叠部分的HTML结构，就算为该Flash或是HTML结构标签定义z-index属性却依然是无效的。 因为默认情况下在网页中添加的Flash在浏览器中是以窗口模式存在的，是独立于浏览器的HTML结构渲染的，所以这种情况下的Flash会遮盖住与它重叠的HTML。 比如这个页面：Flash的层叠顺序（z-index） 在Adobe Flash的发布设置里关于HTML的设置有一项是“窗口模式”，这里面提供了三个选项，分别是：窗口(window)、不透明无窗口(opaque)、透明无窗口(transparent)。 这三种模式分别表示着Flash在页面中的三种表现形式，根据这三种表现形式，我们就找到了解决这个问题的方法，就是将页面中的Flash模式(wmode)设置为不透明无窗口(opaque)或者是透明无窗口(transparent)，在这两种模式下页面中的Flash将与HTML结构是处于同一级别的，所以就可以通过z-index来控制页面中的重叠部分到底是Flash显示在上还是HTML结构显示在上。 比如这个页面：Flash的层叠顺序(z-index) 当我们需要在页面中加载一个弹出Flash广告时，并且不希望它被页面中的其它Flash所遮挡时，就可以使用这种方法来解决。同样的如果这个弹出Flash是不规则形状的时候，就可以将模式(wmode)设置为透明无窗口(transparent)，这样即可以除去Flash本身所带有的背景。]]></description>
			<content:encoded><![CDATA[<p>很多人在写页面代码时都会遇到过这样一个问题，那就是当Flash与页面中的其它HTML结构有重叠的时候，默认情况下Flash总是显示在最上面，从而遮挡住了与它有重叠部分的HTML结构，就算为该Flash或是HTML结构标签定义z-index属性却依然是无效的。</p>
<p>因为默认情况下在网页中添加的Flash在浏览器中是以窗口模式存在的，是独立于浏览器的HTML结构渲染的，所以这种情况下的Flash会遮盖住与它重叠的HTML。</p>
<p>比如这个页面：<a href="http://www.prower.cn/page/z-index/1.html" target="_blank">Flash的层叠顺序（z-index）</a></p>
<p>在Adobe Flash的发布设置里关于<a href="http://www.prower.cn/tag/html" target="_blank">HTML</a>的设置有一项是“窗口模式”，这里面提供了三个选项，分别是：窗口(window)、不透明无窗口(opaque)、透明无窗口(transparent)。</p>
<p><span id="more-1032"></span></p>
<p>这三种模式分别表示着Flash在页面中的三种表现形式，根据这三种表现形式，我们就找到了解决这个问题的方法，就是将页面中的Flash模式(wmode)设置为不透明无窗口(opaque)或者是透明无窗口(transparent)，在这两种模式下页面中的Flash将与HTML结构是处于同一级别的，所以就可以通过z-index来控制页面中的重叠部分到底是Flash显示在上还是HTML结构显示在上。</p>
<p>比如这个页面：<a href="http://www.prower.cn/page/z-index/2.html" target="_blank">Flash的层叠顺序(z-index)</a></p>
<p>当我们需要在页面中加载一个弹出Flash广告时，并且不希望它被页面中的其它Flash所遮挡时，就可以使用这种方法来解决。同样的如果这个弹出Flash是不规则形状的时候，就可以将模式(wmode)设置为透明无窗口(transparent)，这样即可以除去Flash本身所带有的背景。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/1032/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>解读HTML：关于Profile的只言片语</title>
		<link>http://www.prower.cn/technic/938</link>
		<comments>http://www.prower.cn/technic/938#comments</comments>
		<pubDate>Sat, 13 Dec 2008 04:43:46 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[hCard]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[profile]]></category>
		<category><![CDATA[XFN]]></category>
		<category><![CDATA[微格式]]></category>
		<category><![CDATA[网页制作]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=938</guid>
		<description><![CDATA[制作出一个页面其实是很简单的事，但是制作出一个好的页面却是一件挺困难的事，要使一个页面最终能很好的呈现出来，包括在许多未知的环境下都能很好的呈现，这即是一件更困难的事情。在一份基于Web标准的HTML文档中，需要声明很多的规则，比如DOCTYPE声明、xmlns声明等，只有做出了这些声明，网页文档才能更好的在不同的浏览器中最大程度的呈现出一样的效果。 在使用Wordpress程序搭建的博客（其它程序搭建的博客也可能有）的页面代码里会有一句这样的代码： &#60;head profile=”http://gmpg.org/xfn/11&#8243;&#62; 而当我们在博客的后台添加友情链接时如果标注一下链接关系的话，就能得到这样的代码： &#60;a href=”http://www.etcis.com/” rel=”friend” target=”_blank”&#62;阿猎的SEO博客&#60;/a&#62; 在这个链接中的rel=”friend”即是对这个链接的关系声明，声明我与该链接的主人是朋友关系，当然除朋友关系外还有很多其他关系可选，具体请查看XFN1.1。 在之前日志中的声明中我们即可得知，如果没有一份统一的规则约束的话，浏览器们可以根据自己设定的默认样式来呈现网页，呈现出来的效果可能就会有很大的偏差。而对于这种关系网络来说，如果没有一份统一的规则约定的话，就变得没有丝毫的意义，比如你把朋友定义成“frieng”，而我要按照拼音来定义成“pengyou”，这个定义的数据将变得毫无意义。 所以我们在HTML文档的&#60;head /&#62;标签中使用“profile”属性引入一个声明，声明在这个HTML文档中使用了 XML Friends Network (XFN) 微格式，然后按照这份XFN微格式中约定的方式来描述关系网络，于是即使是不同用户代理器访问这些数据只要其遵循XFN的约定即可正确的读取出其中的关系数据。 当然，这其中的微格式数据对于平常通过浏览器来阅读HTML文档的用户来说，没有什么实际性的意义，可是对于某些用户代理器来说，通过读取这份XFN微格式数据再加上其它的诸如hCard等微格式数据，那么即可在互联网上呈现出人与人之间的关系网络。 对于不同的数据声明需要为其指定描述的位置，而profile的值即是对这个数据的描述的位置，或者可以简单的理解成是为不同的用户代理器指定相同的约定规则。 对于一个页面中引用的多份数据声明，只需要在profile的值中将其用空格隔开即可： &#60;head profile=”http://www.gmpg.org/xmdp/samplehtmlprofile http://www.solitude.dk/blogprofile/011/”&#62;]]></description>
			<content:encoded><![CDATA[<p>制作出一个页面其实是很简单的事，但是制作出一个好的页面却是一件挺困难的事，要使一个页面最终能很好的呈现出来，包括在许多未知的环境下都能很好的呈现，这即是一件更困难的事情。在一份基于Web标准的HTML文档中，需要声明很多的规则，比如<a href="http://www.prower.cn/technic/928" target="_blank">DOCTYPE声明</a>、<a href="http://www.prower.cn/technic/932" target="_blank">xmlns声明</a>等，只有做出了这些声明，网页文档才能更好的在不同的浏览器中最大程度的呈现出一样的效果。</p>
<p>在使用Wordpress程序搭建的博客（其它程序搭建的博客也可能有）的页面代码里会有一句这样的代码：</p>
<blockquote><p>&lt;head profile=”http://gmpg.org/xfn/11&#8243;&gt;</p></blockquote>
<p>而当我们在博客的后台添加友情链接时如果标注一下链接关系的话，就能得到这样的代码：</p>
<blockquote><p>&lt;a href=”http://www.etcis.com/” rel=”friend” target=”_blank”&gt;阿猎的SEO博客&lt;/a&gt;</p></blockquote>
<p><span id="more-938"></span></p>
<p>在这个链接中的rel=”friend”即是对这个链接的关系声明，声明我与该链接的主人是朋友关系，当然除朋友关系外还有很多其他关系可选，具体请查看<a href="http://gmpg.org/xfn/11" target="_blank">XFN1.1</a>。</p>
<p>在之前日志中的声明中我们即可得知，如果没有一份统一的规则约束的话，浏览器们可以根据自己设定的默认样式来呈现网页，呈现出来的效果可能就会有很大的偏差。而对于这种关系网络来说，如果没有一份统一的规则约定的话，就变得没有丝毫的意义，比如你把朋友定义成“frieng”，而我要按照拼音来定义成“pengyou”，这个定义的数据将变得毫无意义。</p>
<p>所以我们在HTML文档的&lt;head /&gt;标签中使用“profile”属性引入一个声明，声明在这个HTML文档中使用了 XML Friends Network (XFN) 微格式，然后按照这份XFN微格式中约定的方式来描述关系网络，于是即使是不同用户代理器访问这些数据只要其遵循XFN的约定即可正确的读取出其中的关系数据。</p>
<p>当然，这其中的微格式数据对于平常通过浏览器来阅读HTML文档的用户来说，没有什么实际性的意义，可是对于某些用户代理器来说，通过读取这份XFN微格式数据再加上其它的诸如hCard等微格式数据，那么即可在互联网上呈现出人与人之间的关系网络。</p>
<p>对于不同的数据声明需要为其指定描述的位置，而profile的值即是对这个数据的描述的位置，或者可以简单的理解成是为不同的用户代理器指定相同的约定规则。</p>
<p>对于一个页面中引用的多份数据声明，只需要在profile的值中将其用空格隔开即可：</p>
<blockquote><p>&lt;head profile=”http://www.gmpg.org/xmdp/samplehtmlprofile http://www.solitude.dk/blogprofile/011/”&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/938/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解读HTML：命名空间与字符编码</title>
		<link>http://www.prower.cn/technic/932</link>
		<comments>http://www.prower.cn/technic/932#comments</comments>
		<pubDate>Tue, 09 Dec 2008 14:36:07 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[GB2312]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[xmlns]]></category>
		<category><![CDATA[字符编码]]></category>
		<category><![CDATA[网页结构]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=932</guid>
		<description><![CDATA[在做项目的过程中，我们经常会建立各种各样的规范，以方便团队之间更好的合作更好的完成项目；同样我们也经常会听到各种各样的协议，比如Google的IM软件Gtalk使用的开放的XMPP协议，只要其他IM软件也遵循XMPP协议就能与Gtalk使用互通；而互联网上的信息无以计数，这些信息本身是独立存在的，如何将其串联并呈现在用户眼前，就需要使用到HTTP协议。 同样的道理，因为浏览器们各自的内核不同，对于默认样式的渲染也不尽相同，所以就需要一份各浏览器都遵循的规则来保证同一个网页文档在不同浏览器上呈现出来的样式是一致的，这个规则就是DOCTYPE声明。 因为互联网是互通的，所以任意的两个或者以上的网页文档都可能会涉及到数据交换，而因为XML语言是允许用户自定义标签的，所以任意两个交换的文档就可能会出现相同的标签，从而导致相同标签的冲突，所以就需要一个命名空间以区分开交换文档中可能存在的相同标签。 XHTML做为HTML向XML过渡的一种语言，并不能实现XML语言中的用户自定义标签，所以XHMTL文档中的命名空间都是相同的： &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; xmlns即是XHTML namespace的缩写，也就是所谓的“命名空间”。与DOCTYPE声明一样，xmlns也属于一种声明。与HTML文档中仍然存在DOCTYPE声明不一样的是，在HTML文档是不存在xmlns的，我们平常所见到的xmlns都是出现在XHTML文档中的。 在制作一个网页的时候，除了在开始的时候声明DOCTYPE（文档类型）之外，如果是XHTML文档还需要声明命名空间，而第三个需要声明的就是网页文档的字符编码类型： &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; 为了能被浏览器正确的解释以及通过W3C验证，每个XHTML文档都应该声明所使用的字符编码。很多时候网页文档出现乱码大部分都是由于字符编码不对而引起的。 utf-8是unicode的一种变长度的编码表达方式，做为一种全球通用型的字符编码正越来越多的网页文档所使用，使用utf-8字符编码的网页可最大程度的避免不同区域的用户访问相同网页时因字符编码不同而导致的乱码现象。 但是当我们打开国内的大多数网站看，特别是门户型的大型网站，关于字符编码的声明却并非是utf-8，而是gb2312： &#60;meta http-equiv=”Content-Type” content=”text/html; charset=gb2312&#8243; /&#62; 当然，除了gb2312外还有一些网站使用gbk或者是gb18030编码，这三种字符编码都是属于简体中文字符集。也就是说，如果一台电脑没有安装简体中文字符集时，当它访问字符编码为gb2312的中文网页时，则显示出来的是乱码。 既然使用gb2312字符编码时会因为不同区域的用户访问而可能出现乱码现象，那为何不使用utf-8呢？ 其中一个原因可能历史遗留的原因，而另一个更重要的原因应该是由于两种编码的存储方式不同而造成的文档体积不同。 使用gb2312字符编码集时，一个汉字是占用2个字节的大小，而一个汉字在utf-8编码中所占的字节数却往往都是在3个字节，甚至是3个以上的字节。所以对于同一个中文文档来说，使用gb2312字符编码来进行存储的体积是要小于utf-8编码所存储的文档大小的。 而对于文字多访问量大的中文网站来说，使用gb2312编码的网页文档在下载传输上可以节省下不小的流量，再者是因为中文网站的用户群体基本上都锁定在中文用户上，这些也就是很多网站使用gb2312编码而不是utf-8编码的原因。 但是文字多访问量大的网站，国内并不多，再加上可能成对的乱码问题，所以在制作网页的时候推荐使用utf-8编码。 当然，不管用何种编码，最重要的是整站使用的编码要统一。 对于字符编码的声明除了上面的方式，还可能看到另一种声明方式： &#60;meta http-equiv=”Content-Language” content=”gb2312&#8243; /&#62; &#60;meta http-equiv=”Content-Language” content=”zh-CN” /&#62; 这种声明方式是针对老版本的浏览器的，在浏览器已经普遍更新换代的今天已经不推荐使用这种声明方式。]]></description>
			<content:encoded><![CDATA[<p>在做项目的过程中，我们经常会建立各种各样的规范，以方便团队之间更好的合作更好的完成项目；同样我们也经常会听到各种各样的协议，比如Google的IM软件Gtalk使用的开放的XMPP协议，只要其他IM软件也遵循XMPP协议就能与Gtalk使用互通；而互联网上的信息无以计数，这些信息本身是独立存在的，如何将其串联并呈现在用户眼前，就需要使用到HTTP协议。</p>
<p>同样的道理，因为浏览器们各自的内核不同，对于默认样式的渲染也不尽相同，所以就需要一份各浏览器都遵循的规则来保证同一个网页文档在不同浏览器上呈现出来的样式是一致的，这个规则就是<a href="http://www.prower.cn/technic/928" target="_blank">DOCTYPE声明</a>。</p>
<p>因为互联网是互通的，所以任意的两个或者以上的网页文档都可能会涉及到数据交换，而因为XML语言是允许用户自定义标签的，所以任意两个交换的文档就可能会出现相同的标签，从而导致相同标签的冲突，所以就需要一个命名空间以区分开交换文档中可能存在的相同标签。</p>
<p><span id="more-932"></span></p>
<p>XHTML做为HTML向XML过渡的一种语言，并不能实现XML语言中的用户自定义标签，所以XHMTL文档中的命名空间都是相同的：</p>
<blockquote><p>&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;</p></blockquote>
<p>xmlns即是XHTML namespace的缩写，也就是所谓的“命名空间”。与DOCTYPE声明一样，xmlns也属于一种声明。与HTML文档中仍然存在DOCTYPE声明不一样的是，在HTML文档是不存在xmlns的，我们平常所见到的xmlns都是出现在XHTML文档中的。</p>
<p>在制作一个网页的时候，除了在开始的时候声明DOCTYPE（文档类型）之外，如果是XHTML文档还需要声明命名空间，而第三个需要声明的就是网页文档的字符编码类型：</p>
<blockquote><p>&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;</p></blockquote>
<p>为了能被浏览器正确的解释以及通过W3C验证，每个XHTML文档都应该声明所使用的字符编码。很多时候网页文档出现乱码大部分都是由于字符编码不对而引起的。</p>
<p>utf-8是unicode的一种变长度的编码表达方式，做为一种全球通用型的字符编码正越来越多的网页文档所使用，使用utf-8字符编码的网页可最大程度的避免不同区域的用户访问相同网页时因字符编码不同而导致的乱码现象。</p>
<p>但是当我们打开国内的大多数网站看，特别是门户型的大型网站，关于字符编码的声明却并非是utf-8，而是gb2312：</p>
<blockquote><p>&lt;meta http-equiv=”Content-Type” content=”text/html; charset=gb2312&#8243; /&gt;</p></blockquote>
<p>当然，除了gb2312外还有一些网站使用gbk或者是gb18030编码，这三种字符编码都是属于简体中文字符集。也就是说，如果一台电脑没有安装简体中文字符集时，当它访问字符编码为gb2312的中文网页时，则显示出来的是乱码。</p>
<p>既然使用gb2312字符编码时会因为不同区域的用户访问而可能出现乱码现象，那为何不使用utf-8呢？</p>
<p>其中一个原因可能历史遗留的原因，而另一个更重要的原因应该是由于两种编码的存储方式不同而造成的文档体积不同。</p>
<p>使用gb2312字符编码集时，一个汉字是占用2个字节的大小，而一个汉字在utf-8编码中所占的字节数却往往都是在3个字节，甚至是3个以上的字节。所以对于同一个中文文档来说，使用gb2312字符编码来进行存储的体积是要小于utf-8编码所存储的文档大小的。</p>
<p>而对于文字多访问量大的中文网站来说，使用gb2312编码的网页文档在下载传输上可以节省下不小的流量，再者是因为中文网站的用户群体基本上都锁定在中文用户上，这些也就是很多网站使用gb2312编码而不是utf-8编码的原因。</p>
<p>但是文字多访问量大的网站，国内并不多，再加上可能成对的乱码问题，所以在制作网页的时候推荐使用utf-8编码。</p>
<p>当然，不管用何种编码，最重要的是整站使用的编码要统一。</p>
<p>对于字符编码的声明除了上面的方式，还可能看到另一种声明方式：</p>
<blockquote><p><span style="text-decoration: line-through;">&lt;meta http-equiv=”Content-Language” content=”gb2312&#8243; /&gt;</span></p>
<p>&lt;meta http-equiv=”Content-Language” content=”zh-CN” /&gt;</p></blockquote>
<p>这种声明方式是针对老版本的浏览器的，在浏览器已经普遍更新换代的今天已经不推荐使用这种声明方式。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/932/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>解读HTML：WEB标准从头开始</title>
		<link>http://www.prower.cn/technic/928</link>
		<comments>http://www.prower.cn/technic/928#comments</comments>
		<pubDate>Fri, 05 Dec 2008 15:58:45 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[DOCTYPE]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[网页制作]]></category>
		<category><![CDATA[网页结构]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=928</guid>
		<description><![CDATA[在较早之前的网页上，我们经常可以看到如下的网页结构代码： &#60;html&#62; &#60;head&#62; &#60;title&#62;这是一个网页&#60;/title&#62; &#60;meta name=”&#8230;” content=”&#8230;” /&#62; &#8230;&#8230; &#60;/head&#62; &#60;body&#62; &#8230;&#8230; &#60;/body&#62; &#60;/html&#62; 很显然的，这种结构的网页代码是不符合Web标准规范的，但是浏览器仍然可以很好的呈现出这个网页来，只要代码没出什么错误。这个其实就像是用Table布局的页面跟Div构架的页面一样，浏览器都可以呈现出来，关健是哪个页面呈现的质量会更高。 做出一个页面，跟做好一个页面，中间有着很遥远的距离。 在浏览器的发展历程中，微软凭借着将Internet Explorer捆绑进Windows操作系统中，从来成为浏览器市场上的霸主，从而也造成了一系列的IE对W3C组织所制定的Web标准于不顾的事情，微软的IE一直都只遵循自家的Web标准。很庆幸的是，微软决定在他的IE8中支持Web标准，虽然这事还没最终确定。除微软的IE外，Mozilla Firefox、Apple Safari、Opera、Chrome等浏览器则以支持Web标准的名义与IE做得长久的对抗。 浏览器的不同，于是就造成了对HTML代码默认解析的不同，所以即使同样的代码在不同的浏览器下也可能呈现出不同的样式来，于是这就需要有一份众浏览器都遵循的规则来协调众浏览器之间的差异，这份规则需要一个声明来引用它，这个声明就是DOCTYPE——document type（文档类型）。 DOCTYPE声明是标准网页中必不可少的部分，所以，想要制作一个符合W3C标准的网页，首先就需要为这个页面声明一个文档类型。 DOCTYPE所声明的DTD（文档类型定义）分为三种，分别是： Transitional（过渡的）：要求不是很严格的DTD，允许你继续在页面中使用HTML4.01的标签； Strict（严格的）：这是制作页面时理想的DTD方式，但是这个文档类型定义不允许使用任何的表现层上的标签和属性； Frameset（框架的）：这个专门针对页面设计中包含有框架的DTD。 由于框架型的设计可能对网页在搜索引擎中收录的影响，很多网页中都不使用框架设计；而Strict的DTD对于大多数人来说还只是一种理想化的方式；Transitional型的DTD则是目前最适用也是使用最广泛的文档类型定义。 现在随便打开一个符合Web标准的网页，都可以在页面的最开始处看到这样一句声明： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; 这是一个关于XHTML网页文档的DOCTYPE声明。当然并不是说DOCTYPE声明只能针对XHTML网页文档，对于使用HTML4.01的网页文档来说，同样可以使用DOCTYPE声明： 过渡的DTD： &#60;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&#62; 严格的DTD： &#60;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>在较早之前的网页上，我们经常可以看到如下的网页结构代码：</p>
<blockquote><p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;这是一个网页&lt;/title&gt;</p>
<p>&lt;meta name=”&#8230;” content=”&#8230;” /&gt;</p>
<p>&#8230;&#8230;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&#8230;&#8230;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p></blockquote>
<p><span id="more-928"></span></p>
<p>很显然的，这种结构的网页代码是不符合Web标准规范的，但是浏览器仍然可以很好的呈现出这个网页来，只要代码没出什么错误。这个其实就像是用Table布局的页面跟Div构架的页面一样，浏览器都可以呈现出来，关健是哪个页面呈现的质量会更高。</p>
<p>做出一个页面，跟做好一个页面，中间有着很遥远的距离。</p>
<p>在<a href="http://www.prower.cn/internet/503" target="_blank">浏览器</a>的发展历程中，微软凭借着将Internet Explorer捆绑进Windows操作系统中，从来成为浏览器市场上的霸主，从而也造成了一系列的IE对W3C组织所制定的Web标准于不顾的事情，微软的IE一直都只遵循自家的Web标准。很庆幸的是，微软决定在他的IE8中支持Web标准，虽然这事还没最终确定。除微软的IE外，Mozilla Firefox、Apple Safari、Opera、Chrome等浏览器则以支持Web标准的名义与IE做得长久的对抗。</p>
<p>浏览器的不同，于是就造成了对HTML代码默认解析的不同，所以即使同样的代码在不同的浏览器下也可能呈现出不同的样式来，于是这就需要有一份众浏览器都遵循的规则来协调众浏览器之间的差异，这份规则需要一个声明来引用它，这个声明就是DOCTYPE——document type（文档类型）。</p>
<p>DOCTYPE声明是标准网页中必不可少的部分，所以，想要制作一个符合W3C标准的网页，首先就需要为这个页面声明一个文档类型。</p>
<p>DOCTYPE所声明的DTD（文档类型定义）分为三种，分别是：</p>
<blockquote><p>Transitional（过渡的）：要求不是很严格的DTD，允许你继续在页面中使用HTML4.01的标签；</p>
<p>Strict（严格的）：这是制作页面时理想的DTD方式，但是这个文档类型定义不允许使用任何的表现层上的标签和属性；</p>
<p>Frameset（框架的）：这个专门针对页面设计中包含有框架的DTD。</p></blockquote>
<p>由于框架型的设计可能对网页在搜索引擎中收录的影响，很多网页中都不使用框架设计；而Strict的DTD对于大多数人来说还只是一种理想化的方式；Transitional型的DTD则是目前最适用也是使用最广泛的文档类型定义。</p>
<p>现在随便打开一个符合Web标准的网页，都可以在页面的最开始处看到这样一句声明：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;</p></blockquote>
<p>这是一个关于XHTML网页文档的DOCTYPE声明。当然并不是说DOCTYPE声明只能针对XHTML网页文档，对于使用HTML4.01的网页文档来说，同样可以使用DOCTYPE声明：</p>
<blockquote><p>过渡的DTD：</p>
<p>&lt;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;</p>
<p>严格的DTD：</p>
<p>&lt;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”&gt;</p></blockquote>
<p>唯一需要注意的是，DOCTYPE声明的位置必须是位于页面的最开始处，在DOCTYPE声明代码之前不能出现任何的代码或是标签，否则页面中的标签或是CSS样式可能会失效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/928/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>解读HTML：WEB标准的误解</title>
		<link>http://www.prower.cn/technic/912</link>
		<comments>http://www.prower.cn/technic/912#comments</comments>
		<pubDate>Tue, 02 Dec 2008 06:45:33 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[网页制作]]></category>
		<category><![CDATA[网页结构]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=912</guid>
		<description><![CDATA[在HTML4 Elements中共计有91个标签，然而在这么多的标签中经常被使用到的标签不到四分之一，在这些常用的标签中有两个标签是属于最通用型的——div、span，这两个结构性的标签因为本身不带呈现样式及语义而被广泛的用于网页制作中，再加上之前很多人直接把WEB标准误解为就是div+css，于是在一个页面里出现了特多的div或者是span标签，尽管这些地方本身有更符合语义的标签来实现。 Table式的页面布局因为其本身的简便以及有Dreamweaver这样的可视化操作的Web制作软件的存在，从而引领了Web制作的一个时代，也正是因此而导致了过多的Web设计人员从来没有真正关注过HTML标签的真正语义，当Web标准开始兴起的时候，于是就直接被理解成是div+css的布局。 于是Web标准中的结构标签几乎变成了div的秀场。 div标签的过度使用，已经导致了很多人对于Web标准的误解，最明显的一点就是，当网页切换到使用div标签布局后，table标签便被无情的抛弃，俨然Web标准已经被理解成就是div+css。而事实上，table标签是不能被抛弃的，当需要显示数据内容时，由table标签构建的HTML结构的优势要强于div标签构建的布局，table标签仍然是显示数据时最符合HTML语义的标签。 Table页面布局所生成的过多的冗长代码，以及混杂其中的HTML样式属性，已经严重影响到页面的性能，尤其是对于大访问量的网站，解决的方法即是对页面进行基于Web标准的重构。然而对Web标准的误解，造成页面整体结构上div被过多的使用；以及Table布局所遗留下来的思想，造成页面上的结构嵌套过多。这些仍然影响着页面的整体性能。 所以，以更符合语义化的标签来构建页面，是Web标准推崇的理念。在这个理念下构建的页面还应该尽量的精简代码，使页面代码尽量的保持轻简，让浏览器更快速呈现的同时也便于日后的代码维护。 Web标准并不是某一个单独的标准，而是一系列标准的集合，包括结构、表现、行为三部分。这里的结构并不是指div，而是指标准化的语言——XHTML、XML。 明明&#60;strong /&#62;标签可以实现粗体样式，为什么还要用&#60;span /&#62;标签再搭配粗体样式去实现呢？]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.w3.org/TR/html4/index/elements.html" target="_blank">HTML4 Elements</a>中共计有91个标签，然而在这么多的标签中经常被使用到的标签不到四分之一，在这些常用的标签中有两个标签是属于最通用型的——div、span，这两个结构性的标签因为本身不带呈现样式及语义而被广泛的用于网页制作中，再加上之前很多人直接把WEB标准误解为就是div+css，于是在一个页面里出现了特多的div或者是span标签，尽管这些地方本身有更符合语义的标签来实现。</p>
<p>Table式的页面布局因为其本身的简便以及有Dreamweaver这样的可视化操作的Web制作软件的存在，从而引领了Web制作的一个时代，也正是因此而导致了过多的Web设计人员从来没有真正关注过HTML标签的真正语义，当Web标准开始兴起的时候，于是就直接被理解成是div+css的布局。</p>
<p>于是Web标准中的结构标签几乎变成了div的秀场。</p>
<p><span id="more-912"></span></p>
<p>div标签的过度使用，已经导致了很多人对于Web标准的误解，最明显的一点就是，当网页切换到使用div标签布局后，table标签便被无情的抛弃，俨然Web标准已经被理解成就是div+css。而事实上，table标签是不能被抛弃的，当需要显示数据内容时，由table标签构建的HTML结构的优势要强于div标签构建的布局，table标签仍然是显示数据时最符合HTML语义的标签。</p>
<p>Table页面布局所生成的过多的冗长代码，以及混杂其中的HTML样式属性，已经严重影响到页面的性能，尤其是对于大访问量的网站，解决的方法即是对页面进行基于Web标准的重构。然而对Web标准的误解，造成页面整体结构上div被过多的使用；以及Table布局所遗留下来的思想，造成页面上的结构嵌套过多。这些仍然影响着页面的整体性能。</p>
<p>所以，以更符合语义化的标签来构建页面，是Web标准推崇的理念。在这个理念下构建的页面还应该尽量的<a href="http://www.prower.cn/technic/31" target="_blank">精简</a>代码，使页面代码尽量的保持轻简，让浏览器更快速呈现的同时也便于日后的代码维护。</p>
<p>Web标准并不是某一个单独的标准，而是一系列标准的集合，包括结构、表现、行为三部分。这里的结构并不是指div，而是指标准化的语言——XHTML、XML。</p>
<p>明明&lt;strong /&gt;标签可以实现粗体样式，为什么还要用&lt;span /&gt;标签再搭配粗体样式去实现呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/912/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress2.7 Beta3中页面导航样式的BUG</title>
		<link>http://www.prower.cn/technic/888</link>
		<comments>http://www.prower.cn/technic/888#comments</comments>
		<pubDate>Thu, 27 Nov 2008 03:24:45 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Wordpress2.7]]></category>
		<category><![CDATA[导航]]></category>
		<category><![CDATA[样式调用]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=888</guid>
		<description><![CDATA[不可否认，Wordpress2.7对于后台界面的改进相当之大，几乎可以超过以往的任何一次改版，做如此大的改版的前提是Wordpress官方对用户的使用习惯做了充分的调查，而事实上新版的后台界面的确更易于用户的操作。 WordPress2.7也从最初的Beta1版到Beta2版再到Beta3版，之前所出现的BUG等也一一的解决，所以官方每发出一次新的Beta版我都会去下载过来直接在博客上使用，对于网上所说的一些BUG也没有出现过。但是今天却发现一个问题——在Wordpress2.7 Beta3版之前在系统自动生成的当面页面下都会有一个“current_page_item”的Class，但是在Wordpress2.7 Beta3的版本中不再自动生成这个Class属性，这个Class可以很方便的让主题制作者定义当面页面的导航样式，比如： 根据这个Class属性定义的样式可以很方便的让用户得知当前在哪个页面下，可是这个Class属性竟然在Wordpress2.7 Beta3版中不再自动生成，于是之前关于当前页面的定义样式就不能被读取出来。 不知道这个问题是属于Wordpress2.7 Beta3版中的BUG，还是官方故意去掉这个Class属性的。 因为按照常理来讲，日志分类才是更适合做为导航来呈现的，而现在把页面做为导航是不太合理的做法，而在当前日志分类下也会自动生成一个“current-cat”的Class属性，通过这个属性依然可以定义当前日志分类下的导航样式。 但即使官方故意去掉页面中自动生成的“current_page_item”这个Class属性，用意是让用户更多的把日志分类当成博客导航而不是把页面当成博客导航，也显然是极不合理的。 在Wordpress2.7正式版没有出来之前，这个问题不能最终确认是BUG还是官方故意去掉的，一切只有等正式版出来才能得知。在不改动Wordpress程序的前提下，似乎目前没有解决办法，有解决办法的高手请赐教。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;华丽丽的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 2008.12.02 刚升级到了Wordpress2.7 RC1版，这个问题已经修正了，看来是个BUG。]]></description>
			<content:encoded><![CDATA[<p>不可否认，Wordpress2.7对于<a href="http://www.prower.cn/interaction/757" target="_blank">后台界面</a>的改进相当之大，几乎可以超过以往的任何一次改版，做如此大的改版的前提是Wordpress官方对用户的使用习惯做了充分的调查，而事实上新版的后台界面的确更易于用户的操作。</p>
<p>WordPress2.7也从最初的Beta1版到Beta2版再到Beta3版，之前所出现的BUG等也一一的解决，所以官方每发出一次新的Beta版我都会去下载过来直接在博客上使用，对于网上所说的一些BUG也没有出现过。但是今天却发现一个问题——在Wordpress2.7 Beta3版之前在系统自动生成的当面页面下都会有一个“current_page_item”的Class，但是在Wordpress2.7 Beta3的版本中不再自动生成这个Class属性，这个Class可以很方便的让主题制作者定义当面页面的导航样式，比如：</p>
<p><a href="http://www.prower.cn/wp-content/uploads/2008/11/blog.jpg"><img class="alignnone size-full wp-image-889" title="blog" src="http://www.prower.cn/wp-content/uploads/2008/11/blog.jpg" alt="blog" width="368" height="85" /></a></p>
<p>根据这个Class属性定义的样式可以很方便的让用户得知当前在哪个页面下，可是这个Class属性竟然在Wordpress2.7 Beta3版中不再自动生成，于是之前关于当前页面的定义样式就不能被读取出来。</p>
<p><span id="more-888"></span></p>
<p>不知道这个问题是属于Wordpress2.7 Beta3版中的BUG，还是官方故意去掉这个Class属性的。</p>
<p>因为按照常理来讲，日志分类才是更适合做为导航来呈现的，而现在把页面做为导航是不太合理的做法，而在当前日志分类下也会自动生成一个“current-cat”的Class属性，通过这个属性依然可以定义当前日志分类下的导航样式。</p>
<p>但即使官方故意去掉页面中自动生成的“current_page_item”这个Class属性，用意是让用户更多的把日志分类当成博客导航而不是把页面当成博客导航，也显然是极不合理的。</p>
<p>在Wordpress2.7正式版没有出来之前，这个问题不能最终确认是BUG还是官方故意去掉的，一切只有等正式版出来才能得知。在不改动Wordpress程序的前提下，似乎目前没有解决办法，有解决办法的高手请赐教。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;华丽丽的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>2008.12.02</p>
<p>刚升级到了Wordpress2.7 RC1版，这个问题已经修正了，看来是个BUG。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/888/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>解读HTML：大厦的基石</title>
		<link>http://www.prower.cn/technic/872</link>
		<comments>http://www.prower.cn/technic/872#comments</comments>
		<pubDate>Mon, 24 Nov 2008 05:36:07 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[网页制作]]></category>
		<category><![CDATA[网页结构]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=872</guid>
		<description><![CDATA[在许多人看来，HTML应该是WEB制作所有语言中最简单的语言，因为它不需要编译、封闭等，甚至只需要一个记事本就可以让其在浏览器中呈现出来。所以我们也看到很多人都在说HTML很简单超简单之类的话，网上也有很多诸如“花个两三天学习下HTML就可以制作网页”之类的理论。在这些人看来，学HTML就像是学英文字母ABC一般简单。 正是这样的理论这样的思想，导致学习HTML的人都不把它当回事，认为HTML仅仅只是诸如“加粗用&#60;B /&#62;标签，斜体用&#60;I /&#62;标签”之类的应用。这样的思想尤其是在初学者当中流传，而一旦真正深入的了解学习HTML之后，才会发现HTML远非想像中的那么简单。 而随着WEB标准大潮的席卷互联网，更多的人索性就差不多抛弃HTML众多标签般的只用DIV，似乎DIV+CSS就是WEB标准的核心。这个错误的理论与HTML超简单的理论被绑在了一起，在互联网中传播着。思想改变行动，最终造成了WEB标准在国内互联网推行的困难重重。 真正的WEB标准应该是推崇以更合适的语义标签来制作网页结构，完全不是在整个页面写满DIV就是符合WEB标准。与此相同的道理是，HTML远远不是你所想像中的那么简单。 一个网站在浏览器中呈现效果的好坏，视觉因素占一半的比重，而另一半的比重就在于网页的结构上。 我们可以在网上看到很多整个页面都是由DIV架构的网页，这些DIV结构的页面在配合上CSS时，整个页面在浏览器中呈现的也许很正常，并看不出什么问题。可是如果用户禁用掉CSS之后呢？浏览器还能否正确的理解网页结构并呈现出来，就成了判断这个网页结构好坏的很重要的一个标准。而对于这些完全由DIV结构组成的页面，很显然的，在CSS被禁用之后，浏览器就很难呈现出一个结构清晰明了的页面来，而用户自然也很难从结构上去判断哪些内容是标题，哪些内容是真正的内容。 而如果在页面中采用了更符合语义的HTML标签的话，即使CSS样式在被禁用之后，浏览器依然可以根据&#60;h /&#62;标签来显示成标题，根据&#60;p /&#62;标签来显示成段落，最终仍然可以为用户呈现出结构清晰明了的页面。 如果把网站建设比喻成是建造一栋大厦，那么HTML无疑就是这栋大厦的基石，如果基石不够坚稳的话，那么这栋大厦就很有可能会面临倾倒的危险。 从深层次理解并学习HTML的标签语义，从思想上重视HTML，别忘了，整个网站都是基于HTML结构来呈现的。]]></description>
			<content:encoded><![CDATA[<p>在许多人看来，HTML应该是WEB制作所有语言中最简单的语言，因为它不需要编译、封闭等，甚至只需要一个记事本就可以让其在浏览器中呈现出来。所以我们也看到很多人都在说HTML很简单超简单之类的话，网上也有很多诸如“花个两三天学习下HTML就可以制作网页”之类的理论。在这些人看来，学HTML就像是学英文字母ABC一般简单。</p>
<p>正是这样的理论这样的思想，导致学习HTML的人都不把它当回事，认为HTML仅仅只是诸如“加粗用&lt;B /&gt;标签，斜体用&lt;I /&gt;标签”之类的应用。这样的思想尤其是在初学者当中流传，而一旦真正深入的了解学习HTML之后，才会发现HTML远非想像中的那么简单。</p>
<p>而随着WEB标准大潮的席卷互联网，更多的人索性就差不多抛弃HTML众多标签般的只用DIV，似乎DIV+CSS就是WEB标准的核心。这个错误的理论与HTML超简单的理论被绑在了一起，在互联网中传播着。思想改变行动，最终造成了WEB标准在国内互联网推行的困难重重。</p>
<p>真正的WEB标准应该是推崇以更合适的语义标签来制作网页结构，完全不是在整个页面写满DIV就是符合WEB标准。与此相同的道理是，HTML远远不是你所想像中的那么简单。</p>
<p><span id="more-872"></span></p>
<p>一个网站在浏览器中呈现效果的好坏，视觉因素占一半的比重，而另一半的比重就在于网页的结构上。</p>
<p>我们可以在网上看到很多整个页面都是由DIV架构的网页，这些DIV结构的页面在配合上CSS时，整个页面在浏览器中呈现的也许很正常，并看不出什么问题。可是如果用户禁用掉CSS之后呢？浏览器还能否正确的理解网页结构并呈现出来，就成了判断这个网页结构好坏的很重要的一个标准。而对于这些完全由DIV结构组成的页面，很显然的，在CSS被禁用之后，浏览器就很难呈现出一个结构清晰明了的页面来，而用户自然也很难从结构上去判断哪些内容是标题，哪些内容是真正的内容。</p>
<p>而如果在页面中采用了更符合语义的HTML标签的话，即使CSS样式在被禁用之后，浏览器依然可以根据&lt;h /&gt;标签来显示成标题，根据&lt;p /&gt;标签来显示成段落，最终仍然可以为用户呈现出结构清晰明了的页面。</p>
<p>如果把网站建设比喻成是建造一栋大厦，那么HTML无疑就是这栋大厦的基石，如果基石不够坚稳的话，那么这栋大厦就很有可能会面临倾倒的危险。</p>
<p>从深层次理解并学习HTML的标签语义，从思想上重视HTML，别忘了，整个网站都是基于HTML结构来呈现的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/872/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>列表项标记符号的设置</title>
		<link>http://www.prower.cn/technic/541</link>
		<comments>http://www.prower.cn/technic/541#comments</comments>
		<pubDate>Tue, 16 Sep 2008 02:29:57 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[CSS小技巧]]></category>
		<category><![CDATA[列表符号]]></category>
		<category><![CDATA[背景定位]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=541</guid>
		<description><![CDATA[在常见的新闻列表中，标题前都会有一个小图标，这个图标可能是实心圆，也可能是空心圆，或者是小方块。很显然的，对于列表项前的这些标记符号，在CSS中都可以通过list-style-type属性来设置它们的表现形式。 可是很多时候由于字体或是字体大小的原因，列表项前通过list-style-type来设置的标记符号会显得过大或是其它原因而不能达到要求，这个时候就需要另外的解决方法。 当需要在新闻列表项前标记出自定义的图案时，可以采用list-style-image来设置。于是可以尝试使用这个方法来处理list-style-type无法解决的图案大小问题，可是由于受行高等因素的影响，有时图标并不能出现在预先设定好的位置上，可能是偏上或者是偏下，于是又需要另外一种解决方法。 之前有介绍过CSS背景图像，在CSS中可以任意的设置背景图像的铺排、定位、滚动等，由此就引出了列表项前标记符号的另一种设置方法——通过背景图像设置。 通过背景图像设置，可以很容易的就达到所需要的效果： ul li {list-style:none; background:url(images/liImg.gif) no-repeat 0 50%; padding-left:10px;} 首先设置list-style为none，清除掉li元素自带的属性值，然后设置li的背景图像，设置背景图像的铺排方式为不平铺，然后通过数值去控制背景图像出现的位置（前一个数值表示横坐标的位置，后一个表示纵坐标的位置），最后再设置li元素的左边内边距，以保证背景图不会被内容覆盖到。 自定义的列表项标记符号就设置好了，不用担心字体或是行高等其他因素的影响了。]]></description>
			<content:encoded><![CDATA[<p>在常见的新闻列表中，标题前都会有一个小图标，这个图标可能是实心圆，也可能是空心圆，或者是小方块。很显然的，对于列表项前的这些标记符号，在CSS中都可以通过<span style="color: #800000;">list-style-type</span>属性来设置它们的表现形式。</p>
<p>可是很多时候由于字体或是字体大小的原因，列表项前通过<span style="color: #800000;">list-style-type</span>来设置的标记符号会显得过大或是其它原因而不能达到要求，这个时候就需要另外的解决方法。</p>
<p>当需要在新闻列表项前标记出自定义的图案时，可以采用<span style="color: #800000;">list-style-image</span>来设置。于是可以尝试使用这个方法来处理<span style="color: #800000;">list-style-type</span>无法解决的图案大小问题，可是由于受行高等因素的影响，有时图标并不能出现在预先设定好的位置上，可能是偏上或者是偏下，于是又需要另外一种解决方法。</p>
<p>之前有介绍过<a href="http://www.prower.cn/technic/309" target="_blank">CSS背景图像</a>，在CSS中可以任意的设置背景图像的铺排、定位、滚动等，由此就引出了列表项前标记符号的另一种设置方法——通过背景图像设置。</p>
<p><span id="more-541"></span></p>
<p>通过背景图像设置，可以很容易的就达到所需要的效果：</p>
<blockquote><p>ul li {list-style:none; background:url(images/liImg.gif) no-repeat 0 50%; padding-left:10px;}</p></blockquote>
<p>首先设置<span style="color: #800000;">list-style</span>为<span style="color: #0000ff;">none</span>，清除掉<span style="color: #800080;">li</span>元素自带的属性值，然后设置<span style="color: #800080;">li</span>的背景图像，设置背景图像的铺排方式为不平铺，然后通过数值去控制背景图像出现的位置（前一个数值表示横坐标的位置，后一个表示纵坐标的位置），最后再设置<span style="color: #800080;">li</span>元素的左边内边距，以保证背景图不会被内容覆盖到。</p>
<p>自定义的列表项标记符号就设置好了，不用担心字体或是行高等其他因素的影响了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/541/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>描述性列表的表现形式</title>
		<link>http://www.prower.cn/technic/537</link>
		<comments>http://www.prower.cn/technic/537#comments</comments>
		<pubDate>Mon, 15 Sep 2008 04:22:19 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[HTML布局]]></category>
		<category><![CDATA[定义列表]]></category>
		<category><![CDATA[无序列表]]></category>
		<category><![CDATA[有序列表]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=537</guid>
		<description><![CDATA[之前就见过很多网站在侧边栏上使用&#60;dl /&#62;标签对来完成侧边栏栏目的布局，最近在研究DEDECMS的默认模板时，也发现该模板在大量的地方使用&#60;dl&#62;&#60;/dl&#62;标签对来完成页面的布局，比如模板首页的栏目循环以及侧边栏的栏目都是用&#60;dl&#62;&#60;/dl&#62;标签对来实现的。而在研究全球使用数最多的博客程序Wordpress时，发现它的侧边栏却是使用的是最常见的&#60;ul&#62;&#60;/ul&#62;列表来实现的。 同样的布局&#60;dl /&#62;与&#60;ul /&#62;都可以实现，并且就最终的表现来看并不存在区别，那么这两者之间到底有什么区别呢？或者说使用哪一个来完成布局才更为合理呢？ &#60;ul /&#62;与&#60;ol /&#62;是最常见两种列表表现形式，这两种列表最本质上的区别就是&#60;ul /&#62;指的是无序列表而&#60;ol /&#62;指的是有序列表。最常见的两种不同表现是：平常所见的新闻标题列表基本上都是由&#60;ul /&#62;来完成布局的，而很多网站的侧边栏上会有一些新闻点击数排行榜之类的列表，这个时候就需要使用到有序列表&#60;ol /&#62;，因为可以很容易的通过&#60;ol /&#62;标注出排行顺序来。 回过头来我们看Wordpress侧边栏的结构代码： &#60;div id=”sidebar”&#62; &#60;ul&#62; &#60;li&#62;&#60;h2&#62;栏目标题一&#60;/h2&#62; &#60;ul&#62; &#60;li&#62;新闻标题一&#60;/li&#62; &#8230; &#60;li&#62;新闻标题N&#60;/li&#62; &#60;/ul&#62; &#60;/li&#62; &#8230; &#60;li&#62;&#60;h2&#62;栏目标题N&#60;/h2&#62; &#60;ul&#62; &#60;li&#62;新闻标题一&#60;/li&#62; &#8230; &#60;li&#62;新闻标题N&#60;/li&#62; &#60;/ul&#62; &#60;/li&#62; &#60;/ul&#62; &#60;/div&#62; 很显然，这是一个&#60;ul /&#62;嵌套&#60;ul/&#62;的结构，通过&#60;h2 /&#62;去显示栏目标题（补充一点：对于博客来说，就页面中的内容重要程度而言，这里并不适合使用&#60;h2 /&#62;标签来显示栏目标题，&#60;h2 /&#62;标签应该是用在日志标题上的）。 很多使用&#60;dl /&#62;来布局的网站的结构代码如下： &#60;div id=”sidebar”&#62; &#60;dl&#62; &#60;dt&#62;栏目标题一&#60;/dt&#62; &#60;dd&#62; &#60;ul&#62; &#60;li&#62;新闻标题一&#60;/li&#62; &#8230; &#60;li&#62;新闻标题N&#60;/li&#62; &#60;/ul&#62; &#60;/dd&#62; &#8230; &#60;dt&#62;栏目标题N&#60;/dt&#62; &#60;dd&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>之前就见过很多网站在侧边栏上使用&lt;dl /&gt;标签对来完成侧边栏栏目的布局，最近在研究DEDECMS的默认模板时，也发现该模板在大量的地方使用&lt;dl&gt;&lt;/dl&gt;标签对来完成页面的布局，比如模板首页的栏目循环以及侧边栏的栏目都是用&lt;dl&gt;&lt;/dl&gt;标签对来实现的。而在研究全球使用数最多的博客程序Wordpress时，发现它的侧边栏却是使用的是最常见的&lt;ul&gt;&lt;/ul&gt;列表来实现的。</p>
<p>同样的布局&lt;dl /&gt;与&lt;ul /&gt;都可以实现，并且就最终的表现来看并不存在区别，那么这两者之间到底有什么区别呢？或者说使用哪一个来完成布局才更为合理呢？</p>
<p>&lt;ul /&gt;与&lt;ol /&gt;是最常见两种列表表现形式，这两种列表最本质上的区别就是&lt;ul /&gt;指的是无序列表而&lt;ol /&gt;指的是有序列表。最常见的两种不同表现是：平常所见的新闻标题列表基本上都是由&lt;ul /&gt;来完成布局的，而很多网站的侧边栏上会有一些新闻点击数排行榜之类的列表，这个时候就需要使用到有序列表&lt;ol /&gt;，因为可以很容易的通过&lt;ol /&gt;标注出排行顺序来。</p>
<p><span id="more-537"></span></p>
<p>回过头来我们看Wordpress侧边栏的结构代码：</p>
<blockquote><p>&lt;div id=”sidebar”&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;h2&gt;栏目标题一&lt;/h2&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;新闻标题一&lt;/li&gt;<br />
&#8230;<br />
&lt;li&gt;新闻标题N&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&#8230;<br />
&lt;li&gt;&lt;h2&gt;栏目标题N&lt;/h2&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;新闻标题一&lt;/li&gt;<br />
&#8230;<br />
&lt;li&gt;新闻标题N&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>很显然，这是一个&lt;ul /&gt;嵌套&lt;ul/&gt;的结构，通过&lt;h2 /&gt;去显示栏目标题（补充一点：对于博客来说，就页面中的内容重要程度而言，这里并不适合使用&lt;h2 /&gt;标签来显示栏目标题，&lt;h2 /&gt;标签应该是用在日志标题上的）。</p>
<p>很多使用&lt;dl /&gt;来布局的网站的结构代码如下：</p>
<blockquote><p>&lt;div id=”sidebar”&gt;<br />
&lt;dl&gt;<br />
&lt;dt&gt;栏目标题一&lt;/dt&gt;<br />
&lt;dd&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;新闻标题一&lt;/li&gt;<br />
&#8230;<br />
&lt;li&gt;新闻标题N&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/dd&gt;<br />
&#8230;<br />
&lt;dt&gt;栏目标题N&lt;/dt&gt;<br />
&lt;dd&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;新闻标题一&lt;/li&gt;<br />
&#8230;<br />
&lt;li&gt;新闻标题N&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/dd&gt;<br />
&lt;/dl&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>这是一个复杂表现上的定义列表，与上一个结构代码的最大的区别是使用&lt;dt /&gt;来替代&lt;h2 /&gt;标签。简单意义上的定义列表结构如下：</p>
<blockquote><p>&lt;div id=”sidebar”&gt;<br />
&lt;dl&gt;<br />
&lt;dt&gt;标题一&lt;/dt&gt;<br />
&lt;dd&gt;内容一&lt;/dd&gt;<br />
&#8230;<br />
&lt;dd&gt;内容N&lt;/dd&gt;<br />
&#8230;<br />
&lt;dt&gt;标题N&lt;/dt&gt;<br />
&lt;dd&gt;内容一&lt;/dd&gt;<br />
&#8230;<br />
&lt;dd&gt;内容N&lt;/dd&gt;<br />
&lt;/dl&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>这种结构的代码也可以表现出列表的形式，但事实上这种结构并不太适合做为一个列表来使用，这种简单的&lt;dl /&gt;更适合做为不同内容段的描述。比如：</p>
<blockquote><p>&lt;dl&gt;<br />
&lt;dt&gt;我的照片&lt;/dt&gt;<br />
&lt;dd&gt;作者：摄氏度&lt;/dd&gt;<br />
&lt;dd&gt;相机：佳能400D&lt;/dd&gt;<br />
&lt;dt&gt;我的博客&lt;/dt&gt;<br />
&lt;dd&gt;作者：摄氏度&lt;/dd&gt;<br />
&lt;dd&gt;程序：wordpress&lt;/dd&gt;<br />
&lt;/dl&gt;</p></blockquote>
<p>于是我们可以理解为：&lt;dl /&gt;标签结构更多的是表现一种描述性的列表，它本身并不具备做为列表显示的意义。当&lt;dl /&gt;与&lt;ul /&gt;或是&lt;ol /&gt;标签结构组合起来使用时，才能更好的表现出描述列表的作用。</p>
<p>之前的那个被指为不符合标签语义的试验<a href="http://www.prower.cn/technic/56">《使用UL进行宽度固定的多行多列布局》</a>，现在换成&lt;dl /&gt;标签来做是否就适合标签语义化了呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/537/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS实现文本自动换行</title>
		<link>http://www.prower.cn/technic/431</link>
		<comments>http://www.prower.cn/technic/431#comments</comments>
		<pubDate>Wed, 20 Aug 2008 08:22:51 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[自动换行]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=431</guid>
		<description><![CDATA[在常规的情况下，当内容超出外部DIV的宽度时，文本会自动换行，但是在非正常情况下，文本可能就会撑出外部DIV的宽度而不能实现自动换行。该非正常情况指的是，连续的英文字母或者数字，因为连续的英文字母或者数字被当做了一个单词，而一个单词内默认是不换行的，于是就造成了撑破外部DIV的问题。 解决这个问题的方法是，在外部DIV的CSS样式属性里设置“word-wrap:break-word;”或者“word-break:break-all;”，即可强制文本在外部DIV宽度之内换行。 但是很不幸的是，这个目前只在IE下有效，在Firefox下依然无法完成换行。]]></description>
			<content:encoded><![CDATA[<p>在常规的情况下，当内容超出外部DIV的宽度时，文本会自动换行，但是在非正常情况下，文本可能就会撑出外部DIV的宽度而不能实现自动换行。该非正常情况指的是，连续的英文字母或者数字，因为连续的英文字母或者数字被当做了一个单词，而一个单词内默认是不换行的，于是就造成了撑破外部DIV的问题。</p>
<p>解决这个问题的方法是，在外部DIV的CSS样式属性里设置“<span style="color: #800000;">word-wrap:break-word;</span>”或者“<span style="color: #800000;">word-break:break-all;</span>”，即可强制文本在外部DIV宽度之内换行。</p>
<p>但是很不幸的是，这个目前只在IE下有效，在Firefox下依然无法完成换行。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/431/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS制作圆角导航的另一思路</title>
		<link>http://www.prower.cn/technic/428</link>
		<comments>http://www.prower.cn/technic/428#comments</comments>
		<pubDate>Wed, 20 Aug 2008 02:38:53 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css技巧]]></category>
		<category><![CDATA[圆角导航]]></category>
		<category><![CDATA[导航条]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=428</guid>
		<description><![CDATA[制作圆角导航其实跟制作圆角边框是一样的道理，有一种很常见的方法就是使用CSS绝对定位，切四个圆角的小图片，然后分别定位在四个角，这样就可以实现自动伸缩。但是这样的代码因为嵌套的DIV过多，而显得有些复杂，这里提供另外一种思路，即是通过CSS背景的定位去制作。 在CSS背景属性中有一项是background-position，即是背景图像的定位，属性值可用英文（top &#124; center &#124; bottom &#124; left &#124; center &#124; right）来定位，也可使用数值来定位，使用数值需要注意的是，当只有一个数值时，这个值将用于横坐标，纵坐标将默认是50%，如果有两个数值时，则分别是横坐标、纵坐标。通过background-position这个属性可以让背景图像随意定位在需要的位置。 在CSS背景属性中还有另外一项是background-repeat，即背景图像是否平铺。通过这个属性可以决定背景图像的平铺方式，是在纵向上平铺，还是在横向上平铺，或者是不平铺。 结合上面的两个背景属性，不使用绝对定位制作圆角导航的思路就出来了，即可通过两个分别定位左右背景图像的DIV再嵌套中间导航正文部分的UL，利用三者的长度错位来实现。HTML结构代码与CSS样式代码： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; &#60;head&#62; &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; &#60;title&#62;Nav&#60;/title&#62; &#60;style type=”text/css”&#62; body{font-size:12px;} #navBox {background:#f00 url(images/left.jpg) no-repeat left bottom;    height:24px; padding-left:5px;} #nav {background:#f00 url(images/right.jpg) no-repeat right bottom; padding-right:5px; height:24px;} ul {list-style:none; line-height:24px; background:#f00 url(images/navBg.jpg) [...]]]></description>
			<content:encoded><![CDATA[<p>制作圆角导航其实跟制作圆角边框是一样的道理，有一种很常见的方法就是使用CSS绝对定位，切四个圆角的小图片，然后分别定位在四个角，这样就可以实现自动伸缩。但是这样的代码因为嵌套的DIV过多，而显得有些复杂，这里提供另外一种思路，即是通过<a href="http://www.prower.cn/technic/309" target="_blank">CSS背景</a>的定位去制作。</p>
<p>在CSS背景属性中有一项是<span style="color: #800000;">background-position</span>，即是背景图像的定位，属性值可用英文（top <span style="color: #0000ff;">|</span> center<span style="color: #993300;"> <span style="color: #0000ff;">|</span></span> bottom<span style="color: #993300;"> <span style="color: #0000ff;">|</span></span> left <span style="color: #0000ff;">|</span> center <span style="color: #0000ff;">|</span> right）来定位，也可使用数值来定位，使用数值需要注意的是，当只有一个数值时，这个值将用于横坐标，纵坐标将默认是50%，如果有两个数值时，则分别是横坐标、纵坐标。通过<span style="color: #800000;">background-position</span>这个属性可以让背景图像随意定位在需要的位置。</p>
<p>在CSS背景属性中还有另外一项是<span style="color: #800000;">background-repeat</span>，即背景图像是否平铺。通过这个属性可以决定背景图像的平铺方式，是在纵向上平铺，还是在横向上平铺，或者是不平铺。</p>
<p><span id="more-428"></span></p>
<p>结合上面的两个背景属性，不使用绝对定位制作圆角导航的思路就出来了，即可通过两个分别定位左右背景图像的DIV再嵌套中间导航正文部分的UL，利用三者的长度错位来实现。HTML结构代码与CSS样式代码：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;Nav&lt;/title&gt;<br />
&lt;style type=”text/css”&gt;<br />
body{font-size:12px;}<br />
#navBox {background:#f00 url(images/left.jpg) no-repeat left bottom;    height:24px; padding-left:5px;}<br />
#nav {background:#f00 url(images/right.jpg) no-repeat right bottom; padding-right:5px; height:24px;}<br />
ul {list-style:none; line-height:24px; background:#f00 url(images/navBg.jpg) repeat-x; height:24px; margin:0; padding:0;}<br />
li {float:left; width:60px; text-align:center;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;div id=”navBox”&gt;<br />
&lt;div id=”nav”&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;导航一&lt;/li&gt;<br />
&lt;li&gt;导航二&lt;/li&gt;<br />
&lt;li&gt;导航三&lt;/li&gt;<br />
&lt;li&gt;导航四&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p>从上面的结构代码可以看出，在&lt;ul /&gt;标签外面套两个DIV，给每个DIV设定一个背景图像，然后分别设定背景图像的平铺方式为不平铺，再设定两个DIV的背景图像一个靠左一个靠右，最后是&lt;ul /&gt;也就是导航条中间部分的背景，设定它的平铺方式为横向平铺。</p>
<p>圆角的可自动伸缩适应的导航条就做完了，这其中还有一些小地方是值得注意的：</p>
<p>1、外面两个DIV的padding数值是圆角图片的宽度；</p>
<p>2、在背景图像属性中增加与图片颜色相近的颜色值，这样可以在图片丢失或未加载完成时保证易读性；</p>
<p>3、如果在一开始没有设定全局样式<span style="color: #800000;">*{margin:0; padding:0;}</span>时，那么&lt;ul /&gt;的属性里就必须设定<span style="color: #800000;">“margin:0; padding:0;”</span>，否则在IE下，导航条的&lt;ul /&gt;前面会出现一段空白，这在Firefox下是没有的。</p>
<p>圆角导航由于可以不用考虑高度的自适应，所以相对于圆角边框来说要容易上一些，但圆角边框的制作依然可以根据制作圆角导航的方式来制作，分为上中下三个DIV，上下两个DIV就跟圆角导航的一样。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/428/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>CSS布局之浮动（三）</title>
		<link>http://www.prower.cn/technic/367</link>
		<comments>http://www.prower.cn/technic/367#comments</comments>
		<pubDate>Fri, 15 Aug 2008 08:38:53 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[三列]]></category>
		<category><![CDATA[布局]]></category>
		<category><![CDATA[浮动]]></category>
		<category><![CDATA[绝对定位]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=367</guid>
		<description><![CDATA[两列布局的定宽自适应已经详解了，三列浮动中有两列定宽一列自适应的也详解了，那么该说说三列浮动中两列自适应一列定宽的布局了。 中间定宽，左右两侧自适应： 左右两侧定宽中间自适应的布局已经完成了，那么是否可以反过来呢？让中间定宽，而左右两侧自适应呢？答案是当然可以！HTML结构代码如下： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; &#60;head&#62; &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; &#60;title&#62;CSS浮动&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;div id=”a”&#62;我是左边&#60;/div&#62; &#60;div id=”b”&#62;我是中间&#60;/div&#62; &#60;div id=”c”&#62;我是右边&#60;/div&#62; &#60;/body&#62; &#60;/html&#62; 同样的三列结构，变换的只是CSS代码： #a{background:#aaa; float:left; margin-left:-100px; width:50%;} #b{width:200px; background:#f00; float:left;} #c{background:#777; width:50%; float:right; margin-right:-100px;} 我们让中间列居中显示，也就是让左右两侧的宽度各占50%，然后各减去中间栏占的100px，于是效果达到了。可是当预览的时候就会发现三个问题： 1、左右两侧的内容部分各被截取了宽度为100px的内容； 2、左右两侧的内容延伸到浏览器边缘，超出了&#60;body /&#62;标签默认的宽度； 3、由于IE的BUG，当缩放IE浏览器的时候右侧会掉下去，造成显示错位。 要解决1、2两个问题，只需要在内容处嵌套DIV即可解决： &#60;div id=”box”&#62; &#60;div id=”a”&#62;&#60;div id=”contentA”&#62;我是左边&#60;/div&#62;&#60;/div&#62; &#60;div id=”b”&#62;我是中间&#60;/div&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.prower.cn/technic/195" target="_blank">两列布局</a>的定宽自适应已经详解了，<a href="http://www.prower.cn/technic/353" target="_blank">三列浮动</a>中有两列定宽一列自适应的也详解了，那么该说说三列浮动中两列自适应一列定宽的布局了。</p>
<p><strong>中间定宽，左右两侧自适应：</strong></p>
<p>左右两侧定宽中间自适应的布局已经完成了，那么是否可以反过来呢？让中间定宽，而左右两侧自适应呢？答案是当然可以！HTML结构代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;CSS浮动&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;div id=”a”&gt;我是左边&lt;/div&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;div id=”c”&gt;我是右边&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p><span id="more-367"></span></p>
<p>同样的三列结构，变换的只是CSS代码：</p>
<blockquote><p>#a{background:#aaa; float:left; margin-left:-100px; width:50%;}<br />
#b{width:200px; background:#f00; float:left;}<br />
#c{background:#777; width:50%; float:right; margin-right:-100px;}</p></blockquote>
<p>我们让中间列居中显示，也就是让左右两侧的宽度各占50%，然后各减去中间栏占的100px，于是效果达到了。可是当预览的时候就会发现三个问题：</p>
<blockquote><p>1、左右两侧的内容部分各被截取了宽度为100px的内容；</p>
<p>2、左右两侧的内容延伸到浏览器边缘，超出了&lt;body /&gt;标签默认的宽度；</p>
<p>3、由于IE的BUG，当缩放IE浏览器的时候右侧会掉下去，造成显示错位。</p></blockquote>
<p>要解决1、2两个问题，只需要在内容处嵌套DIV即可解决：</p>
<blockquote><p>&lt;div id=”box”&gt;<br />
&lt;div id=”a”&gt;&lt;div id=”contentA”&gt;我是左边&lt;/div&gt;&lt;/div&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;div id=”c”&gt;&lt;div id=”contentB”&gt;我是右边&lt;/div&gt;&lt;/div&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>CSS代码如下：</p>
<blockquote><p>#box{width:100%; overflow:hidden;}<br />
#a{background:#aaa; float:left; margin-left:-100px; width:50%;}<br />
#b{width:200px; background:#f00; float:left;}<br />
#c{background:#777; width:50%; float:right; margin-right:-100px;}<br />
#contentA{margin-left:100px;}<br />
#contentB{margin-right:100px;}</p></blockquote>
<p>内容溢出的问题截取了，但是在IE下缩放的问题还是存在，于是就需要使用到绝对定位，设中间列为绝对定位：</p>
<blockquote><p>#b{width:200px; background:#f00; position:absolute; left:50%; margin-left:-100px;}</p></blockquote>
<p>于是中间列定宽，左右两侧自适应的三列浮动布局就解决了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/367/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS布局之浮动（二）</title>
		<link>http://www.prower.cn/technic/353</link>
		<comments>http://www.prower.cn/technic/353#comments</comments>
		<pubDate>Fri, 15 Aug 2008 02:18:52 +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://www.prower.cn/?p=353</guid>
		<description><![CDATA[在上一个文章里写了关于左（右）侧定宽右（左）侧自动缩放的两列浮动，这个文章就要说一下三列浮动的问题了。在之前说过，两列浮动是其他多列浮动的基础，明白了两列浮动的原理后，三列或三列以上的多列浮动也变得简单。 左侧中间定宽，右侧自适应： 因边左侧跟中间都是定宽的，只有右侧是自适应宽度的，所以这个三列浮动是和两列浮动中的左侧定宽右侧自适应一样的道理，HTML结构代码如下： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; &#60;head&#62; &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; &#60;title&#62;CSS浮动&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;div id=”a”&#62;我是左边&#60;/div&#62; &#60;div id=”b”&#62;我是中间&#60;/div&#62; &#60;div id=”c”&#62;我是右边&#60;/div&#62; &#60;/body&#62; &#60;/html&#62; 只需在两列浮动的CSS样式代码上再做轻微的改动： #a{float:left; width:200px; background:#aaa;} #b{float:left; width:200px; background:#f00;} #c{background:#777; margin-left:400px;} 当然这里要记住一点，那就是必须给b对象一个左浮动。 左侧自适应，中间右侧定宽： 与左侧中间定宽右侧自适应一样的道理，当然前提是要把a、b、c三个对象在HTML的结构代码上更换一下顺序，浏览器的解释顺序应该是c-b-a，因为浮动在未浮动之前： &#60;body&#62; &#60;div id=”c”&#62;我是左边&#60;/div&#62; &#60;div id=”b”&#62;我是中间&#60;/div&#62; &#60;div id=”a”&#62;我是右边&#60;/div&#62; &#60;/body&#62; CSS代码如下： #a{background:#aaa;} #b{float:right; width:200px; background:#f00;} [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.prower.cn/technic/195" target="_blank">上一个文章</a>里写了关于左（右）侧定宽右（左）侧自动缩放的两列浮动，这个文章就要说一下三列浮动的问题了。在之前说过，两列浮动是其他多列浮动的基础，明白了两列浮动的原理后，三列或三列以上的多列浮动也变得简单。</p>
<p><strong>左侧中间定宽，右侧自适应：</strong></p>
<p>因边左侧跟中间都是定宽的，只有右侧是自适应宽度的，所以这个三列浮动是和两列浮动中的左侧定宽右侧自适应一样的道理，HTML结构代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;CSS浮动&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;div id=”a”&gt;我是左边&lt;/div&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;div id=”c”&gt;我是右边&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p><span id="more-353"></span></p>
<p>只需在两列浮动的CSS样式代码上再做轻微的改动：</p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{float:left; width:200px; background:#f00;}<br />
#c{background:#777; margin-left:400px;}</p></blockquote>
<p>当然这里要记住一点，那就是必须给b对象一个左浮动。</p>
<p><strong>左侧自适应，中间右侧定宽：</strong></p>
<p>与左侧中间定宽右侧自适应一样的道理，当然前提是要把a、b、c三个对象在HTML的结构代码上更换一下顺序，浏览器的解释顺序应该是c-b-a，因为浮动在未浮动之前：</p>
<blockquote><p>&lt;body&gt;<br />
&lt;div id=”c”&gt;我是左边&lt;/div&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;div id=”a”&gt;我是右边&lt;/div&gt;<br />
&lt;/body&gt;</p></blockquote>
<p>CSS代码如下：</p>
<blockquote><p>#a{background:#aaa;}<br />
#b{float:right; width:200px; background:#f00;}<br />
#c{float:right; width:200px; background:#777;}</p></blockquote>
<p><strong>左右两侧定宽，中间自适应：</strong></p>
<p>这个布局应该是用得最多的，因为两边侧边栏的定宽，然后中间内容区自适应，这是很多网站常用的布局方式。很多人会在这里使用四个DIV来完成布局，即：</p>
<blockquote><p>&lt;body&gt;<br />
&lt;div id=”a”&gt;我是左边&lt;/div&gt;<br />
&lt;div id=”box”&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;div id=”c”&gt;我是右边&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;</p></blockquote>
<p>通过一个嵌套的DIV来帮助完成三列浮动，这样的确是可以完成浮动布局的目的，但是不用这个嵌套仍然可以完成三列浮动的目的，既然可以省略一个嵌套，那为什么不省略一个呢？仅仅只需改变b跟c两者的顺序即可达到目的：</p>
<blockquote><p>&lt;body&gt;<br />
&lt;div id=”a”&gt;我是左边&lt;/div&gt;<br />
&lt;div id=”c”&gt;我是右边&lt;/div&gt;<br />
&lt;div id=”b”&gt;我是中间&lt;/div&gt;<br />
&lt;/body&gt;</p></blockquote>
<p>CSS代码如下：</p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{margin-left:200px; margin-right:200px; background:#f00;}<br />
#c{float:right; width:200px; background:#777;}</p></blockquote>
<p>这样，在基于两列浮动的基础之上，三列浮动的布局也完成了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/353/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>CSS布局之浮动（一）</title>
		<link>http://www.prower.cn/technic/195</link>
		<comments>http://www.prower.cn/technic/195#comments</comments>
		<pubDate>Thu, 14 Aug 2008 03:37:49 +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://www.prower.cn/?p=195</guid>
		<description><![CDATA[CSS浮动一直是个比较让人郁闷的问题，很多的布局问题都出在浮动上，特别是当浮动的列数很多时，但其实只要理解了两列结构的浮动，面对多列数的浮动也不会再心慌，因为两列结构的左右浮动是最基本的浮动，也是更多浮动的基础，三列、四列等的浮动都是出于此的。 来看一下几种常见的CSS两列浮动，CSS代码见以下各分类，HTML结构代码如下： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; &#60;head&#62; &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; &#60;title&#62;CSS浮动&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;div id=”a”&#62;开始我是在左边，后面可能到右边&#60;/div&#62; &#60;div id=”b”&#62;开始我是在右边，后面就可能跑到左边去&#60;/div&#62; &#60;/body&#62; &#60;/html&#62; 左侧定宽右侧自适应： #a{float:left; width:200px; background:#aaa;} #b{background:#f00;} 当需要左侧定宽而右侧自动时，则只需要设定a对象为左浮动即可，b对象默认是占整个屏幕的宽度的，但因为a为左浮动并且占了200PX的宽度，b则自动位于a后面。 当然这样会有一个问题，那就是当左侧的内容高度超过右侧时，右侧的高度并不能随之而增高，而当右侧内容高于左侧时，右侧的内容就会流到左侧内容的底下去。 解决这个问题的一个办法是，给b也设置一个浮动，当然并不是设置右浮动，如果是设置的右浮动，当右侧内容少不够一行的宽度时左右两侧中间则会出现空白： #a{float:left; width:200px; background:#aaa;} #b{background:#f00; float:right;} 给b设置左浮动时，则可以解决中间出现空白的问题，但同样的道理，当b对象内容少不够一行的宽度时时，右侧就会出现空白： #a{float:left; width:200px; background:#aaa;} #b{background:#f00; float:left;} 当然有另外一种两全的解决办法，即设置b对象距离左边的位置，这样即可以达到浮动的目的也可以解决b对象内容过多而流入到a对象下面的问题： #a{float:left; width:200px; background:#aaa;} #b{background:#f00; margin-left:200px;} 右侧定宽左侧自适应： 与左侧定宽右侧自动一样的道理，右侧定宽左侧自动同样可以实现： #a{background:#f00; [...]]]></description>
			<content:encoded><![CDATA[<p>CSS浮动一直是个比较让人郁闷的问题，很多的布局问题都出在浮动上，特别是当浮动的列数很多时，但其实只要理解了两列结构的浮动，面对多列数的浮动也不会再心慌，因为两列结构的左右浮动是最基本的浮动，也是更多浮动的基础，三列、四列等的浮动都是出于此的。</p>
<p>来看一下几种常见的CSS两列浮动，CSS代码见以下各分类，HTML结构代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;CSS浮动&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;div id=”a”&gt;开始我是在左边，后面可能到右边&lt;/div&gt;<br />
&lt;div id=”b”&gt;开始我是在右边，后面就可能跑到左边去&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p><span id="more-195"></span></p>
<p><strong>左侧定宽右侧自适应：</strong></p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{background:#f00;}</p></blockquote>
<p>当需要左侧定宽而右侧自动时，则只需要设定a对象为左浮动即可，b对象默认是占整个屏幕的宽度的，但因为a为左浮动并且占了200PX的宽度，b则自动位于a后面。</p>
<p>当然这样会有一个问题，那就是当左侧的内容高度超过右侧时，右侧的高度并不能随之而增高，而当右侧内容高于左侧时，右侧的内容就会流到左侧内容的底下去。</p>
<p>解决这个问题的一个办法是，给b也设置一个浮动，当然并不是设置右浮动，如果是设置的右浮动，当右侧内容少不够一行的宽度时左右两侧中间则会出现空白：</p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{background:#f00; float:right;}</p></blockquote>
<p>给b设置左浮动时，则可以解决中间出现空白的问题，但同样的道理，当b对象内容少不够一行的宽度时时，右侧就会出现空白：</p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{background:#f00; float:left;}</p></blockquote>
<p>当然有另外一种两全的解决办法，即设置b对象距离左边的位置，这样即可以达到浮动的目的也可以解决b对象内容过多而流入到a对象下面的问题：</p>
<blockquote><p>#a{float:left; width:200px; background:#aaa;}<br />
#b{background:#f00; margin-left:200px;}</p></blockquote>
<p><strong>右侧定宽左侧自适应：</strong></p>
<p>与左侧定宽右侧自动一样的道理，右侧定宽左侧自动同样可以实现：</p>
<blockquote><p>#a{background:#f00; margin-left:200px;}<br />
#b{float:right; width:200px; background:#aaa;}</p></blockquote>
<p>如果按照上面的代码，那么你会发现这个代码并不能实现右浮动，b对象显示在a对象的下面，并没有如预期的那样显示成右侧定宽左而自动的效果。因为HTML结构的原因，浮动DIV应该出现在没有浮动的DIV前面，也就是说，如果是按上面的代码，那么&lt;div id=”a”&gt;&#8230;&lt;/dia&gt;与&lt;div id=”b”&gt;&#8230;&lt;/dia&gt;的顺序应该调换一下：</p>
<blockquote><p>&lt;div id=”b”&gt;开始我是在右边，后面就可能跑到左边去&lt;/div&gt;<br />
&lt;div id=”a”&gt;开始我是在左边，后面可能到右边&lt;/div&gt;</p></blockquote>
<p>当然，也可以在不改动HTML结构的情况下，利用CSS样式去调整浮动顺序，这也是CSS的优点之一，即可以在不改动原HTML结构的情况下，完成对页面的修改：</p>
<blockquote><p>#a{float:right; width:200px; background:#aaa;}<br />
#b{background:#f00; margin-right:200px;}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/195/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CSS背景图像属性解读</title>
		<link>http://www.prower.cn/technic/309</link>
		<comments>http://www.prower.cn/technic/309#comments</comments>
		<pubDate>Fri, 01 Aug 2008 01:52:49 +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://www.prower.cn/?p=309</guid>
		<description><![CDATA[CSS的背景属性“background”提供了众多属性值，如颜色、图像、定位等，为网页背景图像的定义提供了极大的便利。看看background提供的属性值： background : background-color  &#124; background-image  &#124; background-repeat  &#124; background-attachment  &#124; background-position 从属性值的名字就可以很明白的看出来，分别是：颜色、图像、铺排、滚动、定位，其中background-repeat、background-position必须是在指定了background-image属性值后才有效。 background-color:transparent &#124; color 。“transparent”是background-color的默认属性值（红色字表示默认值），意为背景色透明，也就是无背景色；而“color”则指的是颜色了，可以是HTML语言支持英文单词，也可以是十六进制的颜色值，当然推荐还是使用十六进制的颜色值来表示，比如黑色使用“#000”。 background-image:none &#124; url 。默认属性值是无背景图，需要使用背景图时可用url进行导入。 background-repeat:repeat &#124; no-repeat  &#124; repeat-x  &#124; repeat-y 。默认属性值是背景图像在纵向和横向上平铺，如果不希望图像平铺而是以一个完整的衬图来显示的时候则使用“no-repeat”，相同的道理在横向上平铺则是使用”repeat-x”纵向上平铺则使用”repeat-y”。 background-attachment:scroll &#124; fixed 。“scroll”是背景图像随对像内容滚动，“fixed”则是背景图像固定。 background-position:position(length)  &#124; position(length) 。对象的背景图像位置有两种方式可选择，一种是使用position（top &#124; center &#124; bottom &#124; left &#124; center &#124; right）来定位背景图像位置，而另一种方式则是使用lefgth（数值）来定位，使用数值需要注意的是，当只有一个数值时，这个值将用于横坐标，纵坐标将默认是50%，如果有两个数值时，则分别是横坐标、纵坐标。 了解并熟悉了以上background属性及属性值之后，很容易的就可以对网页的背景图像做出合适的处理。但是在这里有一个小技巧，那就是在定义了background-image属性之后，应该定义一个与背景图像颜色相近的background-color值，这样在网速缓慢背景图像未加载完成或是背景图像丢失之后，仍然可以提供很好的文字可识别性。比如背景图像是一张黑色的底图，那么文字的颜色自然而然会选择浅色调的甚至白色，如果此时背景图像未加载完成或者图像丢失，那么就需要定义一个黑色的背景颜色，才可以保持文字的可识别性。]]></description>
			<content:encoded><![CDATA[<p>CSS的背景属性“background”提供了众多属性值，如颜色、图像、定位等，为网页背景图像的定义提供了极大的便利。看看background提供的属性值：</p>
<blockquote><p><strong>background : </strong>background-color  <span style="color: #0000ff;">|</span> background-image  <span style="color: #0000ff;">|</span> background-repeat  <span style="color: #0000ff;">|</span> background-attachment  <span style="color: #0000ff;">|</span> background-position</p></blockquote>
<p>从属性值的名字就可以很明白的看出来，分别是：颜色、图像、铺排、滚动、定位，其中background-repeat、background-position必须是在指定了background-image属性值后才有效。</p>
<p><strong>background-color:</strong><span style="color: #ff0000;">transparent</span> <span style="color: #0000ff;">|</span> color 。“transparent”是background-color的默认属性值（红色字表示默认值），意为背景色透明，也就是无背景色；而“color”则指的是颜色了，可以是HTML语言支持英文单词，也可以是十六进制的颜色值，当然推荐还是使用十六进制的颜色值来表示，比如黑色使用“#000”。</p>
<p><strong>background-image:</strong><span style="color: #ff0000;">none</span> <span style="color: #0000ff;">|</span> url 。默认属性值是无背景图，需要使用背景图时可用url进行导入。</p>
<p><strong>background-repeat:</strong><span style="color: #ff0000;">repeat </span><span style="color: #0000ff;">|</span> no-repeat  <span style="color: #0000ff;">|</span> repeat-x  <span style="color: #0000ff;">|</span> repeat-y 。默认属性值是背景图像在纵向和横向上平铺，如果不希望图像平铺而是以一个完整的衬图来显示的时候则使用“no-repeat”，相同的道理在横向上平铺则是使用”repeat-x”纵向上平铺则使用”repeat-y”。</p>
<p><span id="more-309"></span></p>
<p><strong>background-attachment:</strong><span style="color: #ff0000;">scroll</span> <span style="color: #0000ff;">|</span> fixed 。“scroll”是背景图像随对像内容滚动，“fixed”则是背景图像固定。</p>
<p><strong>background-position:</strong>position(length)  <span style="color: #0000ff;">|</span> position(length) 。对象的背景图像位置有两种方式可选择，一种是使用position（top <span style="color: #0000ff;">|</span> center<span style="color: #993300;"> <span style="color: #0000ff;">|</span></span> bottom<span style="color: #993300;"> <span style="color: #0000ff;">|</span></span> left <span style="color: #0000ff;">|</span> center <span style="color: #0000ff;">|</span> right）来定位背景图像位置，而另一种方式则是使用lefgth（数值）来定位，使用数值需要注意的是，当只有一个数值时，这个值将用于横坐标，纵坐标将默认是50%，如果有两个数值时，则分别是横坐标、纵坐标。</p>
<p>了解并熟悉了以上background属性及属性值之后，很容易的就可以对网页的背景图像做出合适的处理。但是在这里有一个小技巧，那就是在定义了background-image属性之后，应该定义一个与背景图像颜色相近的background-color值，这样在网速缓慢背景图像未加载完成或是背景图像丢失之后，仍然可以提供很好的文字可识别性。比如背景图像是一张黑色的底图，那么文字的颜色自然而然会选择浅色调的甚至白色，如果此时背景图像未加载完成或者图像丢失，那么就需要定义一个黑色的背景颜色，才可以保持文字的可识别性。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/309/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WEB标准的重要性</title>
		<link>http://www.prower.cn/technic/199</link>
		<comments>http://www.prower.cn/technic/199#comments</comments>
		<pubDate>Wed, 18 Jun 2008 03:40:34 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[DIV+CSS]]></category>
		<category><![CDATA[WEB标准]]></category>
		<category><![CDATA[标准结构]]></category>
		<category><![CDATA[标签语义]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=199</guid>
		<description><![CDATA[也许现在来说WEB标准的重要性似乎已经有点晚了，因为这已经是几年前的概念了，放到现在来说可能有点炒冷饭的意思。可是事实是，即使这是几年前的概念，但这个概念的普及实施也仅仅是在互联网比较发达的一些城市，而在另一些互联网不发达或者说是发展缓慢的城市里，WEB标准依然是它们很遥远很遥远的一个梦。 本人所在江西省就是这样一个互联网发展缓慢的城市。 查看江西排名靠前的十大网站，竟然有七个还是停留在Table布局的时代：大江网、今视网、中国江西网、江西热线、江西人才人事网、小刀在线、江西搜房网，其中江西人才人事网2008版、江西搜房网新版这两个网站最近出台或即将出台的新版竟然仍然停留在Tabel布局的时代！似乎基于WEB标准化的布局对于它们来说还是无限遥远的事情；剩下的三个已经开始采用DIV+CSS的布局方式：地宝网、易圈网、南昌网吧协会，然后这仅剩的这三个网站中，南昌网吧协会的布局依然很烂，即使在不完全支持WEB标准的IE7浏览器下显示错位的情况都相当严重，不过所知情人士透露，这个网站也即将推出新版，新版网站将完全基于DIV+CSS的方式制作，版面布局也更显大气条理清晰，因为这个新站就是他本人制作的。 上面做的统计数据只是说明有多少网站仍然用着古老的Table来布局制作网站，而不是说用DIV+CSS制作的网站就是WEB标准化的网站，事实上它们离WEB标准化还有很长的一段路要走。 很多国人都认为WEB标准实际上就是DIV+CSS，还有很多的教程什么的都挂着DIV+CSS这样的噱头来欺骗读者，其实这是一个完全错误的理解，DIV+CSS仅仅只是一个表现而已，引用一下百度百科里关于WEB标准的简介： WEB标准不是某一个标准，而是一系列标准的集合。网页主要由三部分组成：结构（Structure）、表现（Presentation）和行为（Behavior）。对应的标准也分三方面：结构化标准语言主要包括XHTML和XML，表现标准语言主要包括CSS，行为标准主要包括对象模型（如 W3C DOM）、ECMAScript等。 确切的说，DIV仅仅只是一个容器，他本身的作用并不大，只在当它配合了CSS后才能突显出它的强大来，所以很多人天天都号称着要用DIV+CSS来制作基于WEB标准的网站，于是很多的教材也挂着DIV+CSS的噱头来欺骗读者，其实这也是一个的理解。 从上面的简介也可以看出来，结构标准指的并不是DIV，而是标准化的语言：XHTML和XML。一个真正基于WEB标准化的网站的结构并不是一味的DIV，而是推崇以更合适的语义标签来制作网页结构。但是我们仍然可以看到很多网页的结构还是清一色的DIV，既然是明明可以用&#60;h1 /&#62;等标签来表示的标题依然使用DIV来包含着，然后用CSS来调整它的样式。 如果一个站全用DIV来进行布局，加载了CSS样式后，也许你看它很正常没什么不对劲，可是一旦撤掉这个CSS样式表后，这个网站所显示出来的页面数据就会让用户找不着北，因为完全不能体现出网页的架构，用户甚至都不可能分得清哪个是标题哪个是正文。 举办CSS裸体日这个活动并不是为了好玩，更为重要的意义是为了验证网站的结构。 由于本人才疏学浅，对于行为标准不熟悉，所以在此略过不谈，望有才学之人补充。 基于WEB标准制作的网站，在难度是比Table布局的时代要高上一个等级，可是“付出就会有回报”这句话不会有假，制作出一个基于WEB标准的网站，所带来的好处也是显而易见的： 对于访问者： ● 文件下载与页面显示速度更快。 ● 内容能被更多的用户所访问（包括失明、视弱、色盲等残障人士）。 ● 内容能被更广泛的设备所访问（包括屏幕阅读机、手持设备、搜索机器人、打印机等等）。 ● 用户能够通过样式选择定制自己的表现界面。 ● 所有页面都能提供适于打印的版本。 对于网站所有者： ● 更少的代码和组件，容易维护。 ● 带宽要求降低（代码更简洁），成本降低。举个例子：当 ESPN.com 使用 CSS改版后，每天节约超过两兆字节（terabytes）的带宽。 ● 更容易被搜寻引擎搜索到。 ● 改版方便，不需要变动页面内容。 ● 提供打印版本而不需要复制内容。 ● 提高网站易用性。在美国，有严格的法律条款（Section 508）来约束政府网站必须达到一定的易用性，其他国家也有类似的要求。 在开发基于WEB标准的网站时，所带来的好处也同样显而易见，因为WEB标准的结构、表现、行为的分离，开发人员的分工可以更加明确，程序员完全不必像以前一样为在纷杂的Table的中寻找位置而苦恼，甚至只需要轻松的将数据绑定在诸如&#60;li /&#62;这样的标签即可；而页面制作人员也不必为了怕担心页面效果程序无法实现而不得不去改动设计好的页面。 如何制作一个基于WEB标准的网站，记住一点：WEB标准不等于DIV+CSS。]]></description>
			<content:encoded><![CDATA[<p>也许现在来说WEB标准的重要性似乎已经有点晚了，因为这已经是几年前的概念了，放到现在来说可能有点炒冷饭的意思。可是事实是，即使这是几年前的概念，但这个概念的普及实施也仅仅是在互联网比较发达的一些城市，而在另一些互联网不发达或者说是发展缓慢的城市里，WEB标准依然是它们很遥远很遥远的一个梦。</p>
<p>本人所在江西省就是这样一个互联网发展缓慢的城市。</p>
<p>查看江西排名靠前的十大网站，竟然有七个还是停留在Table布局的时代：<a href="http://www.jxnews.com.cn/" target="_blank">大江网</a>、<a href="http://www.jxgdw.com/" target="_blank">今视网</a>、<a href="http://www.jxcn.cn/" target="_blank">中国江西网</a>、<a href="http://www.online.jx.cn/" target="_blank">江西热线</a>、<a href="http://www.jxrencai.com/default.asp" target="_blank">江西人才人事网</a>、<a href="http://www.ncdiy.com/" target="_blank">小刀在线</a>、<a href="http://www.jxsoufun.com/" target="_blank">江西搜房网</a>，其中<a href="http://my2008.jxrcw.com/" target="_blank">江西人才人事网2008版</a>、<a href="http://test.jxsoufun.com/" target="_blank">江西搜房网新版</a>这两个网站最近出台或即将出台的新版竟然仍然停留在Tabel布局的时代！似乎基于WEB标准化的布局对于它们来说还是无限遥远的事情；剩下的三个已经开始采用DIV+CSS的布局方式：<a href="http://www.tiboo.cn" target="_blank">地宝网</a>、<a href="http://nc.sns114.com/" target="_blank">易圈网</a>、<a href="http://www.iwangba.com/">南昌网吧协会</a>，然后这仅剩的这三个网站中，南昌网吧协会的布局依然很烂，即使在不完全支持WEB标准的IE7浏览器下显示错位的情况都相当严重，不过所<a href="http://acedia.blogbus.com/" target="_blank">知情人士</a>透露，这个网站也即将推出新版，新版网站将完全基于DIV+CSS的方式制作，版面布局也更显大气条理清晰，因为这个新站就是他本人制作的。</p>
<p><span id="more-199"></span></p>
<p>上面做的统计数据只是说明有多少网站仍然用着古老的Table来布局制作网站，而不是说用DIV+CSS制作的网站就是WEB标准化的网站，事实上它们离WEB标准化还有很长的一段路要走。</p>
<p>很多国人都认为WEB标准实际上就是DIV+CSS，还有很多的教程什么的都挂着DIV+CSS这样的噱头来欺骗读者，其实这是一个完全错误的理解，DIV+CSS仅仅只是一个表现而已，引用一下<a href="http://baike.baidu.com/view/7921.html?wtp=tt" target="_blank">百度百科</a>里关于WEB标准的简介：</p>
<blockquote><p>WEB标准不是某一个标准，而是一系列标准的集合。网页主要由三部分组成：结构（Structure）、表现（Presentation）和行为（Behavior）。对应的标准也分三方面：结构化标准语言主要包括XHTML和XML，表现标准语言主要包括CSS，行为标准主要包括对象模型（如 W3C DOM）、ECMAScript等。</p></blockquote>
<p>确切的说，DIV仅仅只是一个容器，他本身的作用并不大，只在当它配合了CSS后才能突显出它的强大来，所以很多人天天都号称着要用DIV+CSS来制作基于WEB标准的网站，于是很多的教材也挂着DIV+CSS的噱头来欺骗读者，其实这也是一个的理解。</p>
<p>从上面的简介也可以看出来，结构标准指的并不是DIV，而是标准化的语言：XHTML和XML。一个真正基于WEB标准化的网站的结构并不是一味的DIV，而是推崇以更合适的语义标签来制作网页结构。但是我们仍然可以看到很多网页的结构还是清一色的DIV，既然是明明可以用&lt;h1 /&gt;等标签来表示的标题依然使用DIV来包含着，然后用CSS来调整它的样式。</p>
<p>如果一个站全用DIV来进行布局，加载了CSS样式后，也许你看它很正常没什么不对劲，可是一旦撤掉这个CSS样式表后，这个网站所显示出来的页面数据就会让用户找不着北，因为完全不能体现出网页的架构，用户甚至都不可能分得清哪个是标题哪个是正文。</p>
<p>举办<a href="http://www.prower.cn/life/53" target="_blank">CSS裸体日</a>这个活动并不是为了好玩，更为重要的意义是为了验证网站的结构。</p>
<p>由于本人才疏学浅，对于行为标准不熟悉，所以在此略过不谈，望有才学之人补充。</p>
<p>基于WEB标准制作的网站，在难度是比Table布局的时代要高上一个等级，可是“付出就会有回报”这句话不会有假，制作出一个基于WEB标准的网站，所带来的好处也是显而易见的：</p>
<blockquote><p>对于访问者：<br />
● 文件下载与页面显示速度更快。<br />
● 内容能被更多的用户所访问（包括失明、视弱、色盲等残障人士）。<br />
● 内容能被更广泛的设备所访问（包括屏幕阅读机、手持设备、搜索机器人、打印机等等）。<br />
● 用户能够通过样式选择定制自己的表现界面。<br />
● 所有页面都能提供适于打印的版本。</p>
<p>对于网站所有者：<br />
● 更少的代码和组件，容易维护。<br />
● 带宽要求降低（代码更简洁），成本降低。举个例子：当 ESPN.com 使用 CSS改版后，每天节约超过两兆字节（terabytes）的带宽。<br />
● 更容易被搜寻引擎搜索到。<br />
● 改版方便，不需要变动页面内容。<br />
● 提供打印版本而不需要复制内容。<br />
● 提高网站易用性。在美国，有严格的法律条款（Section 508）来约束政府网站必须达到一定的易用性，其他国家也有类似的要求。</p></blockquote>
<p>在开发基于WEB标准的网站时，所带来的好处也同样显而易见，因为WEB标准的结构、表现、行为的分离，开发人员的分工可以更加明确，程序员完全不必像以前一样为在纷杂的Table的中寻找位置而苦恼，甚至只需要轻松的将数据绑定在诸如&lt;li /&gt;这样的标签即可；而页面制作人员也不必为了怕担心页面效果程序无法实现而不得不去改动设计好的页面。</p>
<p>如何制作一个基于WEB标准的网站，记住一点：WEB标准不等于DIV+CSS。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/199/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>css命名及书写规范</title>
		<link>http://www.prower.cn/technic/105</link>
		<comments>http://www.prower.cn/technic/105#comments</comments>
		<pubDate>Thu, 22 May 2008 01:30:47 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css hacks]]></category>
		<category><![CDATA[css命名]]></category>
		<category><![CDATA[css技巧]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=105</guid>
		<description><![CDATA[CSS命名规范 一．文件命名规范 全局样式：global.css； 框架布局：layout.css； 字体样式：font.css； 链接样式：link.css； 打印样式：print.css； 二．常用类/ID命名规范 页　眉：header 内　容：content 容　器：container 页　脚：footer 版　权：copyright　 导　航：menu 主导航：mainMenu 子导航：subMenu 标　志：logo 标　语：banner 标　题：title 侧边栏：sidebar 图　标：Icon 注　释：note 搜　索：search 按　钮：btn 登　录：login 链　接：link 信息框：manage …… 常用类的命名应尽量以常见英文单词为准，做到通俗易懂，并在适当的地方加以注释。对于二级类/ID命名，则采用组合书写的模式，后一个单词的首字母应大写：诸如“搜索框”则应命名为“searchInput”、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为“searchBtn”…… CSS书写规范及方法 一. 常规书写规范及方法 1. 选择DOCTYPE： XHTML 1.0 提供了三种DTD声明可供选择： 过渡的(Transitional):要求非常宽松的DTD，它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“&#62; 严格的(Strict):要求严格的DTD，你不能使用任何表现层的标识和属性，例如&#60;br&#62;。完整代码如下： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“&#62; 框架的(Frameset):专门针对框架页面设计使用的DTD，如果你的页面中包含有框架，需要采用这种DTD。完整代码如下： &#60;!DOCTYPE [...]]]></description>
			<content:encoded><![CDATA[<p><strong>CSS命名规范</strong></p>
<p><strong>一．文件命名规范</strong></p>
<blockquote><p>全局样式：global.css；<br />
框架布局：layout.css；<br />
字体样式：font.css；<br />
链接样式：link.css；<br />
打印样式：print.css；</p></blockquote>
<p><strong>二．常用类/ID命名规范</strong></p>
<blockquote><p>页　眉：header<br />
内　容：content<br />
容　器：container<br />
页　脚：footer<br />
版　权：copyright　<br />
导　航：menu<br />
主导航：mainMenu<br />
子导航：subMenu<br />
标　志：logo<br />
标　语：banner<br />
标　题：title<br />
侧边栏：sidebar<br />
图　标：Icon<br />
注　释：note<br />
搜　索：search<br />
按　钮：btn<br />
登　录：login<br />
链　接：link<br />
信息框：manage<br />
……</p></blockquote>
<p>常用类的命名应尽量以常见英文单词为准，做到通俗易懂，并在适当的地方加以注释。对于二级类/ID命名，则采用组合书写的模式，后一个单词的首字母应大写：诸如“搜索框”则应命名为“searchInput”、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为“searchBtn”……</p>
<p><span id="more-105"></span></p>
<p><strong>CSS书写规范及方法</strong></p>
<p><strong>一. 常规书写规范及方法</strong></p>
<p><span style="color: #993300;">1. 选择DOCTYPE：</span></p>
<p>XHTML 1.0 提供了三种DTD声明可供选择：</p>
<p>过渡的(Transitional):要求非常宽松的DTD，它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>“&gt;</p></blockquote>
<p>严格的(Strict):要求严格的DTD，你不能使用任何表现层的标识和属性，例如&lt;br&gt;。完整代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>“&gt;</p></blockquote>
<p>框架的(Frameset):专门针对框架页面设计使用的DTD，如果你的页面中包含有框架，需要采用这种DTD。完整代码如下：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd</a>“&gt;</p></blockquote>
<p>理想情况当然是严格的DTD，但对于我们大多数刚接触web标准的设计师来说，过渡的DTD(XHTML 1.0 Transitional)是目前理想选择(包括本站，使用的也是过渡型DTD)。因为这种DTD还允许我们使用表现层的标识、元素和属性，也比较容易通过W3C的代码校验。</p>
<p><span style="color: #993300;">2. 指定语言及字符集：</span></p>
<p>为文档指定语言：</p>
<blockquote><p>&lt;html xmlns=”<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>” lang=”en”&gt;</p></blockquote>
<p>为了被浏览器正确解释和通过W3C代码校验，所有的XHTML文档都必须声明它们所使用的编码语言；如：<br />
常用的语言定义：</p>
<blockquote><p>&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
标准的XML文档语言定义：<br />
&lt;?xml version=”1.0&#8243; encoding=” utf-8&#8243;?&gt;<br />
针对老版本的浏览器的语言定义：<br />
&lt;meta http-equiv=”Content-Language” content=” utf-8&#8243; /&gt;<br />
为提高字符集，建议采用“utf-8”。</p></blockquote>
<p><span style="color: #993300;">3. 调用样式表：</span></p>
<p>外部样式表调用：</p>
<p>页面内嵌法：就是将样式表直接写在页面代码的head区。 如：</p>
<blockquote><p>&lt;style type=”text/css”&gt;&lt;!&#8211; body { background : white ; color : black ; } &#8211;&gt; &lt;/style&gt;<br />
外部调用法：将样式表写在一个独立的.css文件中，然后在页面head区用类似以下代码调用。</p>
<p>&lt;link rel=”stylesheet” rev=”stylesheet” href=”css/style.css” type=”text/css” media=”all” /&gt;</p></blockquote>
<p>在符合web标准的设计中，推荐使用外部调用法，可以不修改页面只修改.css文件而改变页面的样式。如果所有页面都调用同一个样式表文件，那么改一个样式表文件，可以改变所有文件的样式。</p>
<p><span style="color: #993300;">4、选用恰当的元素：</span></p>
<p>根据文档的结构来选择HTML元素，而不是根据HTML元素的样式来选择。例如，使用P元素来包含文字段落，而不是为了换行。如果在创建文档时找不到适当的元素，则可以考虑使用通用的div 或者是span；</p>
<p>避免过渡使用div和span。少量、适当的使用div和span元素可以使文档的结构更加清晰合理并且易于使用样式；</p>
<p>尽可能少地使用标签和结构嵌套，这样不但可以使文档结构清晰，同时也可以保持文件的小巧，在提高用户下载速度的同时，也易于浏览器对文档的解释及呈视；</p>
<p><span style="color: #993300;">5、派生选择器：</span></p>
<p>可以使用派生选择器给一个元素里的子元素定义样式，在简化命名的同时也使结构更加的清晰化，如：</p>
<blockquote><p>.mainMenu ul li {background:url(images/bg.gif;)}</p></blockquote>
<p><span style="color: #993300;">6、辅助图片用背影图处理：</span></p>
<p>这里的”辅助图片”是指那些不是作为页面要表达的内容的一部分，而仅仅用于修饰、间隔、提醒的图片。将其做背影图处理，可以在不改动页面的情况下通过CSS样式来进行改动，如：</p>
<blockquote><p>#logo {background:url(images/logo.jpg) #FEFEFE no-repeat right bottom;}</p></blockquote>
<p><span style="color: #993300;">7、结构与样式分离：</span></p>
<p>在页面里只写入文档的结构，而将样式写于css文件中，通过外部调用CSS样式表来实现结构与样式的分离。</p>
<p><span style="color: #993300;">8、文档的结构化书写：</span></p>
<p>页面CSS文档都应采用结构化的书写方式，逻辑清晰易于阅读。如：</p>
<blockquote><p>&lt;div id=”mainMenu”&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=”#” &gt;首页&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”#” &gt;介绍&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”#” &gt;服务&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;</p>
<p>/*=====主导航=====*/<br />
#mainMenu {<br />
width:100%;<br />
height:30px;<br />
background:url(images/mainMenu_bg.jpg) repeat-x;<br />
}<br />
#mainMenu ul li {<br />
float:left;<br />
line-height:30px;<br />
margin-right:1px;<br />
cursor:pointer;<br />
}<br />
/*=====主导航结束=====*/</p></blockquote>
<p><span style="color: #993300;">9、鼠标手势：</span></p>
<p>在XHTML标准中，hand只被IE识别，当需要将鼠标手势转换为“手形”时，则将“hand”换为“pointer”，即“cursor:pointer;”</p>
<p><strong>二．注释书写规范</strong></p>
<p><span style="color: #993300;">1、行间注释：</span></p>
<p>直接写于属性值后面，如：</p>
<blockquote><p>.search{<br />
border:1px solid #fff;/*定义搜索输入框边框*/<br />
background:url(../images/icon.gif) no-report #333;/*定义搜索框的背景*/<br />
}</p></blockquote>
<p><span style="color: #993300;">2、整段注释：</span></p>
<p>分别在开始及结束地方加入注释，如：</p>
<blockquote><p>/*=====搜索条=====*/<br />
.search {<br />
border:1px solid #fff;<br />
background:url(../images/icon.gif) no-repeat #333;<br />
}<br />
/*=====搜索条结束=====*/</p></blockquote>
<p><strong>三．样式属性代码缩写</strong></p>
<p><span style="color: #993300;">1、不同类有相同属性及属性值的缩写：</span></p>
<p>对于两个不同的类，但是其中有部分相同甚至是全部相同的属性及属性值时，应对其加以合并缩写，特别是当有多个不同的类而有相同的属性及属性值时，合并缩写可以减少代码量并易于控制。如：</p>
<blockquote><p>#mainMenu {<br />
background:url(../images/bg.gif);<br />
border:1px solid #333;<br />
width:100%;<br />
height:30px;<br />
overflow:hidden;<br />
}<br />
#subMenu {<br />
background:url(../images/bg.gif);<br />
border:1px solid #333;<br />
width:100%;<br />
height:20px;<br />
overflow:hidden;<br />
}</p></blockquote>
<p>两个不同类的属性值有重复之处，刚可以缩写为：</p>
<blockquote><p>#mainMenu,#subMenu {<br />
background:url(../images/bg.gif);<br />
border:1px solid #333;<br />
width:100%;<br />
overflow:hidden;<br />
}<br />
#mainMenu {height:30px;}<br />
#subMenu {height:20px;}</p></blockquote>
<p><span style="color: #993300;">2、同一属性的缩写：</span></p>
<p>同一属性根据它的属性值也可以进行简写，如：</p>
<blockquote><p>.search {<br />
background-color:#333;<br />
background-image:url(../images/icon.gif);<br />
background-repeat: no-repeat;<br />
background-position:50% 50%;<br />
}<br />
.search {<br />
background:#333 url(../images/icon.gif) no-repeat 50% 50%;<br />
}</p></blockquote>
<p><span style="color: #993300;">3、内外侧边框的缩写：</span></p>
<p>在CSS中关于内外侧边框的距离是按照上、右、下、左的顺序来排列的，当这四个属性值不同时也可直接缩写，如：</p>
<blockquote><p>.btn {<br />
margin-top:10px;<br />
margin-right:8px;<br />
margin-bottom:12px;<br />
margin-left:5px;<br />
padding-top:10px;<br />
padding-right:8px;<br />
padding-bottom:12px;<br />
padding-left:8px;<br />
}</p></blockquote>
<p>则可缩写为：</p>
<blockquote><p>.btn {<br />
Margin:10px 8px 12px 5px;<br />
Padding:10px 8px 12px 5px;<br />
}</p></blockquote>
<p>而如果当上边与下边、左边与右边的边框属性值相同时，则属性值可以直接缩写为两个，如：</p>
<blockquote><p>.btn {<br />
margin-top:10px;<br />
margin-right:5px;<br />
margin-bottom:10px;<br />
margin-left:5px;<br />
}</p></blockquote>
<p>缩写为：</p>
<blockquote><p>.btn {margin:10px 5px;}</p></blockquote>
<p>而当上下左右四个边框的属性值都相同时，则可以直接缩写成一个，如：</p>
<blockquote><p>.btn {<br />
margin-top:10px;<br />
margin-right:10px;<br />
margin-bottom:10px;<br />
margin-left:10px;<br />
}</p></blockquote>
<p>缩写为：</p>
<blockquote><p>.btn{margin:10px;}</p></blockquote>
<p><span style="color: #993300;">4、颜色值的缩写：</span></p>
<p>当RGB三个颜色值数值相同时，可缩写颜色值代码。如：</p>
<blockquote><p>.menu { color:#ff3333;}</p></blockquote>
<p>可缩写为:</p>
<blockquote><p>.menu {color:#f33;}</p></blockquote>
<p><span style="color: #000000;"><strong>四．hack书写规范</strong> </span></p>
<p>因为不同浏览器对W3C标准的支持不一样，各个浏览器对于页面的解释呈视也不尽相同，比如IE在很多情况下就与FF存在3px的差距，对于这些差异性，就需要利用css 的hack来进行调整，当然在没有必要的情况下，最好不要写hack来进行调整，避免因为hack而导致页面出现问题。</p>
<p><span style="color: #993300;">1、 IE6、IE7、Firefox之间的兼容写法：</span></p>
<p>写法一：</p>
<blockquote><p>IE都能识别*;标准浏览器(如FF)不能识别*；<br />
IE6能识别*，但不能识别 !important,<br />
IE7能识别*，也能识别!important;<br />
FF不能识别*，但能识别!important;<br />
根据上述表达，同一类/ID下的CSS 　hack可写为：<br />
.searchInput {<br />
background-color:#333;/*三者皆可*/<br />
*background-color:#666　!important; /*仅IE7*/<br />
*background-color:#999; /*仅IE6及IE6以下*/<br />
}<br />
一般三者的书写顺序为：FF、IE7、IE6.</p></blockquote>
<p>写法二：</p>
<blockquote><p>IE6可识别“_”，而IE7及FF皆不能识别，所以当只针对IE6与IE7及FF之间的区别时，可这样书写：<br />
.searchInput {<br />
background-color:#333;/*通用*/<br />
_background-color:#666;/*仅IE6可识别*/<br />
}</p></blockquote>
<p>写法三：</p>
<blockquote><p>*+html 与 *html 是IE特有的标签, Firefox 暂不支持。<br />
.searchInput {background-color:#333;}<br />
*html .searchInput {background-color:#666;}/*仅IE6*/<br />
*+html .searchInput {background-color:#555;}/*仅IE7*/</p></blockquote>
<p>屏蔽IE浏览器：</p>
<p>select是选择符，根据情况更换。第二句是MAC上safari浏览器独有的。</p>
<blockquote><p>*:lang(zh) select {font:12px  !important;} /*FF的专用*/<br />
select:empty {font:12px  !important;} /*safari可见*/</p></blockquote>
<p>IE6可识别：</p>
<p>这里主要是通过CSS注释分开一个属性与值，注释在冒号前。</p>
<blockquote><p>select { display /*IE6不识别*/:none;}</p></blockquote>
<p>IE的if条件hack写法：</p>
<p>所有的IE可识别：</p>
<blockquote><p>&lt;!&#8211;[if IE]&gt; Only IE &lt;![end if]&#8211;&gt;<br />
只有IE5.0可以识别:<br />
&lt;!&#8211;[if IE 5.0]&gt; Only IE 5.0 &lt;![end if]&#8211;&gt;<br />
IE5.0包换IE5.5都可以识别:<br />
&lt;!&#8211;[if gt IE 5.0]&gt; Only IE 5.0+ &lt;![end if]&#8211;&gt;<br />
仅IE6可识别:<br />
&lt;!&#8211;[if lt IE 6]&gt; Only IE 6- &lt;![end if]&#8211;&gt;<br />
IE6以及IE6以下的IE5.x都可识别:<br />
&lt;!&#8211;[if gte IE 6]&gt; Only IE 6/+ &lt;![end if]&#8211;&gt;<br />
仅IE7可识别:<br />
&lt;!&#8211;[if lte IE 7]&gt; Only IE 7/- &lt;![end if]&#8211;&gt;</p></blockquote>
<p><span style="color: #993300;">2、清除浮动：</span></p>
<p>在Firefox中，当子级都为浮动时，那么父级的高度就无法完全的包住整个子级，那么这时用这个清除浮动的HACK来对父级做一次定义，那么就可以解决这个问题。</p>
<blockquote><p>select:after {<br />
content:”.”;<br />
display:block;<br />
height:0;<br />
clear:both;<br />
visibility:hidden;<br />
}</p></blockquote>
<p><span style="color: #999999;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span></p>
<p><span style="color: #000000;">有喜欢的朋友可以点击这里下载本文档：<strong><a href="http://www.prower.cn/wp-content/uploads/2008/05/css.doc">css命名及书写规范</a></strong></span></p>
<p>或者从BOX.NET下载：<a href="http://www.box.net/shared/wnl9yweg4g">http://www.box.net/shared/wnl9yweg4g</a></p>
<p><strong>申明：本文部分资料搜集于网络！</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/105/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用UL进行宽度固定的多行多列布局</title>
		<link>http://www.prower.cn/technic/56</link>
		<comments>http://www.prower.cn/technic/56#comments</comments>
		<pubDate>Sat, 19 Apr 2008 02:12:28 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[CSS布局]]></category>
		<category><![CDATA[ul布局]]></category>
		<category><![CDATA[多行多列]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=166</guid>
		<description><![CDATA[几天在用CSS写三列布局的时候突然想到的这样一个方法，这个想法自己都觉得有些疯狂，如果其中有什么不对的地方请各位不吝指教。 当需要写一个三列布局的时候，一般情况下我会选择使用如下的DIV布局方式： 使用这样的嵌套方式无疑可以使代码出错的概率减少很多，但同时这样的布局也略显复杂，对于后期的维护也略显不便。我们在布局导航时经常会使用到一个方法，那就是使用&#60;ul&#62;列表来进行布局，而导航可以形容为多列式的布局，既然如此，那么我们也就可以使用&#60;ul&#62;来进行页面的多列布局。 这是一个固定宽度的布局，也就是说流动性不强，流动性的布局目前还没有试验过，等有时间了再试验一下，下面贴上这个布局的代码： &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml”&#62; &#60;head&#62; &#60;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&#62; &#60;title&#62;使用UL进行多列布局&#60;/title&#62; &#60;style type=”text/css”&#62; * {margin:0; padding:0;} body { width:100%; height:100%; background:#ddedfb; } #mainContent { width:600px; margin:10px auto; } #header,#footer { background:#8AC7FA; height:80px; clear:both; } #footer { clear:both; padding-top:10px; } #content { height:300px; margin:10px auto; } [...]]]></description>
			<content:encoded><![CDATA[<p>几天在用CSS写三列布局的时候突然想到的这样一个方法，这个想法自己都觉得有些疯狂，如果其中有什么不对的地方请各位不吝指教。</p>
<p>当需要写一个三列布局的时候，一般情况下我会选择使用如下的DIV布局方式：</p>
<p><a href="http://www.prower.cn/wp-content/uploads/2008/04/layout1.jpg"><img class="alignnone size-full wp-image-167" title="layout1" src="http://www.prower.cn/wp-content/uploads/2008/04/layout1.jpg" alt="" width="500" height="99" /></a></p>
<p>使用这样的嵌套方式无疑可以使代码出错的概率减少很多，但同时这样的布局也略显复杂，对于后期的维护也略显不便。我们在布局导航时经常会使用到一个方法，那就是使用&lt;ul&gt;列表来进行布局，而导航可以形容为多列式的布局，既然如此，那么我们也就可以使用&lt;ul&gt;来进行页面的多列布局。</p>
<p><a href="http://www.prower.cn/wp-content/uploads/2008/04/layout.jpg"><img class="alignnone size-full wp-image-168" title="layout" src="http://www.prower.cn/wp-content/uploads/2008/04/layout.jpg" alt="" width="500" height="407" /></a></p>
<p><span id="more-56"></span></p>
<p>这是一个固定宽度的布局，也就是说流动性不强，流动性的布局目前还没有试验过，等有时间了再试验一下，下面贴上这个布局的代码：</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;使用UL进行多列布局&lt;/title&gt;<br />
&lt;style type=”text/css”&gt;<br />
* {margin:0; padding:0;}<br />
body {<br />
width:100%;<br />
height:100%;<br />
background:#ddedfb;<br />
}<br />
#mainContent {<br />
width:600px;<br />
margin:10px auto;<br />
}<br />
#header,#footer {<br />
background:#8AC7FA;<br />
height:80px;<br />
clear:both;<br />
}<br />
#footer {<br />
clear:both;<br />
padding-top:10px;<br />
}<br />
#content {<br />
height:300px;<br />
margin:10px auto;<br />
}<br />
#content ul {<br />
list-style:none;<br />
height:100%;<br />
}<br />
#content ul li {<br />
width:150px;<br />
height:100%;<br />
background:#8AC7FA;<br />
float:left;<br />
}<br />
#content ul li#li2 {<br />
width:280px;<br />
margin:0 10px;<br />
}<br />
#content ul li#li2 ul li {<br />
width:270px;<br />
height:140px;<br />
margin:5px;<br />
background:#0581F0;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;div id=”mainContent”&gt;<br />
&lt;div id=”header”&gt;这是头部&lt;/div&gt;<br />
&lt;div id=”content”&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;这是左边&lt;/li&gt;<br />
&lt;li id=”li2&#8243;&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;这是中间的上部&lt;/li&gt;<br />
&lt;li&gt;这是中间的下部&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&lt;li&gt;这是右边&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;<br />
&lt;div id=”footer”&gt;这是底部&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p>这段代码在IE7及FF3下都能正常显示，其他浏览器未做测试，如果你有更好的方法不妨提出来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/56/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>CSS盒模型，宽度与高度的计算方法</title>
		<link>http://www.prower.cn/technic/38</link>
		<comments>http://www.prower.cn/technic/38#comments</comments>
		<pubDate>Thu, 06 Mar 2008 07:02:28 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css盒模型]]></category>
		<category><![CDATA[margin]]></category>
		<category><![CDATA[padding]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=94</guid>
		<description><![CDATA[当我们布局一个网页的时候，经常会遇到这样的一种情况，那就是最终网页成型的宽度或是高度会超出我们预先的计算，其实就就是所谓的CSS的盒模型造成的。 #test{margin:10px;padding:10px;width:100px;height:100px;} 如上一段的代码，很多时候我们会把它所占的位置计算成width:120px，height:120px，因为在正常的理解下，padding是内边距，应该是包括在width里面的，而margin是外边距，所以width＝margin-left + margin-right + width，但是浏览器对于CSS盒模型的解释却并非如此，所以最终我们会发现布局出来的网页宽度与高度都会超出我们预期的计算，最后造成显示上的错位。 其实不然，对于test所占的位置的真正计算应该是width=margin-left + margin-right + padding-left + padding-right + width，也就是宽度真正所占的大小应该是内边距+外边距+宽度本身，也就是说test真正的大小应该是140px才对。高度的计算与宽度的计算是一样的。 而如果给test加上边框的话，这个宽度与高度的算法还应该加上边框的大小。 #test{margin:10px;padding:10px;border:5px;width:100px;height:100px;} 这里的test的宽度就应该是外边框+内边框+边框+宽度本身，所以test的width是 150px。 如下图所示，width与height真正所占的位置并不是它本身的那一小块，而应该是一直到最外面深蓝色的那个层为止。]]></description>
			<content:encoded><![CDATA[<p>当我们布局一个网页的时候，经常会遇到这样的一种情况，那就是最终网页成型的宽度或是高度会超出我们预先的计算，其实就就是所谓的CSS的盒模型造成的。</p>
<p><font color="#3366ff">#test{margin:10px;padding:10px;width:100px;height:100px;}</font></p>
<p>如上一段的代码，很多时候我们会把它所占的位置计算成width:120px，height:120px，因为在正常的理解下，padding是内边距，应该是包括在width里面的，而margin是外边距，所以width＝margin-left + margin-right + width，但是浏览器对于CSS盒模型的解释却并非如此，所以最终我们会发现布局出来的网页宽度与高度都会超出我们预期的计算，最后造成显示上的错位。</p>
<p><span id="more-38"></span></p>
<p>其实不然，对于test所占的位置的真正计算应该是width=margin-left + margin-right + padding-left + padding-right + width，也就是宽度真正所占的大小应该是内边距+外边距+宽度本身，也就是说test真正的大小应该是140px才对。高度的计算与宽度的计算是一样的。</p>
<p>而如果给test加上边框的话，这个宽度与高度的算法还应该加上边框的大小。</p>
<p><font color="#3366ff">#test{margin:10px;padding:10px;</font><font color="#ff0000">border:5px;</font>width:100px;height:100px;}</p>
<p>这里的test的宽度就应该是外边框+内边框+边框+宽度本身，所以test的width是 150px。</p>
<p>如下图所示，width与height真正所占的位置并不是它本身的那一小块，而应该是一直到最外面深蓝色的那个层为止。</p>
<p><a href="http://www.prower.cn/wp-content/uploads/2008/03/11.jpg" title="11.jpg"><img src="http://www.prower.cn/wp-content/uploads/2008/03/11.jpg" alt="11.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/38/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>精简CSS（二）</title>
		<link>http://www.prower.cn/technic/34</link>
		<comments>http://www.prower.cn/technic/34#comments</comments>
		<pubDate>Fri, 29 Feb 2008 02:46:23 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[网页设计]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=86</guid>
		<description><![CDATA[在同一个站点的CSS文件中，不可避免的会出现不同的ID或Class却有一部分相同的属性，如果将这些ID或Class逐个分开来写的话，在CSS文件里无疑会生成重复代码，而我们要尽量的精简CSS文件的大小，那么“消灭”这部分重复的代码就变得势在必行。 看下面一段CSS代码： #header{margin:10px 15px;background:#333 url(Images/header.jpg);} #content{margin:10px 15px;padding:10px;background:#999;} #copyright{margin:10px 15px;border:1px solid #f00;} 在上面的三个ID中都有一个相同的属性“margin:10px 15px;”，如果就这样分开来写的话，这三个ID之间将保持各自独立的关系，但却生成了重复的代码，而我们可以将其写成如下格式： #header,#content,#copyright{margin:10px 15px;} #header{background:#333 url(Images/header.jpg);} #content{padding:10px;background:#999;} #copyright{border:1px solid #f00;} 将上面的ID换成Class也是一样的。这样写我们就成功的将重复代码“消灭”掉了。但是如果这里具有相同的属性的ID或Class过多的话，难免会造成代码可读性降到很低很低，所以除此之外当具有相同属性的都是Class时还有另外的一种写法： .main{margin:10px 15px;} .header{background:#333 url(Images/header.jpg);} .content{padding:10px;background:#999;} .copyright{border:1px solid #f00;} 当然这种写法时，调用时的写法也与平常不一样。 &#60;div class=”header main”&#62;&#60;/div&#62; &#60;div class=”content main”&#62;&#60;/div&#62; &#60;div class=”copyright main”&#62;&#60;/div&#62; 这样的写法同样可以达到效果，并且也不会再怕具有相同属性的Class多而造成代码可读性差的问题，但值得注意的一点就是，这种写法对于ID是无效的，不管其中是存在一个ID或者全部都是ID，都将造成这段代码的无效。]]></description>
			<content:encoded><![CDATA[<p>在同一个站点的CSS文件中，不可避免的会出现不同的ID或Class却有一部分相同的属性，如果将这些ID或Class逐个分开来写的话，在CSS文件里无疑会生成重复代码，而我们要尽量的精简CSS文件的大小，那么“消灭”这部分重复的代码就变得势在必行。</p>
<p>看下面一段CSS代码：</p>
<p><font color="#3366ff">#header{margin:10px 15px;background:#333 url(Images/header.jpg);}<br />
#content{margin:10px 15px;padding:10px;background:#999;}<br />
#copyright{margin:10px 15px;border:1px solid #f00;}</font></p>
<p><font color="#000000">在上面的三个ID中都有一个相同的属性“margin:10px 15px;”，如果就这样分开来写的话，这三个ID之间将保持各自独立的关系，但却生成了重复的代码，而我们可以将其写成如下格式：</font></p>
<p><font color="#3366ff">#header,#content,#copyright{margin:10px 15px;}<br />
#header{background:#333 url(Images/header.jpg);}<br />
#content{padding:10px;background:#999;}<br />
#copyright{border:1px solid #f00;}</font></p>
<p><span id="more-34"></span></p>
<p><font color="#000000">将上面的ID换成Class也是一样的。这样写我们就成功的将重复代码“消灭”掉了。但是如果这里具有相同的属性的ID或Class过多的话，难免会造成代码可读性降到很低很低，所以除此之外当具有相同属性的都是</font><font color="#ff0000">Class</font>时还有另外的一种写法：</p>
<p><font color="#3366ff">.main{margin:10px 15px;}<br />
.header{background:#333 url(Images/header.jpg);}<br />
.content{padding:10px;background:#999;}<br />
.copyright{border:1px solid #f00;}</font></p>
<p><font color="#000000">当然这种写法时，调用时的写法也与平常不一样。</font></p>
<p><font color="#3366ff">&lt;div class=”header main”&gt;&lt;/div&gt;<br />
&lt;div class=”content main”&gt;&lt;/div&gt;<br />
&lt;div class=”copyright main”&gt;&lt;/div&gt;</font></p>
<p><font color="#000000">这样的写法同样可以达到效果，并且也不会再怕具有相同属性的Class多而造成代码可读性差的问题，但值得注意的一点就是，这种写法对于ID是无效的，不管其中是存在一个ID或者全部都是ID，都将造成这段代码的无效。</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/34/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>精简CSS（一）</title>
		<link>http://www.prower.cn/technic/31</link>
		<comments>http://www.prower.cn/technic/31#comments</comments>
		<pubDate>Thu, 28 Feb 2008 02:34:39 +0000</pubDate>
		<dc:creator>摄氏度</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[网页设计]]></category>

		<guid isPermaLink="false">http://www.prower.cn/?p=78</guid>
		<description><![CDATA[尽管对于现如今的带宽来说，网页文件那仅以K来算的大小实在是微不足道，但如何将这以K来计算的网页文件精简到最小还是网页设计师们所应该考虑的问题之一。 众所周之，在不影响整个网页构架与功能的情况下，网页文件越小越好，因为更小的网页文件有利于浏览器对网页的解释时间缩到更短，自然访客也就不用面临等待网页缓慢呈现的烦躁了，这一点对于那些带宽少网速慢的用户犹为明显。试想一下，你会是希望打开一个网站的时候整个站点马上呈现在你面前呢？还是喜欢花上十几秒甚至是几分钏来看整个站点一点一点的被浏览器解释出来呢？ 在Table布局的时代，代码无数次的随着表格在页面里重复，致使整个网页文件变得臃肿无比，代码的可读性也降到最低，浏览器的解释时间自然也增加了不少。而自从DIV+CSS的布局替代Table布局之后，这一切都得到了极大的改善，让Table回归到它原本用于显示数据的位置上去，而布局就交给DIV+CSS来做，这样代码的可读性与复用性都得到了提高，而DIV+CSS更为重要的一点就是将网页文件的表现与结构区分开来，再也不用为了表现而去改动整个网页文件的结构了。 即使DIV+CSS的布局方式将以前Table布局时代码的臃肿降到了最低，但对于网页设计师来说，如何将网页文件的大小控制到最小是永远值得探索和追求的一个问题。 看如下一段代码： #header {                  margin-top:10px;                  margin-right:15px;                  margin-bottom:10px;                  margin-left:15px;                  backgroung-color:#333333;                  background-images:url(Images/header.jpg);  } 这样的一段CSS代码，在条理上很清晰，结构也很明了，可读性很强，可是这样的一段代码却没有做精简，也就是说它是最原始的CSS代码，下面看精简后的代码： #header {                   margin:10px 15px;                   backgroung:#333 url(Images/header.jpg);  } 在CSS中有复合属性这一说法，也就是说可以将很多属性参数整合在一起的，比如说上面的“margin-top;  margin-right;  margin-bottom;  margin-left;”可以整合成一个“margin”属性，然后为其配上参数。 通过这一点，我们就可以在原始CSS代码的基本上将代码进一步的精简。而且这样写的结构也合理，可读性也同样强。可是对于要精简到彻底来说，这还不够。为了让这段CSS代码的结构明了，我们用上了空格换行等占用空间的东西，如果将这些占用空间的去掉呢？ #header{margin:10px 15px;background:#333 url(Images/header.jpg);} 只这一句就替代了上面的一段代码，这样代码就已经精简到了最大化，当然，并不推荐所有人都这样写，这样写的CSS代码在可读性上要远远差于段落式的写法，除非你对自己写的代码有完全掌握的信心。 未完待续……]]></description>
			<content:encoded><![CDATA[<p>尽管对于现如今的带宽来说，网页文件那仅以K来算的大小实在是微不足道，但如何将这以K来计算的网页文件精简到最小还是网页设计师们所应该考虑的问题之一。</p>
<p>众所周之，在不影响整个网页构架与功能的情况下，网页文件越小越好，因为更小的网页文件有利于浏览器对网页的解释时间缩到更短，自然访客也就不用面临等待网页缓慢呈现的烦躁了，这一点对于那些带宽少网速慢的用户犹为明显。试想一下，你会是希望打开一个网站的时候整个站点马上呈现在你面前呢？还是喜欢花上十几秒甚至是几分钏来看整个站点一点一点的被浏览器解释出来呢？</p>
<p>在Table布局的时代，代码无数次的随着表格在页面里重复，致使整个网页文件变得臃肿无比，代码的可读性也降到最低，浏览器的解释时间自然也增加了不少。而自从DIV+CSS的布局替代Table布局之后，这一切都得到了极大的改善，让Table回归到它原本用于显示数据的位置上去，而布局就交给DIV+CSS来做，这样代码的可读性与复用性都得到了提高，而DIV+CSS更为重要的一点就是将网页文件的表现与结构区分开来，再也不用为了表现而去改动整个网页文件的结构了。</p>
<p>即使DIV+CSS的布局方式将以前Table布局时代码的臃肿降到了最低，但对于网页设计师来说，如何将网页文件的大小控制到最小是永远值得探索和追求的一个问题。</p>
<p><span id="more-31"></span></p>
<p>看如下一段代码：</p>
<p><font color="#3366ff">#header {<br />
                 margin-top:10px;<br />
                 margin-right:15px;<br />
                 margin-bottom:10px;<br />
                 margin-left:15px;<br />
                 backgroung-color:#333333;<br />
                 background-images:url(Images/header.jpg);<br />
 }</font></p>
<p><font color="#000000">这样的一段CSS代码，在条理上很清晰，结构也很明了，可读性很强，可是这样的一段代码却没有做精简，也就是说它是最原始的CSS代码，下面看精简后的代码：</font></p>
<p><font color="#3366ff">#header {<br />
                  margin:10px 15px;<br />
                  backgroung:#333 url(Images/header.jpg);<br />
 }</font></p>
<p><font color="#000000">在CSS中有复合属性这一说法，也就是说可以将很多属性参数整合在一起的，比如说上面的“margin-top;  margin-right;  margin-bottom;  margin-left;”可以整合成一个“margin”属性，然后为其配上参数。</font></p>
<p>通过这一点，我们就可以在原始CSS代码的基本上将代码进一步的精简。而且这样写的结构也合理，可读性也同样强。可是对于要精简到彻底来说，这还不够。为了让这段CSS代码的结构明了，我们用上了空格换行等占用空间的东西，如果将这些占用空间的去掉呢？</p>
<p><font color="#3366ff">#header{margin:10px 15px;background:#333 url(Images/header.jpg);}</font></p>
<p><font color="#000000">只这一句就替代了上面的一段代码，这样代码就已经精简到了最大化，当然，并不推荐所有人都这样写，这样写的CSS代码在可读性上要远远差于段落式的写法，除非你对自己写的代码有完全掌握的信心。</font></p>
<p>未完待续……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prower.cn/technic/31/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

