<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>前端思考：专注前端开发，关注用户体验 &#187; Xhtml+css</title>
	<atom:link href="http://www.artcss.com/archives/tag/xhtmlcss/feed" rel="self" type="application/rss+xml" />
	<link>http://www.artcss.com</link>
	<description>一个像素的距离...</description>
	<lastBuildDate>Sat, 12 Feb 2011 03:34:07 +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>阿里妈妈UED谈CSS Sprites</title>
		<link>http://www.artcss.com/archives/419.html</link>
		<comments>http://www.artcss.com/archives/419.html#comments</comments>
		<pubDate>Tue, 27 Oct 2009 01:45:49 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Sprites]]></category>
		<category><![CDATA[知名UED]]></category>

		<guid isPermaLink="false">http://www.artskin.cn/blog/?p=419</guid>
		<description><![CDATA[.postarea ul.sprite li{float:left;list-style:none} .postarea ul.sprite li img{width: 100px; height: 120px;} CSS Sprites 简介： 通 常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术，目前它已经在网页开发中发展得较为成熟，阿里巴巴各子公司的网页中到处都可发现css sprites 的影子。但CSS Sprites并不是什么金科玉律，但在很多情况下，它有着一定的优势，最重要的是它可以减轻服务器的负载，提高网页加载速度。随着Web设计向着精致、 巧妙的方向发展，设计师们开始考虑使用非Javascript的方 式制作鼠标滑过、悬停菜单的效果，这时CSS Sprite应运而生。 说白了，CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中，再利用CSS的“background-image”，“background- repeat”，“background-position”的组合进行背景定位，background-position可以用数字能精确的定位出背景 图片的位置。 当页面加载时，不是加载每个单独图片，而是一次加载整个组合图片。这是一个了不起的改进，它大大减少了HTTP请求的次数，减轻服务器压力，同时缩短了悬停加载图片所需要的时间延迟，使效果更流畅，不会停顿。 CSS Sprites应用： 在这方面，淘宝网做的比较好，我就以淘宝网为例吧。 [实例一:淘宝频道页面导航] 效果图： sprites图： [实例二：淘宝首页] 效果图： sprites图： CSS Sprites优点： CSS Sprites为什么突然跑火，跟能够提升网站性能有关。显而易见，这是它的巨大优点之一。 1.利用CSS Sprites能很好地减少了网页的http请求，从而大大的提高了页面的性能，这是CSS Sprites最大的优点，也是其被广泛传播和应用的主要原因； 2.个人认为CSS Sprites能减少图片的字节，我曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。 CSS Sprites缺点： 诚然CSS Sprites是如此的强大，但是也存在一些不可忽视的缺点。 1.在图片合并的时候，你要把多张图片有序的合理的合并成一张图片，还要留好只够的空间，防止板块内不会出现不必要的背景，否则可能会出现出现干扰图片的情况；这些还好，做痛苦的是在宽屏，高分辨率的屏幕下的自适应页面，你的图片如果不够宽，很容易出现背景断裂； 2.CSS Sprites在开发的时候比较麻烦，你要通过photoshop或其他工具测量计算每一个背景单元的精确位置，这是针线活，没什么难度，但是很繁琐；不过网上已经有高手开发出“CSS Sprites 样式生成工具”，大家可以尝试一下。 3.CSS [...]]]></description>
			<content:encoded><![CDATA[<style>
.postarea ul.sprite li{float:left;list-style:none}
.postarea ul.sprite li img{width: 100px; height: 120px;}
</style>
<h4>CSS Sprites 简介：</h4>
<p>
通 常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术，目前它已经在网页开发中发展得较为成熟，阿里巴巴各子公司的网页中到处都可发现css sprites 的影子。但CSS Sprites并不是什么金科玉律，但在很多情况下，它有着一定的优势，最重要的是它可以减轻服务器的负载，提高网页加载速度。随着Web设计向着精致、 巧妙的方向发展，设计师们开始考虑使用非Javascript的方 式制作鼠标滑过、悬停菜单的效果，这时CSS Sprite应运而生。</p>
<p>说白了，CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中，再利用CSS的“background-image”，“background- repeat”，“background-position”的组合进行背景定位，background-position可以用数字能精确的定位出背景 图片的位置。
</p>
<p>
当页面加载时，不是加载每个单独图片，而是一次加载整个组合图片。这是一个了不起的改进，它大大减少了HTTP请求的次数，减轻服务器压力，同时缩短了悬停加载图片所需要的时间延迟，使效果更流畅，不会停顿。
</p>
<h4>CSS Sprites应用：</h4>
<p>在这方面，淘宝网做的比较好，我就以淘宝网为例吧。</p>
<h5>[实例一:淘宝频道页面导航]</h5>
<p>效果图：</p>
<p><a href="http://img.alimama.cn/cms/images/1254278481253.png" target="_blank"><img src="http://img.alimama.cn/cms/images/1254278481253.png" alt="" width="610" /></a></p>
<p>sprites图：</p>
<ul class="sprite">
<li><img src="http://assets.taobaocdn.com/tbsp/themes/1/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/2/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/3/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/4/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/5/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/6/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/7/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/8/sprite.png" alt="" /></li>
<li><img src="http://assets.taobaocdn.com/tbsp/themes/9/sprite.png" alt="" /></li>
</ul>
<h5>[实例二：淘宝首页]</h5>
<p>效果图：</p>
<p><a href="http://img.alimama.cn/cms/images/1254283399874.png" target="_blank"><img src="http://img.alimama.cn/cms/images/1254283399874.png" alt="" width="600" /></a></p>
<p>sprites图：</p>
<p><img style="width: 498px; height: 250px;" src="http://img01.taobaocdn.com/tps/i1/T1FLpeXkVqXXXXXXXX-498-250.png" alt="" width="500" /></p>
<h4>CSS Sprites优点：</h4>
<p>CSS Sprites为什么突然跑火，跟能够提升网站性能有关。显而易见，这是它的巨大优点之一。</p>
<p>1.利用CSS Sprites能很好地减少了网页的http请求，从而大大的提高了页面的性能，这是CSS Sprites最大的优点，也是其被广泛传播和应用的主要原因；</p>
<p>2.个人认为CSS Sprites能减少图片的字节，我曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。</p>
<h4>CSS Sprites缺点：</h4>
<p>诚然CSS Sprites是如此的强大，但是也存在一些不可忽视的缺点。</p>
<p>1.在图片合并的时候，你要把多张图片有序的合理的合并成一张图片，还要留好只够的空间，防止板块内不会出现不必要的背景，否则可能会出现出现干扰图片的情况；这些还好，做痛苦的是在宽屏，高分辨率的屏幕下的自适应页面，你的图片如果不够宽，很容易出现背景断裂；</p>
<p>2.CSS Sprites在开发的时候比较麻烦，你要通过photoshop或其他工具测量计算每一个背景单元的精确位置，这是针线活，没什么难度，但是很繁琐；不过网上已经有高手开发出“CSS Sprites 样式生成工具”，大家可以尝试一下。</p>
<p>3.CSS Sprites在维护的时候比较麻烦，sprites是一般双刃剑，如果页面背景有少许改动，一般就要改这张合并的图片，无需改的地方最好不要动，这样避 免改动更多的css，如果在原来的地方放不下，有只能（最好）往下加图片，这样图片的字节就增加了，因为每次的图片改动都得往这个图片删除或添加内容，显 得稍微繁琐，而且重新算图片的位置（尤其是这种上千px的图）也是一件颇为不爽的事情。当然，在性能的口号下，这些都是可以克服的。</p>
<p>4.由于图片的位置需要固定为某个绝对数值，这就失去了诸如center之类的灵活性。</p>
<h4>CSS Sprites总结：</h4>
<p>性能压倒一切。CSS Sprites非常值得学习和应用，特别是页面有一堆ico（图标）。总之很多时候大家要权衡一下利弊，在决定是不是应用CSS Sprites。为保持兼容性和维护性，sprites图片中的各个部分保持一定的距离是一种不错的做法。</p>
<p>原文链接：<a href="http://ued.alimama.com/?p=233">http://ued.alimama.com/?p=233</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/419.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS超级技巧大放送合集！</title>
		<link>http://www.artcss.com/archives/215.html</link>
		<comments>http://www.artcss.com/archives/215.html#comments</comments>
		<pubDate>Thu, 06 Aug 2009 00:09:02 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.artskin.cn/blog/?p=215</guid>
		<description><![CDATA[一.使用css缩写 &#160;&#160;使用缩写可以帮助减少你CSS文件的大小，更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》，这里就不展开描述。 &#160;&#160;二.明确定义单位，除非值为0 &#160;&#160;忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width=100，但是在CSS中，你必须给一个准确的单位，比 如：width:100px width:100em。只有两个例外情况可以不定义单位：行高和0值。除此以外，其他值都必须紧跟单位，注意，不要在数值和单位之间加空格。 &#160;&#160;三.区分大小写 &#160;&#160;当在XHTML中使用CSS，CSS里定义的元素名称是区分大小写的。为了避免这种错误，我建议所有的定义名称都采用小写。 &#160;&#160;class和id的值在HTML和XHTML中也是区分大小写的，如果你一定要大小写混合写，请仔细确认你在CSS的定义和XHTML里的标签是一致的。 &#160;&#160;四.取消class和id前的元素限定 &#160;&#160;当你写给一个元素定义class或者id，你可以省略前面的元素限定，因为ID在一个页面里是唯一的，鴆las s可以在页面中多次使用。你限定某个元素毫无意义。例如： &#160;&#160;div#content { /* declarations */ } &#160;&#160;fieldset.details { /* declarations */ } &#160;&#160;可以写成 &#160;&#160;#content { /* declarations */ } &#160;&#160;.details { /* declarations */ } &#160;&#160;这样可以节省一些字节。 五.默认值 &#160;&#160;通常padding的默认值为0，background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突，可以在样式表一开始就先定义所有元素的margin和padding值都为0，象这样： &#160;&#160;* { &#160;&#160;margin:0; &#160;&#160;padding:0; &#160;&#160;} &#160;&#160;六.不需要重复定义可继承的值 &#160;&#160;CSS中，子元素自动继承父元素的属性值，象颜色、字体等，已经在父元素中定义过的，在子元素中可以直接继承，不需要重复定义。但是要注意，浏览器可能用一些默认值覆盖你的定义。 &#160;&#160;七.最近优先原则 &#160;&#160;如果对同一个元素的定义有多种，以最接近(最小一级)的定义为最优先，例如有这么一段代码 &#160;&#160;Update: Lorem ipsum dolor set &#160;&#160;在CSS文件中，你已经定义了元素p，又定义了一个classupdate [...]]]></description>
			<content:encoded><![CDATA[<p>一.使用css缩写</p>
<p>&nbsp;&nbsp;使用缩写可以帮助减少你CSS文件的大小，更加容易阅读。css缩写的主要规则请参看<span id="more-215"></span>《常用css缩写语法总结》，这里就不展开描述。</p>
<p>&nbsp;&nbsp;二.明确定义单位，除非值为0</p>
<p>&nbsp;&nbsp;忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width=100，但是在CSS中，你必须给一个准确的单位，比 如：width:100px width:100em。只有两个例外情况可以不定义单位：行高和0值。除此以外，其他值都必须紧跟单位，注意，不要在数值和单位之间加空格。</p>
<p>&nbsp;&nbsp;三.区分大小写</p>
<p>&nbsp;&nbsp;当在XHTML中使用CSS，CSS里定义的元素名称是区分大小写的。为了避免这种错误，我建议所有的定义名称都采用小写。</p>
<p>&nbsp;&nbsp;class和id的值在HTML和XHTML中也是区分大小写的，如果你一定要大小写混合写，请仔细确认你在CSS的定义和XHTML里的标签是一致的。</p>
<p>&nbsp;&nbsp;四.取消class和id前的元素限定</p>
<p>&nbsp;&nbsp;当你写给一个元素定义class或者id，你可以省略前面的元素限定，因为ID在一个页面里是唯一的，鴆las s可以在页面中多次使用。你限定某个元素毫无意义。例如：</p>
<p>&nbsp;&nbsp;div#content { /* declarations */ }</p>
<p>&nbsp;&nbsp;fieldset.details { /* declarations */ }</p>
<p>&nbsp;&nbsp;可以写成</p>
<p>&nbsp;&nbsp;#content { /* declarations */ }</p>
<p>&nbsp;&nbsp;.details { /* declarations */ }</p>
<p>&nbsp;&nbsp;这样可以节省一些字节。<br />
五.默认值</p>
<p>&nbsp;&nbsp;通常padding的默认值为0，background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突，可以在样式表一开始就先定义所有元素的margin和padding值都为0，象这样：</p>
<p>&nbsp;&nbsp;* {</p>
<p>&nbsp;&nbsp;margin:0;</p>
<p>&nbsp;&nbsp;padding:0;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;六.不需要重复定义可继承的值</p>
<p>&nbsp;&nbsp;CSS中，子元素自动继承父元素的属性值，象颜色、字体等，已经在父元素中定义过的，在子元素中可以直接继承，不需要重复定义。但是要注意，浏览器可能用一些默认值覆盖你的定义。</p>
<p>&nbsp;&nbsp;七.最近优先原则</p>
<p>&nbsp;&nbsp;如果对同一个元素的定义有多种，以最接近(最小一级)的定义为最优先，例如有这么一段代码</p>
<p>&nbsp;&nbsp;Update: Lorem ipsum dolor set</p>
<p>&nbsp;&nbsp;在CSS文件中，你已经定义了元素p，又定义了一个classupdate</p>
<p>&nbsp;&nbsp;p {</p>
<p>&nbsp;&nbsp;margin:1em 0;</p>
<p>&nbsp;&nbsp;font-size:1em;</p>
<p>&nbsp;&nbsp;color:#333;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;.update {</p>
<p>&nbsp;&nbsp;font-weight:bold;</p>
<p>&nbsp;&nbsp;color:#600;</p>
<p>&nbsp;&nbsp;}<br />
八.多重class定义</p>
<p>&nbsp;&nbsp;一个标签可以同时定义多个class。例如：我们先定义两个样式，第一个样式背景为&quot;http://www.28600.com/article1/#&quot;666；第二个样式有10 px的边框。</p>
<p>&nbsp;&nbsp;.one{width:200px;background:&quot;http://www.28600.com/article1/#&quot;666;}</p>
<p>&nbsp;&nbsp;.two{border:10px solid &quot;http://www.28600.com/article1/#&quot;F00;}</p>
<p>&nbsp;&nbsp;在页面代码中，我们可以这样调用</p>
<p>&nbsp;&nbsp;&lt;div class=one two&gt;&lt;/div&gt;</p>
<p>&nbsp;&nbsp;这样最终的显示效果是这个div既有&quot;http://www.28600.com/article1/#&quot;666的背景，也有10px的边框。是的，这样做是可以的，你可以尝试一下。</p>
<p>&nbsp;&nbsp;九.使用子选择器(descendant selectors)</p>
<p>&nbsp;&nbsp;CSS初学者不知道使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这段代码：</p>
<p>&nbsp;&nbsp;&lt;div id=subnav&gt;</p>
<p>&nbsp;&nbsp;&lt;ul&gt;</p>
<p>&nbsp;&nbsp;&lt;li class=subnavitem&gt; &lt;a href=&quot;http://www.28600.com/article1/#&quot; class=subnavitem&gt;Item 1&lt;/a&gt;&lt;/li&gt;&gt;</p>
<p>&nbsp;&nbsp;&lt;li class=subnavitemselected&gt; &lt;a href=&quot;http://www.28600.com/article1/#&quot; class=subnavitemselected&gt; Item 1&lt;/a&gt; &lt;/li&gt;</p>
<p>&nbsp;&nbsp;&lt;li class=subnavitem&gt; &lt;a href=&quot;http://www.28600.com/article1/#&quot; class=subnavitem&gt; Item 1&lt;/a&gt; &lt;/li&gt;</p>
<p>&nbsp;&nbsp;&lt;/ul&gt;</p>
<p>&nbsp;&nbsp;&lt;/div&gt;</p>
<p>&nbsp;&nbsp;这段代码的CSS定义是：</p>
<p>&nbsp;&nbsp;div#subnav ul { /* Some styling */ }</p>
<p>&nbsp;&nbsp;div#subnav ul li.subnavitem { /* Some styling */ }</p>
<p>&nbsp;&nbsp;div#subnav ul li.subnavitem a.subnavitem { /* Some styling */ }</p>
<p>&nbsp;&nbsp;div#subnav ul li.subnavitemselected { /* Some styling */ }</p>
<p>&nbsp;&nbsp;div#subnav ul li.subnavitemselected a.subnavitemselected { /* Some styling */ }</p>
<p>&nbsp;&nbsp;你可以用下面的方法替代上面的代码</p>
<p>&nbsp;&nbsp;&lt;ul id=subnav&gt;</p>
<p>&nbsp;&nbsp;&lt;li&gt; &lt;a href=&quot;http://www.28600.com/article1/#&gt;&quot; Item 1&lt;/a&gt; &lt;/li&gt;</p>
<p>&nbsp;&nbsp;&lt;li class=sel&gt; &lt;a href=&quot;http://www.28600.com/article1/#&gt;&quot; Item 1&lt;/a&gt; &lt;/li&gt;</p>
<p>&nbsp;&nbsp;&lt;li&gt; &lt;a href=&quot;http://www.28600.com/article1/#&gt;&quot; Item 1&lt;/a&gt; &lt;/li&gt;</p>
<p>&nbsp;&nbsp;&lt;/ul&gt;</p>
<p>&nbsp;&nbsp;样式定义是：</p>
<p>&nbsp;&nbsp;#subnav { /* Some styling */ }</p>
<p>&nbsp;&nbsp;#subnav li { /* Some styling */ }</p>
<p>&nbsp;&nbsp;#subnav a { /* Some styling */ }</p>
<p>&nbsp;&nbsp;#subnav .sel { /* Some styling */ }</p>
<p>&nbsp;&nbsp;#subnav .sel a { /* Some styling */ }</p>
<p>&nbsp;&nbsp;用子选择器可以使你的代码和CSS更加简洁、更加容易阅读。<br />
十.不需要给背景图片路径加引号</p>
<p>&nbsp;&nbsp;为了节省字节，我建议不要给背景图片路径加引号，因为引号不是必须的。例如：</p>
<p>&nbsp;&nbsp;background:url(images/***.gif) #333;</p>
<p>&nbsp;&nbsp;可以写为</p>
<p>&nbsp;&nbsp;background:url(images/***.gif) #333;</p>
<p>&nbsp;&nbsp;如果你加了引号，反而会引起一些浏览器的错误。</p>
<p>&nbsp;&nbsp;十一.组选择器(Group selectors)</p>
<p>&nbsp;&nbsp;当一些元素类型、class或者id都有共同的一些属性，你就可以使用组选择器来避免多次的重复定义。这可以节省不少字节。</p>
<p>&nbsp;&nbsp;例如：定义所有标题的字体、颜色和margin，你可以这样写：</p>
<p>&nbsp;&nbsp;h1,h2,h3,h4,h5,h6 {</p>
<p>&nbsp;&nbsp;font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;</p>
<p>&nbsp;&nbsp;color:#333;</p>
<p>&nbsp;&nbsp;margin:1em 0;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;如果在使用时，有个别元素需要定义独立样式，你可以再加上新的定义，可以覆盖老的定义，例如：</p>
<p>&nbsp;&nbsp;h1 { font-size:2em; }</p>
<p>&nbsp;&nbsp;h2 { font-size:1.6em; }</p>
<p>&nbsp;&nbsp;十二.用正确的顺序指定链接的样式</p>
<p>&nbsp;&nbsp;当你用CSS来定义链接的多个状态样式时，要注意它们书写的顺序，正确的顺序是：:link :visited :hover :active。抽取第一个字母是LVHA，你可以记忆成LoVe HAte(喜欢讨厌)。为什么这么定义，可以参考Eric Meyer的《Link Specificity》。</p>
<p>&nbsp;&nbsp;如果你的用户需要用键盘来控制，需要知道当前链接的焦点，你还可以定义:focus属性。:focus属性的效果也取决与你书写的位置，如果你希望聚 焦元素显示:hover效果，你就把:focus写在:hover前面；如果你希望聚焦效果替代:hover效果，你就把:focus放在:hover后 面。<br />
十三.清除浮动</p>
<p>&nbsp;&nbsp;一个非常常见的CSS问题，定位使用浮动的时候，下面的层被浮动的层所覆盖，或者层里嵌套的子层超出了外层的范围。</p>
<p>&nbsp;&nbsp;通常的解决办法是在浮动层后面添加一个额外元素，例如一个div或者一个br，并且定义它的样式为clear: both。这个办法有一点牵强，幸运的是还有一个好办法可以解决，参看这篇文章《How To Clear Floats Without Structural Markup》(注：本站将尽快翻译此文)。</p>
<p>&nbsp;&nbsp;上面2种方法可以很好解决浮动超出的问题，但是如果当你真的需要对层或者层里的对象进行clear的时候怎么办？一种简单的方法就是用 overflow属性，这个方法最初的发表在《Simple Clearing of Floats》，又在《Clearance》和《Super simple clearing floats》中被广泛讨论。</p>
<p>&nbsp;&nbsp;上面那一种clear方法更适合你，要看具体的情况，这里不再展开论述。另外关于float的应用，一些优秀的文章已经说得很清楚，推荐你阅读：《Floatutorial》、《Containing Floats》和《Float Layouts》</p>
<p>&nbsp;&nbsp;十四.横向居中(centering)</p>
<p>&nbsp;&nbsp;这是一个简单的技巧，但是值得再说一遍，因为我看见太多的新手问题都是问这个：CSS如何横向居中？你需要定义元素的宽，并且定义横向的margin，如果你的布局包含在一个层(容器)中，就象这样：</p>
<p>&nbsp;&nbsp;&lt;!&#8211; 你的布局这里开始 &#8211;&gt;</p>
<p>&nbsp;&nbsp;你可以这样定义使它横向居中：</p>
<p>&nbsp;&nbsp;#wrap {</p>
<p>&nbsp;&nbsp;width:760px; /* 修改为你的层的宽度 */</p>
<p>&nbsp;&nbsp;margin:0 auto;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;但是IE5/Win不能正确显示这个定义，我们采用一个非常有用的技巧来解决：用text-align属性。就象这样：</p>
<p>&nbsp;&nbsp;body {</p>
<p>&nbsp;&nbsp;text-align:center;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;#wrap {</p>
<p>&nbsp;&nbsp;width:760px; /* 修改为你的层的宽度 */</p>
<p>&nbsp;&nbsp;margin:0 auto;</p>
<p>&nbsp;&nbsp;text-align:left;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;第一个body的text-align:center; 规则定义IE5/Win中body的所有元素居中(其他浏览器只是将文字居中) ，第二个text-align:left;是将#warp中的文字居左。<br />
十五.导入(Import)和隐藏CSS</p>
<p>&nbsp;&nbsp;因为老版本浏览器不支持CSS，一个通常的做法是使用@import技巧来把CSS隐藏起来。例如：</p>
<p>&nbsp;&nbsp;@import url(main.css);</p>
<p>&nbsp;&nbsp;然而，这个方法对IE4不起作用，这让我很是头疼了一阵子。后来我用这样的写法：</p>
<p>&nbsp;&nbsp;@import main.css;</p>
<p>&nbsp;&nbsp;这样就可以在IE4中也隐藏CSS了，呵呵，还节省了5个字节呢。想了解@import语法的详细说明，可以看这里《centricle&rsquo;s css filter chart》</p>
<p>&nbsp;&nbsp;十六.针对IE的优化</p>
<p>&nbsp;&nbsp;有些时候，你需要对IE浏览器的bug定义一些特别的规则，这里有太多的CSS技巧(hacks)，我只使用其中的两种方法，不管微软在即将发布的IE7 beta版里是否更好的支持CSS，这两种方法都是最安全的。</p>
<p>&nbsp;&nbsp;1.注释的方法</p>
<p>&nbsp;&nbsp;(a)在IE中隐藏一个CSS定义，你可以使用子选择器(child selector):</p>
<p>&nbsp;&nbsp;html&gt;body p {</p>
<p>&nbsp;&nbsp;/* 定义内容 */</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;(b)下面这个写法只有IE浏览器可以理解(对其他浏览器都隐藏)</p>
<p>&nbsp;&nbsp;* html p {</p>
<p>&nbsp;&nbsp;/* declarations */</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;(c)还有些时候，你希望IE/Win有效而IE/Mac隐藏，你可以使用反斜线技巧：</p>
<p>&nbsp;&nbsp;/* */</p>
<p>&nbsp;&nbsp;* html p {</p>
<p>&nbsp;&nbsp;declarations</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/* */</p>
<p>&nbsp;&nbsp;2.条件注释(conditional comments)的方法</p>
<p>&nbsp;&nbsp;另外一种方法，我认为比CSS Hacks更加经得起考验就是采用微软的私有属性条件注释(conditional comments)。用这个方法你可以给IE单独定义一些样式，而不影响主样式表的定义。就象这样：</p>
<p>&nbsp;&nbsp;&lt;!&#8211;[if IE]&gt;</p>
<p>&nbsp;&nbsp;&lt;link rel=stylesheet type=text/css href=&quot;http://www.28600.com/article1/ie.css&quot; /&gt;</p>
<p>&nbsp;&nbsp;&lt;![endif]&#8211;&gt;<br />
十七.调试技巧：层有多大？</p>
<p>&nbsp;&nbsp;当调试CSS发生错误，你就要象排版工人，逐行分析CSS代码。我通常在出问题的层上定义一个背景颜色，这样就能很明显看到层占据多大空间。有些人建 议用border，一般情况也是可以的，但问题是，有时候border 会增加元素的尺寸，border-top和boeder-bottom会破坏纵向margin的值，所以使用background更加安全些。</p>
<p>&nbsp;&nbsp;另外一个经常出问题的属性是outline。outline看起来象boeder，但不会影响元素的尺寸或者位置。只有少数浏览器支持outline属性，我所知道的只有Safari、OmniWeb、和Opera。</p>
<p>&nbsp;&nbsp;十八.CSS代码书写样式</p>
<p>&nbsp;&nbsp;在写CSS代码的时候，对于缩进、断行、空格，每个人有每个人的书写习惯。在经过不断实践后，我决定采用下面这样的书写样式：</p>
<p>&nbsp;&nbsp;selector1,</p>
<p>&nbsp;&nbsp;selector2 {</p>
<p>&nbsp;&nbsp;property:value;</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;当使用联合定义时，我通常将每个选择器单独写一行，这样方便在CSS文件中找到它们。在最后一个选择器和大括号{之间加一个空格，每个定义也单独写一行，分号直接在属性值后，不要加空格。</p>
<p>&nbsp;&nbsp;我习惯在每个属性值后面都加分号，虽然规则上允许最后一个属性值后面可以不写分号，但是如果你要加新样式时容易忘记补上分号而产生错误，所以还是都加比较好。</p>
<p>&nbsp;&nbsp;最后，关闭的大括号}单独写一行。</p>
<p>&nbsp;&nbsp;空格和换行有助与阅读。</p>
<p>摘自：经典论坛</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/215.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如何制作一个漂亮的 CSS 按钮</title>
		<link>http://www.artcss.com/archives/140.html</link>
		<comments>http://www.artcss.com/archives/140.html#comments</comments>
		<pubDate>Mon, 20 Jul 2009 06:48:30 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[css按钮]]></category>

		<guid isPermaLink="false">http://www.artskin.cn/blog/?p=140</guid>
		<description><![CDATA[如今 Web Application 横行，在 Web 2.0 网站的各种设计元素中，按钮是无法或缺的。如何用最简洁的方法制作最漂亮的按钮就成为了一个问题。本文讲述的方法，代码上简洁，符合 XHTML 标准，不需要 Javascript，只需要纯 CSS 即可完成，而且通用性很好，使用起来也很方便。上图即为最终成品的例子，您也可以通过演示页面体验一下。下面我将详述整个制作过程，相信通过这个教程您肯定可以学会。 第一步：准备图片 对于一个好的 UI，一个很重要的方面就是要能及时的与用户发生交互。对于按钮来说，我们需要让按钮相应各种鼠标事件，让用户知道它是可以按下的。如上图，我们要制作的按钮共有三种状态：正常状态、鼠标划过、鼠标按下。通常情况下，我们会想到利用 onclick、onmouseover 这样的事件来控制，而事实上，我们完全可以利用通用性、便捷性更好的 CSS 代替 Javascript 来完成这个过程。尽可能将表现的事情交给 CSS 来做，这也是良好设计的原则之一。 为了能够实现这种效果，我们需要准备三个状态的图片。利用 CSS 的 background-position 属性，我们完全可以将三种状态的图片放在一张图片中，这样可以获得更好的缓存效果。 此外，按钮两侧的圆角也是比较烦人的问题。因为我们要制作的按钮需要能够自动适应内部文字的长度，因此我们需要应用一种叫做“拉门技术 (Sliding door technique)”的 CSS 技巧。具体原理不讲了，这里只介绍具体做法： 我们使用超链接来生成按钮，为了使用 Sliding door technique，我们需要按照如下方式书写 HTML 代码： [coolcode lang="javascript" linenum="on" download="button.html"] Button Text [/coolcode] 随后，我们需要准备两张图片，作为按钮的背景（分别为 span 标签和 a 标签的），具体示意图如下： 这里需要指出，280px 并不是绝对的，它代表了这个按钮在您的应用中可能用到的最大值。此外，所有的值都可以根据您实际的背景图做出更改。 第二步：书写 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.artskin.cn/blog/wp-content/uploads/2009/07/2007-5-9.jpg"><img src="http://www.artskin.cn/blog/wp-content/uploads/2009/07/2007-5-9.jpg" alt="2007-5-9" title="2007-5-9" width="356" height="117" class="alignnone size-full wp-image-143" /></a></p>
<p>如今 Web Application 横行，在 Web 2.0 网站的各种设计元素中，按钮是无法或缺的。如何用最简洁的<span id="more-140"></span>方法制作最漂亮的按钮就成为了一个问题。本文讲述的方法，代码上简洁，符合 XHTML 标准，不需要 Javascript，只需要纯 CSS 即可完成，而且通用性很好，使用起来也很方便。上图即为最终成品的例子，您也可以通过<a href="http://blog.istef.info/demo/cssbutton">演示页面</a>体验一下。下面我将详述整个制作过程，相信通过这个教程您肯定可以学会。</p>
<h4>第一步：准备图片</h4>
<p><a href="http://www.artskin.cn/blog/wp-content/uploads/2009/07/2007-5-9-11.jpg"><img src="http://www.artskin.cn/blog/wp-content/uploads/2009/07/2007-5-9-11.jpg" alt="2007-5-9-1" title="2007-5-9-1" width="433" height="95" class="alignnone size-full wp-image-142" /></a></p>
<p>对于一个好的 UI，一个很重要的方面就是要能及时的与用户发生交互。对于按钮来说，我们需要让按钮相应各种鼠标事件，让用户知道<strong>它是可以按下的</strong>。如上图，我们要制作的按钮共有三种状态：<strong>正常状态</strong>、<strong>鼠标划过</strong>、<strong>鼠标按下</strong>。通常情况下，我们会想到利用 onclick、onmouseover 这样的事件来控制，而事实上，我们完全可以利用通用性、便捷性更好的 CSS 代替 Javascript 来完成这个过程。尽可能将表现的事情交给 CSS 来做，这也是良好设计的原则之一。</p>
<p>为了能够实现这种效果，我们需要准备三个状态的图片。利用 CSS 的 background-position 属性，我们完全可以将三种状态的图片放在一张图片中，这样可以获得更好的缓存效果。</p>
<p>此外，按钮两侧的圆角也是比较烦人的问题。因为我们要制作的按钮需要<strong>能够自动适应内部文字的长度</strong>，因此我们需要应用一种叫做“<a href="http://alistapart.com/articles/slidingdoors/">拉门技术 (Sliding door technique)</a>”的 CSS 技巧。具体原理不讲了，这里只介绍具体做法：</p>
<p>我们使用超链接来生成按钮，为了使用 Sliding door technique，我们需要按照如下方式书写 HTML 代码：</p>
<p>[coolcode lang="javascript" linenum="on" download="button.html"]<br />
 <a class="button" href="http://some_where"><span>Button Text</span></a><br />
[/coolcode]</p>
<p>随后，我们需要准备两张图片，作为按钮的背景（分别为 span 标签和 a 标签的），具体示意图如下：</p>
<p>这里需要指出，280px 并不是绝对的，它代表了这个按钮在您的应用中可能用到的最大值。此外，所有的值都可以根据您实际的背景图做出更改。</p>
<h4>第二步：书写 CSS 代码</h4>
<p>为了能够让 A 标签准确的显示我们需要的效果，我们需要设定其 display 属性为 block，但是，很多情况下，我们需要在同一行中显示多个按钮，我们可以通过设定 float:left 或 float:right 来达到。提醒一下，这样设定後，当您放置完按钮后不要忘记 clear 一下 :)。</p>
<p>首先看看显示基本布局的代码，本例中，两侧圆角部分为 10px，按钮高度为 24px，保留区域为 1px：</p>
<p>[coolcode lang="javascript" linenum="on" download="style.css"]<br />
a.button{<br />
     background:transparent url(a.gif) no-repeat scroll right top;<br />
     color: White;<br />
     display: block;<br />
     float: left;<br />
     height: 24px;<br />
     padding-right: 10px;<br />
     font: normal 12px sans-serif;<br />
     margin-right: 10px;<br />
     text-decoration: none;<br />
    }<br />
    a.button span {<br />
     background: transparent url(span.gif) no-repeat;<br />
     display: block;<br />
     padding: 5px 1px 5px 11px;<br />
     line-height: 14px;<br />
    }<br />
[/coolcode]</p>
<p>这里需要指出的是：1. 保留区 (1px) 是包含在 SPAN 中的，具体可以注意看 padding 的设置；2. SPAN  的 <em>line-height</em> + <em>padding-top</em> + <em>padding-bottom</em>  = A 的 <em>height</em>。</p>
<p>经过这样设定后，我们的按钮的基本样式就完成了，但它还没有交互效果，我们通过设定 a:hover 和 a:active 来实现：</p>
<p>[coolcode lang="javascript" linenum="on" download="style2.css"]<br />
a.button:hover {<br />
     background-position: right -24px;<br />
    }<br />
    a.button:hover span {<br />
      background-position: left -24px;<br />
     }<br />
     a.button:active {<br />
      background-position: right -48px;<br />
    }<br />
    a.button:active span {<br />
      background-position: left -48px;<br />
      padding: 6px 0 4px 12px;<br />
    }<br />
[/coolcode]</p>
<p>我们看到，主要是应用了 background-position 属性调整背景图片的位置，这比使用多张图片效果更好。在 <em>a.button:active span</em> 中，我们重新设定了 padding 的值，使字符向右下方移动 1px，按下的效果更明显，这也是之前提到的保留区的作用。</p>
<h4>第三部：最后完善</h4>
<p>其实做完上面两部，我们的按钮基本上已经完工了。但是在各种浏览器中都有一个讨厌的问题，就是当超链接被点击后，会留下一个讨厌的虚线框。这个破坏美观的东西，我们当然要干掉它。</p>
<p>Firefox、Safari 等支持 W3C CSS2 的浏览器，可以通过设定 CSS 的 outline 属性来做到这一点。在我们这个例子中，只需做如下改动：</p>
<p>[coolcode lang="javascript" linenum="on" download="style3.css"]<br />
a.button:active {<br />
      background-position: right -48px;<br />
      outline: none;<br />
     }<br />
[/coolcode]</p>
<p>在 Firefox 中看看，虚框已经消失了。</p>
<p>但 Internet Explore 不吃这一套，对付它就比较麻烦了，单单 CSS 无法解决问题，需要从 HTML 下手。我们需要将按钮的 HTML 代码改为以下形式：</p>
<p>[coolcode lang="javascript" linenum="on" download="button2.html"]<br />
<a class="button" href="http://some_where" onclick="this.blur();"><span>Button Text</span></a><br />
[/coolcode]</p>
<p>这样，我们可以让超链接在点击后迅速失去焦点，从而避免虚框的出现。当然，如果我们应用中按钮比较少，这个方法还不错。但按钮比较多的情况下，我们还是应该用 DOM 方法来为 className 为 button 的 A 修改 onclick 事件（用 jQuery 或 Prototype 实现会很省心），不过这不在本文讨论的范围内了。</p>
<p>到这里，我们的按钮就算做好了，我相信您一定已经学会了。如果还有什么不明白的地方，您可以参考这个简单的范例，查看它的源代码来解决。当然，您也可以直接在本文後提问，我很乐意为您解答。</p>
<p>UPDATE:谢谢 Dan Li 发来邮件提醒，我确实发现本文与这篇文章如出一辙。早看到直接转过来就好了，白白折腾了两个小时。不知道留言中 DV 大侠所指的是不是这篇。不过我在写本文时并没有看过这篇文章，而且本文与原文还是有很大不同，而且原文中 CSS 有误 (background-position 的参数顺序不对)，虽然可以实现它所叙述的效果，但不符合 CSS 标准，也不能够进一步扩展，希望看了原文的朋友能够注意。</p>
<p>如需在 CC-BY-NC 协议下引用，请保留以下链接，商业网站引用请与我联系，谢谢合作。<br />http://blog.istef.info/2007/05/09/how-to-make-a-sexy-css-button</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/140.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS XHTML规范化命名参考</title>
		<link>http://www.artcss.com/archives/114.html</link>
		<comments>http://www.artcss.com/archives/114.html#comments</comments>
		<pubDate>Sun, 19 Jul 2009 06:44:41 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[css命名]]></category>

		<guid isPermaLink="false">http://www.artskin.cn/blog/?p=114</guid>
		<description><![CDATA[CSS命名规则 头：header 内容：content/containe 　　尾：footer 　　导航：nav 　　侧栏：sidebar 　　栏目：column 　　页面外围控制整体布局宽度：wrapper 　　左右中：left right center 　　登录条：loginbar 　　标志：logo 　　广告：banner 　　页面主体：main 　　热点：hot 　　新闻：news 　　下载：download 　　子导航：subnav 　　菜单：menu 　　子菜单：submenu 　　搜索：search 　　友情链接：friendlink 　　页脚：footer 　　版权：copyright 　　滚动：scroll 　　内容：content 　　标签页：tab 　　文章列表：list 　　提示信息：msg 　　小技巧：tips 　　栏目标题：title 　　加入：joinus 　　指南：guild 　　服务：service 　　注册：regsiter 　　状态：status 　　投票：vote 　　合作伙伴：partner XHTML文件中id的命名 ======================== (1)页面结构 　　容器: container 　　页头：header 　　内容：content/container 　　页面主体：main 　　页尾：footer 　　导航：nav 　　侧栏：sidebar 　　栏目：column 　　页面外围控制整体布局宽度：wrapper 　　左右中：left right center [...]]]></description>
			<content:encoded><![CDATA[<div class="postBody">
<strong>CSS命名规则</strong></p>
<div class="detail_run">
<div class="UBBContent">头：header <br />
     内容：content/containe <br />
　　尾：footer <br />
　　导航：nav <br />
　　侧栏：sidebar <br />
　　栏目：column <br />
　　页面外围控制整体布局宽度：wrapper <br />
　　左右中：left right center <br />
　　登录条：loginbar <br />
　　标志：logo <br />
　　广告：banner <br />
　　页面主体：main <br />
　　热点：hot <br />
　　新闻：news <br />
　　下载：download <br />
　　子导航：subnav <br />
　　菜单：menu <br />
　　子菜单：submenu <br />
　　搜索：search <br />
　　友情链接：friendlink <br />
　　页脚：footer <br />
　　版权：copyright <br />
　　滚动：scroll <br />
　　内容：content <br />
　　标签页：tab <br />
　　文章列表：list <br />
　　提示信息：msg <br />
　　小技巧：tips <br />
　　栏目标题：title <br />
　　加入：joinus <br />
　　指南：guild <br />
　　服务：service <br />
　　注册：regsiter <br />
　　状态：status <br />
　　投票：vote <br/><br />
　　合作伙伴：partner</div>
</div>
<p>
<strong>XHTML文件中id的命名</strong><br />
========================</p>
<div class="detail_run">
<div class="UBBContent">(1)页面结构<br />
　　容器: container <br />
　　页头：header <br />
　　内容：content/container <br />
　　页面主体：main <br />
　　页尾：footer <br />
　　导航：nav <br />
　　侧栏：sidebar <br />
　　栏目：column <br />
　　页面外围控制整体布局宽度：wrapper <br />
　　左右中：left right center <br />
(2)导航<br />
　　导航：nav <br />
　　主导航：mainbav <br />
　　子导航：subnav <br />
　　顶导航：topnav <br />
　　边导航：sidebar <br />
　　左导航：leftsidebar <br />
　　右导航：rightsidebar <br />
　　菜单：menu <br />
　　子菜单：submenu <br />
　　标题: title <br />
　　摘要: summary <br />
(3)功能<br />
　　标志：logo <br />
　　广告：banner <br />
　　登陆：login <br />
　　登录条：loginbar <br />
　　注册：regsiter <br />
　　搜索：search <br />
　　功能区：shop <br />
　　标题：title <br />
　　加入：joinus <br />
　　状态：status <br />
　　按钮：btn <br />
　　滚动：scroll <br />
　　标签页：tab <br />
　　文章列表：list <br />
　　提示信息：msg <br />
　　当前的: current <br />
　　小技巧：tips <br />
　　图标: icon <br />
　　注释：note <br />
　　指南：guild <br />
　　服务：service <br />
　　热点：hot <br />
　　新闻：news <br />
　　下载：download <br />
　　投票：vote <br/><br />
　　合作伙伴：partner <br />
　　友情链接：link <br />
　　版权：copyright</div>
</div>
<p>
<strong>XHTML文件中class的命名</strong><br />
====================================</p>
<div class="detail_run">
<div class="UBBContent">(1)颜色:使用颜色的名称或者16进制代码,如(不建议以表现来命名)<br />
　　.red { color: red; } <br />
　　.f60 { color: #f60; } <br />
　　.ff8600 { color: #ff8600; } <br />
(2)字体大小,直接使用”font 字体大小”作为名称,如 <br />
　　.font12px { font-size: 12px; } <br />
　　.font9pt {font-size: 9pt; } <br />
(3)对齐样式,使用对齐目标的英文名称,如 <br />
　　.left { float:left; } <br />
　　.bottom { float:bottom; } <br />
(4)标题栏样式,使用”类别 功能”的方式命名,如<br />
　　.barnews { } <br />
　　.barproduct { } </div>
</div>
<p>
<strong>其它相关注意事项</strong> <br />
=========================</p>
<div class="detail_run">
<div class="UBBContent">　　1.一律小写; <br />
　　2.尽量用英文; <br />
　　3.不加中杠和下划线; <br />
　　4.尽量不缩写，除非一看就明白的单词. <br />
　　　　主要的 master.css <br />
　　　　模块 module.css <br />
　　　　基本共用 base.css <br />
　　　　布局，版面 layout.css <br />
　　　　主题 themes.css <br />
　　　　专栏 columns.css <br />
　　　　文字 font.css <br />
　　　　表单 forms.css <br />
　　　　补丁 mend.css <br />
　　　　打印 print.css </div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/114.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS打造评分星级效果</title>
		<link>http://www.artcss.com/archives/73.html</link>
		<comments>http://www.artcss.com/archives/73.html#comments</comments>
		<pubDate>Thu, 16 Jul 2009 21:41:28 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.artskin.cn/blog/?p=73</guid>
		<description><![CDATA[用纯css打造星级评分效果正在被越来越多地应用在网络中，结合ajax等技术，可以渲染出很出色的视觉效果和很棒的用户体验。 　　首先用中文写一下这个效果的算法： 1. 使用背景图片的位置切换来获得星级效果； 2. 整个效果最关键的地方就是“三层理论”，整个效果分为三层——空分层、分数层和打分层，三层的布局均为absolute，以避免ul本身自带的相对布局（当然用div也可以获得同样效果）； 3. 空分层就是使用背景图片中的“空星”作为背景，并横向平铺； 4. 分数层的宽度等于（分数*图片宽度）得到的数值，并且使用背景图片中的“分数星（例子中为黄色）”作为背景横向平铺； 5. 打分层就是将5个空链接置于5个星星的位置上（宽度要和背景图片吻合），并将5个a：hover的背景设为“打分星（这里为绿色）”，宽度设为星数*图片宽度，left为0(靠左，这样结合a：hover不同的宽度就可以出现打分效果)，垂直坐标小于a的垂直坐标（以确保当前a：hover不会遮挡住其他链接）； 我们看最后的运行效果： &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /&#62; &#60;title&#62;CSS打造评分星级效果::前端思考&#60;/title&#62; &#60;style type=&#34;text/css&#34;&#62; .star-rating{ list-style:none; margin: 0px; padding:0px; width: 150px; height: 30px; position: relative; background: url(http://www.artskin.cn/blog/wp-content/uploads/2009/07/star.gif) top left repeat-x; } .star-rating li{ padding:0px; margin:0px; /*\*/ float: [...]]]></description>
			<content:encoded><![CDATA[<p>用纯css打造星级评分效果正在被越来越多地应用在网络中，结合ajax等技术，可以渲染出很出色的视觉效<span id="more-73"></span>果和很棒的用户体验。</p>
<p>　　首先用中文写一下这个效果的算法：</p>
<ul>
<li>1. 使用背景图片的位置切换来获得星级效果；<br />
<a href="http://www.artskin.cn/blog/wp-content/uploads/2009/07/star.gif"><img src="http://www.artskin.cn/blog/wp-content/uploads/2009/07/star.gif" alt="star" title="star" width="30" height="90" class="alignnone size-full wp-image-74" /></a>
</li>
<li> 2. 整个效果最关键的地方就是“三层理论”，整个效果分为三层——空分层、分数层和打分层，三层的布局均为absolute，以避免ul本身自带的相对布局（当然用div也可以获得同样效果）；</li>
<li>3. 空分层就是使用背景图片中的“空星”作为背景，并横向平铺；</li>
<li>4. 分数层的宽度等于（分数*图片宽度）得到的数值，并且使用背景图片中的“分数星（例子中为黄色）”作为背景横向平铺；</li>
<li>5. 打分层就是将5个空链接置于5个星星的位置上（宽度要和背景图片吻合），并将5个a：hover的背景设为“打分星（这里为绿色）”，宽度设为星数*图片宽度，left为0(靠左，这样结合a：hover不同的宽度就可以出现打分效果)，垂直坐标小于a的垂直坐标（以确保当前a：hover不会遮挡住其他链接）；</li>
</ul>
<h4>我们看最后的运行效果：</h4>
<div class="runcode">
<p><textarea name="runcode" class="runcode_text" id="runcode_ehNenQ">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;
&lt;title&gt;CSS打造评分星级效果::前端思考&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
.star-rating{
list-style:none;
margin: 0px;
padding:0px;
width: 150px;
height: 30px;
position: relative;
background: url(http://www.artskin.cn/blog/wp-content/uploads/2009/07/star.gif) top left repeat-x;
}
.star-rating li{
padding:0px;
margin:0px;
/*\*/
float: left;
/* */
}
.star-rating li a{
display:block;
width:30px;
height: 30px;
text-decoration: none;
text-indent: -9000px;
z-index: 20;
position: absolute;
padding: 0px;
}
.star-rating li a:hover{
background: url(http://www.artskin.cn/blog/wp-content/uploads/2009/07/star.gif) left center;
z-index: 2;
left: 0px;
}
.star-rating a.one-star{
left: 0px;
}
.star-rating a.one-star:hover{
width:30px;
}
.star-rating a.two-stars{
left:30px;
}
.star-rating a.two-stars:hover{
width: 60px;
}
.star-rating a.three-stars{
left: 60px;
}
.star-rating a.three-stars:hover{
width: 90px;
}
.star-rating a.four-stars{
left: 90px;
}
.star-rating a.four-stars:hover{
width: 120px;
}
.star-rating a.five-stars{
left: 120px;
}
.star-rating a.five-stars:hover{
width: 150px;
}
.star-rating li.current-rating{
background: url(astar.gif) left bottom;
position: absolute;
height: 30px;
width:105px;
display: block;
text-indent: -9000px;
z-index: 1;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;ul class=&quot;star-rating&quot;&gt;
		&lt;li class=&quot;current-rating&quot;&gt;Currently 3.5/5 Stars.&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;1 star out of 5&quot; class=&quot;one-star&quot;&gt;1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;2 stars out of 5&quot; class=&quot;two-stars&quot;&gt;2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;3 stars out of 5&quot; class=&quot;three-stars&quot;&gt;3&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;4 stars out of 5&quot; class=&quot;four-stars&quot;&gt;4&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;5 stars out of 5&quot; class=&quot;five-stars&quot;&gt;5&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>
<p><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_ehNenQ');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_ehNenQ');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/73.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用于打印的页面设计</title>
		<link>http://www.artcss.com/archives/5.html</link>
		<comments>http://www.artcss.com/archives/5.html#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:57:37 +0000</pubDate>
		<dc:creator>Artcss</dc:creator>
				<category><![CDATA[Xhtml+css]]></category>
		<category><![CDATA[打印页面]]></category>

		<guid isPermaLink="false">http://artskin.jhost.cn/blog/?p=5</guid>
		<description><![CDATA[在网站的一些应用中需要提供用户直接打印页面的功能，最明显的就是电子优惠券，商家根据网站提供的模板输入内容，然后生成优惠券页面，用户打印这个页面即是优惠券。 当然最优的做法是根据这个页面生成一个图片文件，用户下载这个图片再去打印，打印的效果就不会受浏览器的设置而受影响打印出来的效果。 但如果由于一些原因，为了快速或者节约成本，不去将页面存为图片文件的操作，那么就只有直接将HTML页面直接打印下来，这样就需要在对页面的设计中有一些额外的要求，这里提出两个地方需要注意： 1.对style标签的属性设置： &#60;style type=”text/css” media=”print”&#62; 这里表示该style内引入或者定义的样式属性仅仅在打印的时候使用，这里提醒一下，如果没有设置media属性，那么定义的样式将在浏览器和打印时都起效，所以建议将类似这样的样式放在所有常规样式之后。比如我们希望在打印出来的页面上有一行“打印与雅虎口碑网”，但在浏览器中并不现实： &#60;p class=”printTitle”&#62;打印与雅虎口碑网&#60;/p&#62; 那么我们就可以在统一样式中设置.printTitle{display:none;},而在后面的media为”print”的样式中设置为.printTitle{display:block;}。在定义的打印样式并不是在打印时的优先级会高于常规定义的样式，所以再次建议将打印样式放在所有常规样式之后。 2.在页面打印的时候浏览器的设置会对打印的效果有影响，在IE中的“工具”–“Internet选项”–“高级”中有一个“打印背景颜色和图像”，类似的在Firefox中“文件”–“页面设置”中有一个“打印背景颜色和图像”，当这个选项被选中的时候，页面中的背景颜色和图片都可以打印出来（有些不标准的IE内核浏览器似乎有些问题，背景颜色可以打印出来，但是背景图片不行），如果没有选中则背景颜色和图片都无法打印出来，所以为了屏蔽用户不同的浏览器和浏览器设置，我建议两点，第一是在用背景色填充的区域作为分界的地方加上1px的边框，颜色和背景色一样，这样在浏览器中看不出来变化，而在打印的时候即使用户的设置导致背景色无法打印出来也可以有一个边框来作为分割，最大层的上保留了页面格局；第二是对所有必不可少的图片都使用&#60;img/&#62;标签，这样无论用户浏览器怎么设置都可以将这些图片打印出来，可能这样与平时一些页面设计方式不同，但为了统一打印的效果，也只要让步了。 我这里简单的提出了一些在实际运用中遇到的问题，如果大家还有什么新的问题和想法，可提出来共同谈论，在这里先抛砖了； 原文链接：http://ued.koubei.com/?p=918]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_23" class="wp-caption alignnone" style="width: 310px"><img src="http://www.artskin.cn/blog/wp-content/uploads/2009/07/print-300x227.jpg" alt="打印页面" title="print" width="300" height="227" class="size-full wp-image-23" /><p class="wp-caption-text">打印页面</p></div><br />
在网站的一些应用中需要提供用户直接打印页面的功能，最明显的就是电子优惠券，商家根据网站提<span id="more-5"></span>供的模板输入内容，然后生成优惠券页面，用户打印这个页面即是优惠券。</p>
<p>当然最优的做法是根据这个页面生成一个图片文件，用户下载这个图片再去打印，打印的效果就不会受浏览器的设置而受影响打印出来的效果。</p>
<p>但如果由于一些原因，为了快速或者节约成本，不去将页面存为图片文件的操作，那么就只有直接将HTML页面直接打印下来，这样就需要在对页面的设计中有一些额外的要求，这里提出两个地方需要注意：</p>
<p><strong>1.对style标签的属性设置：</strong></p>
<p><span>&lt;style type=”text/css” media=”print”&gt;</span></p>
<p>这里表示该style内引入或者定义的样式属性仅仅在打印的时候使用，这里提醒一下，如果没有设置media属性，那么定义的样式将在浏览器和打印时都起效，所以建议将类似这样的样式放在所有常规样式之后。比如我们希望在打印出来的页面上有一行“打印与雅虎口碑网”，但在浏览器中并不现实：</p>
<p><span>&lt;p class=”printTitle”&gt;打印与雅虎口碑网&lt;/p&gt;</span></p>
<p>那么我们就可以在统一样式中设置.printTitle{display:none;},而在后面的media为”print”的样式中设置为.printTitle{display:block;}。在定义的打印样式并不是在打印时的优先级会高于常规定义的样式，所以再次建议将打印样式放在所有常规样式之后。</p>
<p>2.在页面打印的时候浏览器的设置会对打印的效果有影响，在IE中的“工具”–“Internet选项”–“高级”中有一个“打印背景颜色和图像”，类似的在Firefox中“文件”–“页面设置”中有一个“打印背景颜色和图像”，当这个选项被选中的时候，页面中的背景颜色和图片都可以打印出来（有些不标准的IE内核浏览器似乎有些问题，背景颜色可以打印出来，但是背景图片不行），如果没有选中则背景颜色和图片都无法打印出来，所以为了屏蔽用户不同的浏览器和浏览器设置，我建议两点，第一是在用背景色填充的区域作为分界的地方加上1px的边框，颜色和背景色一样，这样在浏览器中看不出来变化，而在打印的时候即使用户的设置导致背景色无法打印出来也可以有一个边框来作为分割，最大层的上保留了页面格局；第二是对所有必不可少的图片都使用&lt;img/&gt;标签，这样无论用户浏览器怎么设置都可以将这些图片打印出来，可能这样与平时一些页面设计方式不同，但为了统一打印的效果，也只要让步了。</p>
<p>我这里简单的提出了一些在实际运用中遇到的问题，如果大家还有什么新的问题和想法，可提出来共同谈论，在这里先抛砖了；</p>
<p>原文链接：<a href="http://ued.koubei.com/?p=918" target="_blank">http://ued.koubei.com/?p=918</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.artcss.com/archives/5.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

