<?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>iPUNKID &#187; 交替背景</title>
	<atom:link href="http://blog.punkid.org/tag/%e4%ba%a4%e6%9b%bf%e8%83%8c%e6%99%af/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.punkid.org</link>
	<description>To ∞ and Beyond</description>
	<lastBuildDate>Sun, 29 Jan 2012 13:02:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>浅谈实现网页交替背景颜色的几种方法</title>
		<link>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/</link>
		<comments>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/#comments</comments>
		<pubDate>Sat, 17 Feb 2007 16:05:38 +0000</pubDate>
		<dc:creator>iPUNKID</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[交替背景]]></category>

		<guid isPermaLink="false">http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/</guid>
		<description><![CDATA[WordPress 的评论模板部分都会定义一个$oddcomment函数用来实现评论的样式交替变换，采取交替样式可以使列表有一定分区度，便于浏览。我稍稍总结了下，分别通过javascript, php和CSS三种方式进行实现，其中CSS实现方法还几乎处于理想状态，仅供参考。 实现方法之Javascript篇 假设我们有个id名为 list 的无序列表ul，其下有5项item (li)。我们可以用getElementById和getElementsByTagName先找到这些item，然后通过for循环筛选出奇数项并赋予class值。再通过CSS定义该奇数项class样式从而达到交替样式的目的。javascript代码如下: function alterItem() { var list=document.getElementById('list'); var items=list.getElementsByTagName('li'); for (var i=0;i&#60;items.length;i++) { if(i%2==0) items[i].className='odd'; } } window.onload=alterItem; 最后用通过CSS定义 .odd样式就行了。 实现方法之PHP篇 此方法来源于WordPress论坛的这篇日志。我曾经在PP的sidenotes部分就是用这种方法实现交替背景的(WP的comment部分已经有oddcomment函数了，无须再费周折)，我直接照搬原来PP theme里的sidenotes部分代码。 &#60;?php query_posts('category_name=sidenotes&#038;showposts=3'); ?&#62; &#60;?php while (have_posts()) : the_post(); ?&#62; &#60;div id="p&#60;?php the_ID(); ?&#62;" class="&#60;?=($i%2)?"even":"odd";$i++;?&#62;"&#62; &#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark" title="Permanent Link to &#60;?php strip_tags(the_title()); ?&#62;" class="title"&#62;&#60;?php [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 的评论模板部分都会定义一个<var>$oddcomment</var>函数用来实现评论的样式交替变换，采取交替样式可以使列表有一定分区度，便于浏览。我稍稍总结了下，分别通过<a href="#javascript_way" title="Javascript Way">javascript</a>, <a href="#php_way" title="PHP Way">php</a>和<a href="#css_way" title="CSS Way">CSS</a>三种方式进行实现，其中CSS实现方法还几乎处于理想状态，仅供参考。</p>
<h3 id="javascript_way">实现方法之Javascript篇</h3>
<p>假设我们有个id名为 list 的无序列表ul，其下有5项item (li)。我们可以用<var>getElementById</var>和<var>getElementsByTagName</var>先找到这些item，然后通过for循环筛选出奇数项并赋予class值。再通过CSS定义该奇数项class样式从而达到交替样式的目的。javascript代码如下:</p>
<pre>
 function alterItem() {
 var list=document.getElementById('list');
 var items=list.getElementsByTagName('li');
 for (var i=0;i&lt;items.length;i++) {
   if(i%2==0)
   items[i].className='odd';
   }
 }

 window.onload=alterItem;
</pre>
<p>最后用通过CSS定义 .odd样式就行了。<br />
<span id="more-16"></span></p>
<h3 id="php_way">实现方法之PHP篇</h3>
<p>此方法来源于<a href="http://wordpress.org/support/topic/1148?replies=20#post-27911" title="Alternating comment backgrounds">WordPress论坛的这篇日志</a>。我曾经在PP的sidenotes部分就是用这种方法实现交替背景的(WP的comment部分已经有<var>oddcomment</var>函数了，无须再费周折)，我直接照搬原来PP theme里的sidenotes部分代码。</p>
<pre>
&lt;?php query_posts('category_name=sidenotes&#038;showposts=3'); ?&gt;
     &lt;?php while (have_posts()) : the_post(); ?&gt;
     &lt;div id="p&lt;?php the_ID(); ?&gt;" <strong>class="&lt;?=($i%2)?"even":"odd";$i++;?&gt;"</strong>&gt;
     &lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanent Link to &lt;?php strip_tags(the_title()); ?&gt;" class="title"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
     &lt;?php the_content(); ?&gt;
     &lt;/div&gt;
&lt;?php endwhile;&gt;
</pre>
<p>注意其中加粗部分，先在模板文件顶部插入如下代码<code>&lt;?$i;?&gt;</code>，然后在class里加入这句判断语句就够了<code>&lt;?=($i%2)?"even":"odd";$i++;?&gt;</code>。学过C语言的都知道这是个if..else判断语句的缩写形式&#8211; <code>If (Expression) ? true : false</code>，如果满足表达式，则执行? 部分，否则执行 : 部分。也就是说，满足 $i%2等于0，即$i为偶，则赋予class为even值，然后$i 加一，滚动到下一item上进行第二次判断。</p>
<h3 id="css_way">实现方法之CSS篇</h3>
<p>CSS2有个<var>:nth-child</var>的选择器，这是个非常非常强大的选择器，你可以定义<code>Element:nth-child(3)</code>来找到为其父元素下的第三个子元素，你也可以定义<code>Element:nth-child(odd) </code>或者<code>Element:nth-child(even)</code> 来查找其父元素下的奇偶子元素，甚至可以用<code>Element:nth-child(3n+2)</code> 来找到其父元素下的第3n+2个元素( n=0,1,2&#8230;)。通过CSS方法定义那太简单了!</p>
<pre>
ul#list li:nth-child(odd) {background:#000;color:#fff}

ul#list li:nth-child(even) {background:#fff;color:#000;}
</pre>
<p>不过，这么好的方法&#8230;目前只有linux下的konqueror浏览器支持(注:Konqueror是目前唯一100%通过<a href="http://www.css3.info/selectors-test/" title="CSS Selectors Suites">CSS3所有选择器测试</a>的浏览器)，好在Opera已经开始<a href="http://my.opera.com/dstorey/blog/show.dml/701902" title="Upcoming CSS3 support in Opera">落实支持该选择器的工作</a>了。</p>
<p>我个人比较喜欢这种cutting edge的方式! 如果你想让你的网站/blog做的更先锋的话就用这种方式吧!</p>
<p><strong>顺带说句</strong>: 其实linux下的konqueror是款相当棒的浏览器，他们对CSS的支持一向都是做的最棒的(目前还有个opacity没解决)，连<a href="http://www.css3.info/preview/multiple-backgrounds/" title="Multiple-Backgrounds">multiple-backgrounds</a>他们都支持了!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.punkid.org/2007/02/18/sereval-ways-to-make-alter-background/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

