<?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>刘钢的博客 - 我是UED &#187; CSS</title>
	<atom:link href="http://www.iamued.com/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>http://www.iamued.com</link>
	<description>http://www.IamUED.com</description>
	<lastBuildDate>Wed, 18 Jan 2012 02:51:35 +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>“床”结构的写法 未知高度的垂直居中</title>
		<link>http://www.iamued.com/qianduan/891.html</link>
		<comments>http://www.iamued.com/qianduan/891.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 03:11:25 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[垂直居中]]></category>
		<category><![CDATA[未知高度]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=891</guid>
		<description><![CDATA[解释下，所谓的“床”结构就是这样的，呃……因为我比较喜欢睡觉，一看到这个结构我就想起了床，所以就叫他床结构咯： A1、A2都是A高度变化出来的，例子大家可以期待19楼新版首页，或者淘宝首页的“宝贝类目”这块。 简单点说这其实就是未知高度的垂直居中问题。可是在ie6下我没办法让 t(图中灰色块)有100%的高度。于是基于vertical-align:middle的垂直居中方法就不管用了。 这个写法用到了IeOnly的:writing-mode:tb-rl;这个属性，以及IE6下top:50%能正确定位到当前父容器高度的一半位置(padding-top:50%、margin-top:50%貌似不能得到这里想要的效果) Demo  可以看到 t 被设置了高度，这个高度应该是介于 t 中文字竖排时候的高度和 A 最小高度之间的。 这中写法适合于不单独定义高度的情况，单独定义高度的话，写法就很多很多了…… 转自：19楼UED-http://ued.dukuai.com/blog/?p=807]]></description>
			<content:encoded><![CDATA[<p>解释下，所谓的“床”结构就是这样的，呃……因为我比较喜欢睡觉，一看到这个结构我就想起了床，所以就叫他床结构咯：</p>
<p><img title="vertical-align" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/12/111126U88.gif" alt="" width="400" height="280" /><br />
<span id="more-891"></span></p>
<p>A1、A2都是A高度变化出来的，例子大家可以期待19楼新版首页，或者淘宝首页的<span id="goods-cate">“宝贝类目”这块。</span></p>
<p>简单点说这其实就是未知高度的垂直居中问题。可是在ie6下我没办法让 t(图中灰色块)有100%的高度。于是基于vertical-align:middle的垂直居中方法就不管用了。</p>
<p>这个写法用到了IeOnly的:writing-mode:tb-rl;这个属性，以及IE6下top:50%能正确定位到当前父容器高度的一半位置(padding-top:50%、margin-top:50%貌似不能得到这里想要的效果)</p>
<p><strong><a href="http://www.iamued.com/demo/about-Unknown-Height-vetical-middle.html" target="_blank">Demo</a></strong></p>
<p> 可以看到 t 被设置了高度，这个高度应该是介于 t 中文字竖排时候的高度和 A 最小高度之间的。</p>
<p>这中写法适合于不单独定义高度的情况，单独定义高度的话，写法就很多很多了……</p>
<p>转自：19楼UED-<a href="http://ued.dukuai.com/blog/?p=807">http://ued.dukuai.com/blog/?p=807</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/891.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在网页中嵌入任意字体的解决方案</title>
		<link>http://www.iamued.com/qianduan/731.html</link>
		<comments>http://www.iamued.com/qianduan/731.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 22:46:23 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[特殊字体]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=731</guid>
		<description><![CDATA[字体使用是网页设计中不可或缺的一部分。经常地，我们希望在网页中使用某一特定字体，但是该字体并非主流操作系统的内置字体，这样用户在浏览页面的时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片，这样做有几个明显缺陷：1. 不可能大范围的使用该字体；2. 图片内容相对使用文字不易修改；3. 不利于网站SEO（主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素）。网络上有一些使用sIFR技术、或javascript/flash hack的方法，但实现起来或繁琐，或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。 查看Demo 下载案例 【第一步】 获取要使用字体的三种文件格式，确保能在主流浏览器中都能正常显示该字体。 .TTF或.OTF，适用于Firefox 3.5、Safari、Opera .EOT，适用于Internet Explorer 4.0+ .SVG，适用于Chrome、IPhone 下面要解决的是如何获取到某种字体的这三种格式文件。一般地，我们在手头上（或在设计资源站点已经找到）有该字体的某种格式文件，最常见的是.TTF文件，我们需要通过这种文件格式转换为其余两种文件格式。字体文件格式的转换可以通过网站FontsQuirrel或onlinefontconverter提供的在线字体转换服务获取。这里推荐第一个站点，它允许我们选择需要的字符生成字体文件（在服务的最后一个选项），这样就大大缩减了字体文件的大小，使得本方案更具实用性。 【第二步】 获取到三种格式的字体文件后，下一步要在样式表中声明该字体，并在需要的地方使用该字体。 字体声明如下： 在页面中需要的地方使用该字体： 或者 查看Demo 下载案例 转自：http://css9.net/css-font-face-solution/]]></description>
			<content:encoded><![CDATA[<p>字体使用是网页设计中不可或缺的一部分。经常地，我们希望在网页中使用某一特定字体，但是该字体并非主流操作系统的内置字体，这样用户在浏览页面的时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片，这样做有几个明显缺陷：1. 不可能大范围的使用该字体；2. 图片内容相对使用文字不易修改；3. 不利于网站SEO（主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素）。网络上有一些使用sIFR技术、或javascript/flash hack的方法，但实现起来或繁琐，或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。<br />
<a href="http://www.iamued.com/demo/font-face-solution/" target="_blank">查看Demo</a> <a href="http://www.iamued.com/demo/font-face-solution/font-face-solution.rar">下载案例</a></p>
<p>【第一步】</p>
<p>获取要使用字体的三种文件格式，确保能在主流浏览器中都能正常显示该字体。</p>
<p>.TTF或.OTF，适用于Firefox 3.5、Safari、Opera<br />
.EOT，适用于Internet Explorer 4.0+<br />
.SVG，适用于Chrome、IPhone</p>
<p><span id="more-731"></span><br />
下面要解决的是如何获取到某种字体的这三种格式文件。一般地，我们在手头上（或在设计资源站点已经找到）有该字体的某种格式文件，最常见的是.TTF文件，我们需要通过这种文件格式转换为其余两种文件格式。字体文件格式的转换可以通过网站<a href="http://www.fontsquirrel.com/fontface/generator" target="_blank">FontsQuirrel</a>或<a href="http://onlinefontconverter.com/" target="_blank">onlinefontconverter</a>提供的在线字体转换服务获取。这里推荐第一个站点，它允许我们选择需要的字符生成字体文件（在服务的最后一个选项），这样就大大缩减了字体文件的大小，使得本方案更具实用性。</p>
<p>【第二步】</p>
<p>获取到三种格式的字体文件后，下一步要在样式表中声明该字体，并在需要的地方使用该字体。</p>
<p>字体声明如下：</p>
<pre class="brush: css; title: ; notranslate">
@font-face {
	font-family: 'fontNameRegular';
	src: url('fontName.eot');
	src: local('fontName Regular'),
              local('fontName'),
              url('fontName.woff') format('woff'),
              url('fontName.ttf') format('truetype'),
              url('fontName.svg#fontName') format('svg');
}
/*其中fontName替换为你的字体名称*/
</pre>
<p>在页面中需要的地方使用该字体：</p>
<pre class="brush: css; title: ; notranslate">
p { font: 13px fontNameRegular, Arial, sans-serif; }
    h1{font-family: fontNameRegular}
</pre>
<p>或者</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p style=&quot;font-family: fontNameRegular&quot;&gt;掬水月在手，落花香满衣&lt;/p&gt;</pre>
<p><a href="http://www.iamued.com/demo/font-face-solution/" target="_blank">查看Demo</a><br />
<a href="http://www.iamued.com/demo/font-face-solution/font-face-solution.rar">下载案例</a></p>
<p>转自：http://css9.net/css-font-face-solution/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/731.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS阴影详解</title>
		<link>http://www.iamued.com/qianduan/642.html</link>
		<comments>http://www.iamued.com/qianduan/642.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 13:31:48 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[阴影]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=642</guid>
		<description><![CDATA[设计师常常使用一些独特的字体效果和页面效果，阴影是其中一个，它可以让页面中的文字和元素具有立体的效果，从而被突出出来。比如对于文字阴影，传统的方法可能需要将文字切出来，直接使用图片，如果考虑SEO和网站性能，还可能会使用CSS Sprites等技术将图片整合： 这是很棘手的事情，拼合图片会花掉你的大量时间，而且为了实现更好视觉效果，你可能还要使用高质量的32位png图片，这又要让你面对该死的IE 6的png透明问题！ 事实上，对于文字的阴影效果，我们完全可以用CSS来实现！ Text-shadow text-shadow可以让我们实现完美的文字阴影效果。基本写法： text-shadow:[颜色 x轴 y轴 模糊半径],[颜色 x轴 y轴 模糊半径]... 或者 text-shadow:[x轴 y轴 模糊半径 颜色],[x轴 y轴 模糊半径 颜色]... 这里的颜色就是阴影的颜色，你可以将颜色写在前面，也可以写在最后。x轴和y轴分别是其阴影的偏移位置，模糊半径可以理解为阴影长度。而且现在大部分浏览器都支持多层阴影，你可以用逗号分开多组设置(当然也可以只是用单个设置)。 示例： 效果如下图： 该属性目前被除IE之外的大部分浏览器支持，对于IE，我们可以使用shadow滤镜来实现： 你可能已经注意到，使用shadow滤镜只能定义角度 direction，而不能定义xy轴，z轴也被换成了strength。注意，使用该滤镜的时候，不能够设置背景颜色，否则滤镜将无效！另外如果你的数学不是很好，不太懂三角函数的算法，你可以使用IE的另外一个滤镜：dropshadow： 好吧，IE总是会拖我们的后腿，不过值得一提的是，IE的这两个滤镜是支持多层阴影的！比如，可以这样写： 欲了解更多关于IE的这两个滤镜，请查看：Shadow 和 Dropshadow 让我们看一个多层阴影的例子(这里无视了IE)： 效果如图： 这里我们使用到了rgba色彩，它是一种在CSS中同时声明颜色及其透明度的一种方法，且被大多数A级浏览器支持的色彩属性（除了IE），了解更多请查看：《RGBa色彩的浏览器支持》——同时我们推荐对于纯色半透明的情况使用这种简单的写法。 text-shadow的浏览器兼容性 目前text-shadow被Firefox 3.5+，Safari 1.1+/chrome 2.0+和opera 9.5支持，IE不支持。需要注意的是，Safari只有4.0才支持多层阴影。 IE各个版本都不支持text-shadow； Opera 9.5+支持最多6-9层阴影，并使用CSS2渲染顺序(最先定义的阴影在最下面)。而且出于性能的原因，模糊半径被限制到100px； Gecko (Firefox)理论上支持无限层text-shadows (不过不建议尝试) 并遵循新的CSS3渲染顺序(最先定义的阴影在最上面)； Safari 1.1-3.2只支持单层text-shadow (只显示第一个逗号之前的声明而无视后面的)。Safari 4.0+才支持多层阴影以及新的CSS3渲染顺序； box-shadow 先来说IE，IE不支持box-shadow属性，但是上面提到的两个滤镜都可以用来实现阴影效果。这也就是说，IE并没有把文字阴影和盒子阴影区分！这就会出现一些问题：元素中的文字会继承元素的阴影设置。但是如果你不定义该元素的background和border，就只会出现文字阴影，如果只定义background属性而不定义border，就只会出现盒子阴影，文字不会出现阴影；而如果只定义了border属性而不定义background，就即会出现盒子阴影，内容文字及图片也会出现阴影。有兴趣的同学可以折腾一下。 好了，现在让我们忘了IE，来看一看box-shadow。事实上，了解了text-shadow之后，box-shadow就很好理解了，目前只有firefox和safari/chrome通过私有属性支持box-shadow属性。而Opera浏览器虽然目前还不支持该属性，但是在其文档中提到下一个版本的引擎Presto [...]]]></description>
			<content:encoded><![CDATA[<p>设计师常常使用一些独特的字体效果和页面效果，阴影是其中一个，它可以让页面中的文字和元素具有立体的效果，从而被突出出来。比如对于文字阴影，传统的方法可能需要将文字切出来，直接使用图片，如果考虑SEO和网站性能，还可能会使用CSS Sprites等技术将图片整合：</p>
<pre class="brush: css; title: ; notranslate">
h2{ background:url(sprites.png) no-repeat 0 0; font-size:0; text-indent:-9999em;...}
h2#title1{background-position:0 -30px;}
h2#title2{background-position:0 -60px;}
</pre>
<p>这是很棘手的事情，拼合图片会花掉你的大量时间，而且为了实现更好视觉效果，你可能还要使用高质量的32位png图片，这又要让你面对该死的IE 6的png透明问题！</p>
<p>事实上，对于文字的阴影效果，我们完全可以用CSS来实现！<br />
<span id="more-642"></span></p>
<p><strong>Text-shadow</strong></p>
<p>text-shadow可以让我们实现完美的文字阴影效果。基本写法：<br />
<code>text-shadow:[颜色 x轴 y轴 模糊半径],[颜色 x轴 y轴 模糊半径]...</code><br />
或者<br />
<code>text-shadow:[x轴 y轴 模糊半径 颜色],[x轴 y轴 模糊半径 颜色]...</code><br />
这里的颜色就是阴影的颜色，你可以将颜色写在前面，也可以写在最后。x轴和y轴分别是其阴影的偏移位置，模糊半径可以理解为阴影长度。而且现在大部分浏览器都支持多层阴影，你可以用逗号分开多组设置(当然也可以只是用单个设置)。<br />
示例：</p>
<pre class="brush: css; title: ; notranslate">
h1{color:#000; background:#333; font:bold 24px/2 &quot;微软雅黑&quot;,Arial;
text-indent:2em;
text-shadow:black 2px 2px 2px; }
</pre>
<p>效果如下图：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/12/213149vsa.jpg" border="0" alt="" width="208" height="60" /></p>
<p>该属性目前被除IE之外的大部分浏览器支持，对于IE，我们可以使用shadow滤镜来实现：</p>
<pre class="brush: css; title: ; notranslate">
filter: Shadow(Color='black', Direction='135', Strength='2')
</pre>
<p>你可能已经注意到，使用shadow滤镜只能定义角度 direction，而不能定义xy轴，z轴也被换成了strength。注意，使用该滤镜的时候，<strong>不能够设置背景颜色</strong>，否则滤镜将无效！另外如果你的数学不是很好，不太懂三角函数的算法，你可以使用IE的另外一个滤镜：dropshadow：</p>
<pre class="brush: css; title: ; notranslate">
filter: dropshadow(OffX=2, OffY=2, Color='black', Positive='true');
</pre>
<p>好吧，IE总是会拖我们的后腿，不过值得一提的是，IE的这两个滤镜是<strong>支持多层阴影</strong>的！比如，可以这样写：</p>
<pre class="brush: css; title: ; notranslate">
filter: dropshadow(OffX=2, OffY=2, Color='red', Positive='true')
dropshadow(OffX=2, OffY=2, Color='yelow', Positive='true')
dropshadow(OffX=2, OffY=2, Color='blue', Positive='true');
</pre>
<p>欲了解更多关于IE的这两个滤镜，请查看：<a href="http://msdn.microsoft.com/en-us/library/ms533086(VS.85).aspx" target="_blank">Shadow</a> 和 <a href="http://msdn.microsoft.com/en-us/library/ms532985(VS.85).aspx" target="_blank">Dropshadow</a></p>
<p>让我们看一个多层阴影的例子(这里无视了IE)：</p>
<pre class="brush: css; title: ; notranslate">
h1{font:bold 32px/2 Verdana, Geneva, sans-serif; color:#f39;
text-shadow:1px 1px 2px rgba(0,0,0,.8), 0 0 1em rgba(255, 0, 255, 0.5), 0 0 0.2em rgba(0, 0, 255, 0.9);}
</pre>
<p>效果如图：</p>
<p><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/12/213150Q1c.jpg" alt="" /></p>
<p>这里我们使用到了rgba色彩，它是一种在CSS中同时声明颜色及其透明度的一种方法，且被大多数A级浏览器支持的色彩属性（<strong>除了IE</strong>），了解更多请查看：《<a href="http://www.qianduan.net/rgba-browser-support-compatibility.html">RGBa色彩的浏览器支持</a>》——同时我们推荐对于纯色半透明的情况使用这种简单的写法。</p>
<h4>text-shadow的浏览器兼容性</h4>
<p>目前text-shadow被Firefox 3.5+，Safari 1.1+/chrome 2.0+和opera 9.5支持，IE不支持。需要注意的是，Safari只有4.0才支持多层阴影。</p>
<ul>
<li>IE各个版本都不支持text-shadow；</li>
<li>Opera 9.5+支持最多6-9层阴影，并使用CSS2渲染顺序(最先定义的阴影在最下面)。而且出于性能的原因，模糊半径被限制到100px；</li>
<li>Gecko (Firefox)理论上支持无限层text-shadows (不过不建议尝试) 并遵循新的CSS3渲染顺序(最先定义的阴影在最上面)；</li>
<li>Safari 1.1-3.2只支持单层text-shadow (只显示第一个逗号之前的声明而无视后面的)。Safari 4.0+才支持多层阴影以及新的CSS3渲染顺序；</li>
</ul>
<h2>box-shadow</h2>
<p>先来说IE，IE不支持box-shadow属性，但是上面提到的两个滤镜都可以用来实现阴影效果。这也就是说，<strong>IE并没有把文字阴影和盒子阴影区分</strong>！这就会出现一些问题：元素中的文字会继承元素的阴影设置。但是如果你不定义该元素的background和border，就只会出现文字阴影，如果只定义background属性而不定义border，就只会出现盒子阴影，文字不会出现阴影；而如果只定义了border属性而不定义background，就即会出现盒子阴影，内容文字及图片也会出现阴影。有兴趣的同学可以折腾一下。</p>
<p>好了，现在让我们忘了IE，来看一看box-shadow。事实上，了解了text-shadow之后，box-shadow就很好理解了，目前只有firefox和safari/chrome通过私有属性支持box-shadow属性。而Opera浏览器虽然目前还不支持该属性，但是在其文档中提到下一个版本的引擎Presto 2.3（目前最新版的Opera 10.10的引擎是Presto 2.2.15）中将会支持 box-shadow，那就让我们慢慢等待吧。</p>
<p>box-shadow的语法和text-shadow是一样的。</p>
<pre class="brush: css; title: ; notranslate">
#boxShadow{
...
-webkit-box-shadow:2px 2px 2px black;
-moz-box-shadow:2px 2px 2px black;
...
}
</pre>
<p>事实上，box-shadow和border-radius是很好的搭档：</p>
<pre class="brush: css; title: ; notranslate">
#boxShadow1{-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
border:1px solid ddd;
-webkit-box-shadow:0 0 10px black;
-moz-box-shadow:0 0 10px black;
padding:10px;}
</pre>
<p>效果如图：</p>
<p><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/12/213151pdO.jpg" alt="" /></p>
<p>firefox在3.5版本中才开始支持box-shadow，目前对阴影的渲染还不是很完美。</p>
<h3>总结</h3>
<p>CSS阴影是CSS3中很有用的特性，我们已经可以在Firefox/webkit/Opera中使用text-shadow，很快也可以在这些浏览器中实现box-shadow。唯独IE特立独行，还在坚持它那蹩脚的滤镜，这真是个杯具。</p>
<p>转自：<a href="http://www.qianduan.net/css-shadow-xiangjie.html">http://www.qianduan.net/css-shadow-xiangjie.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/642.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>border:none;与border:0;的区别</title>
		<link>http://www.iamued.com/qianduan/619.html</link>
		<comments>http://www.iamued.com/qianduan/619.html#comments</comments>
		<pubDate>Thu, 26 Nov 2009 08:55:49 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web标准]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=619</guid>
		<description><![CDATA[这问题在网络相信已经有不少人问到，最近再次被牵起讨论，籍此记录一下个人的理解，border:none;与border:0;的区别体现有两点：一是理论上的性能差异二是浏览器兼容性的差异。 性能差异： 【border:0;】把border设为“0”像素虽然在页面上看不见，但按border默认值理解，浏览器依然对border-width/border-color进行了渲染，即已经占用了内存值。 【border:none;】把border设为“none”即没有，浏览器解析“none”时将不作出渲染动作，即不会消耗内存值。 兼容性差异： 兼容性差异只针对浏览器IE6、IE7与标签button、input而言，在win、win7、vista 的XP主题下均会出现此情况。 【border:none;】当border为“none”时似乎对IE6/7无效边框依然存在，如下例Demo1： 【border:0;】当border为“0”时，感觉比“none”更有效，所有浏览器都一致把边框隐藏，如下例Demo2： 总结： 对比border:0;与border:none;之间的区别在于有渲染和没渲染，感觉他们和display:none;与visibility:hidden;的关系类似，而对于border属性的渲染性能对比暂时没找测试的方法，虽然认为他们存在渲染性能上的差异但也只能说是理论上。 如何让border:none;实现全兼容？只需要在同一选择符上添加背景属性即可，如下例Demo3： 对于border:0;与border:none;个人更向于使用,border:none;，因为border:none;毕竟在性能消耗没有争议，而且兼容性可用背景属性解决不足以成为障碍。 原文：http://blog.gulu77.com/?p=614]]></description>
			<content:encoded><![CDATA[<p>这问题在网络相信已经有不少人问到，最近再次被牵起讨论，籍此记录一下个人的理解，<strong>border:none;</strong>与<strong>border:0;</strong>的区别体现有两点：一是理论上的性能差异二是浏览器兼容性的差异。</p>
<p><strong>性能差异：</strong></p>
<p>【border:0;】把border设为“0”像素虽然在页面上看不见，但按border默认值理解，浏览器依然对border-width/border-color进行了渲染，即已经占用了内存值。</p>
<p>【border:none;】把border设为“none”即没有，浏览器解析“none”时将不作出渲染动作，即不会消耗内存值。</p>
<p><strong>兼容性差异：<span id="more-619"></span></strong></p>
<p>兼容性差异只针对浏览器IE6、IE7与标签button、input而言，在win、win7、vista 的XP主题下均会出现此情况。</p>
<p>【border:none;】当border为“none”时似乎对IE6/7无效边框依然存在，如下例<a href="http://www.blueidea.com/articleimg/2009/11/7232/border_demo1.html" target="_blank">Demo1</a>：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/165550QJV.png" border="0" alt="" width="443" height="224" /></p>
<p>【border:0;】当border为“0”时，感觉比“none”更有效，所有浏览器都一致把边框隐藏，如下例<a href="http://www.blueidea.com/articleimg/2009/11/7232/border_demo2.html" target="_blank">Demo2</a>：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/165553R0D.png" border="0" alt="" width="443" height="224" /></p>
<p><strong>总结</strong>：</p>
<p>对比border:0;与border:none;之间的区别在于有渲染和没渲染，感觉他们和display:none;与visibility:hidden;的关系类似，而对于border属性的渲染性能对比暂时没找测试的方法，虽然认为他们存在渲染性能上的差异但也只能说是理论上。</p>
<p>如何让border:none;实现全兼容？只需要在同一选择符上添加背景属性即可，如下例<a href="http://www.blueidea.com/articleimg/2009/11/7232/border_demo3.html" target="_blank">Demo3</a>：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/165553bLT.png" border="0" alt="" width="443" height="224" /></p>
<p>对于border:0;与border:none;个人更向于使用,border:none;，因为border:none;毕竟在性能消耗没有争议，而且兼容性可用背景属性解决不足以成为障碍。</p>
<p>原文：<a href="http://blog.gulu77.com/?p=614" target="_blank">http://blog.gulu77.com/?p=614</a><a href="http://blog.gulu77.com/?p=628" target="_blank"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/619.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>转：让我们一起讨论如何把简单的事做好</title>
		<link>http://www.iamued.com/qianduan/608.html</link>
		<comments>http://www.iamued.com/qianduan/608.html#comments</comments>
		<pubDate>Tue, 24 Nov 2009 02:18:15 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[JavaScript脚本]]></category>
		<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=608</guid>
		<description><![CDATA[这次的主题是“网站重构中的文件组织”。在这里整理一下昨天我的观点： 1. CSS文件的规划和组织。首先必须强调不能孤立的看前端开发，要横向的跟网站的视觉设计，交互设计，产品策略，后端架构匹配上。那么，CSS跟网站的视觉设计关系是最紧密的，而一家网站的视觉风格跟用户体验和品牌又是关系最紧密的。所以，CSS的规划和组织终极追求的就是如何有效的控制整站的视觉风格。 其中，最重要的一步就是先抽取出整站的基本设计风格，对它进行定义形成一个全局的CSS文件，可以叫core.css或base.css。它包括标签reset，字体/链接，模块容器，通用模块样式（提示、列表、按钮等），页面布局，以及常用的rules(高亮、隐藏、清浮动等)。具体规格是由视觉设计师把握的。这个直接影响到全站的一致性，控制的是全站视觉风格的魂。前端工程师不要试图自己决定这个事儿。 肯定网站的不同频道（或子产品）有自己特有的风格，那么在继承core风格的基础上，定义这些特有的风格形成频道（或产品）级的全局CSS文件，比如电影频道，movie.css。如果一个频道下面的不同页面或栏目又有不同风格的话，再定义页面级的CSS文件。实际上，如果一家网站的Design是经过规划的，不管它的规模有多大顶多三级是完全可以定义住的。更多情况下两级就可以解决问题，页面级如果不具有重用性的话直接内联即可。 如果后端的cms系统或模板系统支持动态组合css文件的话，可以把第二级（频道/产品级）按模块化分成多个子CSS文件，再根据用到哪些模块进行动态组合。而第一级（核心级）一旦定下来是不会经常更新的，所以把它单提出来cache住对性能也有好处。 因此，CSS文件的规划是对应产品整体设计规划做的。而不是从Web排版本身简单分成reset、font、layout等等，这属于单纯的技术思维。 2. Javascript文件的组织。这是个比较大的话题，它应该解决文件的版本管理，文件的依赖关系，以及性能等问题。简单的说YUI3的on-demand loading机制就是一个很好的解决方案。通过它内置的loader组件和依赖关系系统，按需并动态加载所需要的文件。以后有机会专门介绍YUI3的这些机制，或大家用用YUI3就体会到了。 3. 图片素材文件的组织。首先是用好CSS Sprites的优势，回避它维护上的缺点。常犯的问题是，认为它好就把所有素材文件都放进一张图片中，不好维护，也无法重用。所以CSS Sprites的策略是对应CSS规划的，在核心级core.css中把所有定义基本风格的图片素材合并成一张png图，并做优化。不便整合的图（像平铺的虚线）可以用dataURI的方式做到CSS文件中。产品级CSS文件是会较频繁变动的，所以经常变化的素材图片不要放进sprites图中自讨苦吃。 图片格式上除了有帧动画的用gif外，其它都用png8/128色。png无损优化的效果确实好。更多关于图片优化的内容可以关注Stoyan Stefanov的文章。 图片和CSS文件在服务器上部署在同一目录下，这样CSS文件中就可以用相对路径。一定不要写好几层‘../../’这样太容易乱掉，如果用到了其他目录下的图片，就直接写绝对路径。 转自：http://hikejun.com/blog/]]></description>
			<content:encoded><![CDATA[<p>这次的主题是“网站重构中的文件组织”。在这里整理一下昨天我的观点：</p>
<p>1. CSS文件的规划和组织。首先必须强调不能孤立的看前端开发，要横向的跟网站的视觉设计，交互设计，产品策略，后端架构匹配上。那么，CSS跟网站的视觉设计关系是最紧密的，而一家网站的视觉风格跟用户体验和品牌又是关系最紧密的。所以，CSS的规划和组织终极追求的就是如何有效的控制整站的视觉风格。</p>
<p><span id="more-608"></span><br />
其中，最重要的一步就是先抽取出整站的基本设计风格，对它进行定义形成一个全局的CSS文件，可以叫core.css或base.css。它包括标签reset，字体/链接，模块容器，通用模块样式（提示、列表、按钮等），页面布局，以及常用的rules(高亮、隐藏、清浮动等)。具体规格是由视觉设计师把握的。这个直接影响到全站的一致性，控制的是全站视觉风格的魂。前端工程师不要试图自己决定这个事儿。</p>
<p>肯定网站的不同频道（或子产品）有自己特有的风格，那么在继承core风格的基础上，定义这些特有的风格形成频道（或产品）级的全局CSS文件，比如电影频道，movie.css。如果一个频道下面的不同页面或栏目又有不同风格的话，再定义页面级的CSS文件。实际上，如果一家网站的Design是经过规划的，不管它的规模有多大顶多三级是完全可以定义住的。更多情况下两级就可以解决问题，页面级如果不具有重用性的话直接内联即可。</p>
<p>如果后端的cms系统或模板系统支持动态组合css文件的话，可以把第二级（频道/产品级）按模块化分成多个子CSS文件，再根据用到哪些模块进行动态组合。而第一级（核心级）一旦定下来是不会经常更新的，所以把它单提出来cache住对性能也有好处。</p>
<p>因此，CSS文件的规划是对应产品整体设计规划做的。而不是从Web排版本身简单分成reset、font、layout等等，这属于单纯的技术思维。</p>
<p>2. Javascript文件的组织。这是个比较大的话题，它应该解决文件的版本管理，文件的依赖关系，以及性能等问题。简单的说YUI3的on-demand loading机制就是一个很好的解决方案。通过它内置的loader组件和依赖关系系统，按需并动态加载所需要的文件。以后有机会专门介绍YUI3的这些机制，或大家用用<a href="http://developer.yahoo.com/yui/3/yui/">YUI3</a>就体会到了。</p>
<p>3. 图片素材文件的组织。首先是用好CSS Sprites的优势，回避它维护上的缺点。常犯的问题是，认为它好就把所有素材文件都放进一张图片中，不好维护，也无法重用。所以CSS Sprites的策略是对应CSS规划的，在核心级core.css中把所有定义基本风格的图片素材合并成一张png图，并做优化。不便整合的图（像平铺的虚线）可以用<a href="http://www.phpied.com/data-urls-what-are-they-and-how-to-use/">dataURI的方式</a>做到CSS文件中。产品级CSS文件是会较频繁变动的，所以经常变化的素材图片不要放进sprites图中自讨苦吃。</p>
<p>图片格式上除了有帧动画的用gif外，其它都用png8/128色。png无损优化的效果确实好。更多关于图片优化的内容可以关注<a href="http://www.phpied.com/image-optimization-7-mistakes/">Stoyan Stefanov的文章</a>。</p>
<p>图片和CSS文件在服务器上部署在同一目录下，这样CSS文件中就可以用相对路径。一定不要写好几层‘../../’这样太容易乱掉，如果用到了其他目录下的图片，就直接写绝对路径。</p>
<p>转自：<a href="http://hikejun.com/blog/">http://hikejun.com/blog/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/608.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>由黄钻等级图标处理引发的思考</title>
		<link>http://www.iamued.com/qianduan/554.html</link>
		<comments>http://www.iamued.com/qianduan/554.html#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:58:34 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=554</guid>
		<description><![CDATA[最近在处理Qzone黄钻图标更新时，想起近期对业务图标进行优化所遇到的一些问题，把思绪收拾起来和大家一共探讨，欢迎多方声音。 在实际工作中，图标类的应用非常广泛，如同数组般的等级图标更显其特殊性。下面要共同探讨的两个方向，以什么方式实现及怎么更好在贴近项目实际更好地实现并供应用。 假设：业务的用户等级共有10个，加上大小2种视觉尺寸的图标，还有“过期未续费用户”的表现，共有38个图标需要入库供调用（如下图）。 在项目的CSS框架研发中，会有几个key作为考虑：请求数、代码量、兼容性、图片文件大小、是否可并为组件模块且方便逻辑性实现。 众多不同等级的图标在不同方式的广泛应用时，是否会产生过多的文件请求； 等级图标的代码在实现上是否会使用过多的代码，且页面上真实应用的只是少量代码，从而造成代码臃肿； (x)html+css输出的图标应用到页面中，是否和页面上其它元素兼容，否则将为达到兼容目标而增加一系列代码； 如果各图标合并后，权衡项目应用的实际情况，图象文件是否会过大而消耗带宽； 图标的HTML固定，className命名中的某个数字命为作为变量，通过修改变量来达到表现效果。 回顾之前的出现的处理方式，可以归总为三种： 前景图的插入 这应是最原始的处理方式了，将众多单个等级的图片有序命名存放到一个目录，由前端页面应用，通过修改文件名的方式更换不同的等级显示。在实际的用户列表页面中，因为不同的用户通属不同的等级，那么，就会显示不贩等级图标，如上面假设，就会同时产生38个请求。且在项目的维护上，极易存在瓶颈。假设根据需目需要对图标文件更换存放目录或更改其尺寸大小，那么需要大面积对所有应用过的开发 template文件排查处理（更改URL，宽高定义，文件名等），很多情况难以维系在可控范围。 透明图+背景的实现 这是Qzone项目中使用最多的一种方式，在项目的访问速度体验优化及图标实际应用中起到不可磨灭的作用，该方式后期也陆续为国内外其它网站使用。其具体实现方式是，保存一张1*1像素的透明图片，并将其设置长时间cache，因其display属性的特殊性，图片在页面布局上得心应手，且解决了多请求的问题，同时解决图片合并区域扩展维护的问题。但是，一旦在客户端cache文件队列中被挤掉，cache失败，该方式容易让这张透明的前景替位图产生洪水式的请求， 造成服务器压力和大流量。且&#60;img /&#62;容易继承项目中其它定义。在图标与文字的垂直对齐上各浏览器的渲染解析不一样，从而增加一些兼容代码。 也有衍生出来空src的处理方式，如&#60;img src=”” class=”app_icon” alt=”icon” /&#62;，表面上看，可以节省文件的请求，但事实上，它除了会导致大量的无效请求外，还会向日给apache不断写入错误的log，造成过大的服务端压力，同时，在非IE浏览器（如firefox)也会表现出缺省图象的红叉。 内容标签+背景 这里说的是带文字等内容的标签加入黄钻等级图标背景来实现，如&#60;span&#62;我是黄钻7级用户&#60;/span&#62;，给span的左边定义一个图标，把文字向右移动一定的位置。大伙在实践中验证，这种在语义上和实现上，可以说是完美的了。但是，不方便项目代码的规划和管理，特别像等级图片这类的可以归入库的代码及应用方式。同时，标题的大小区域为不可控，在后续的维护中，更会不定期更改其区域大小，那么，就在图片的合并上存在瓶颈，难以确定一个图片该预留多大的透明区域，使之不影响到其它场景的图片应用，也可能会因为后期的维护处理不当，影响到其它标签区域的背景显示异常，造成不良的用户体验。 标签载体+背景 结合前几点所述，用一个标签作为图片的载体，再给它定义背景等属性，显示出相应的图标。它既可以免除用图片处理产生的流量和请求及服务器压力，又减去合并图片时所考虑的预留空间尺寸。一般标签不具img的特殊属性，既能成块状显示出图标，又能和文字等共处一行内，那么在选取的这个标签要在样式上定义得较少，不易继承样式影响表现，破坏页面的兼容和库文件的管理维护。 在实际项目中，选用了strong作为图标的替代标签： 回顾完各种处理方式后，一起来了解一下实现上的细节，分析一下文章第一张图所示，共有38个图标，且都是图形化，原始想法是，把38个图合并成一个文件。但细心看，这38个图片，有好多的相同的图形，经过整理后，得到下面这张图： 除四个图标载体外，数字都是相同的，因为这里使用的是第四种处理方式，那么在图标的合并上，不用给各小图片块预留过多的透明区域。 雪碧图处理好以后，就可以着手写代码来实现效果了。 &#60;strong&#62;&#60;span&#62;&#60;span&#62;lv1&#60;/span&#62;&#60;/span&#62;&#60;/strong&#62; &#60;strong&#62;&#60;span&#62;&#60;span&#62;lv2&#60;/span&#62;&#60;/span&#62;&#60;/strong&#62; 为了让标签具有img的特有属性，给strong定义display:-moz-inline-stack;display:inline-block; 因各浏览器兼容性的原因，需要定义了两个属性，这里不禁一定要问了，为什么不选用-moz-inline-box呢？这里选用-moz-inline-stack而非-moz-inline-box的原因是： 使用-moz-inline-stack可以解决Firefox2不支持inline-block的问题，但是所有的Firefox版本对于属性为-moz-inline-stack的Element，它的First child element会继承该Element的宽度和高度，但是再下一级的Element不会再继承该属性。 这里说说一下与本图标应用无关的话题，在实际应用中-moz-inline-box会存在元素间的对齐等问题，在处理自适应宽的&#60;button&#62;就能遇到。虽然Firefox有一个私有属性-moz-box-align来帮助解决Element水平对齐问题，但未能预见的问题依旧不少，而相对来说-moz-inline-stack的表现更像inline-block，这点可以在Firefox3中验证出来。仅管如此，-moz-inline-stack使用时也会有一个bug，如果一个moz-inline-stack的Element外层Element是inline属性就会使Firefox中其包含的链接不可点(和IE6的filter+position:absolute出现的BUG一样），这个可以借助position:relative;来解决。 设置完display属性后，我们就给图标定义宽高。实际的图标处理中，完成这两步基本就OK了。但是这个图标应用较为特殊，因为它是两个背景合成一个图标的（载体+等级数），如下图： 下面是两个载体的拼合示意： 所以在结构上加多了两个span，一个是给等级数字的背景载体，另一个是隐藏图标替换文字。 代码写完后，发现代码量相当的惊人，因为只在最外层定义不同的className，那么，就意味着，我们要对众多个类及其里面的标题定义： .gb_vip_1 span, .gb_vip_2 span, .gb_vip_3 span, .gb_vip_4 span, .gb_vip_5 span, .gb_vip_6 span, .gb_vip_7 [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205835dcX.jpg" border="0" alt="" width="510" height="171" /></p>
<p>最近在处理Qzone<strong>黄钻图标</strong>更新时，想起近期对业务图标进行优化所遇到的一些问题，把思绪收拾起来和大家一共探讨，欢迎多方声音。</p>
<p>在实际工作中，图标类的应用非常广泛，如同数组般的等级图标更显其特殊性。下面要共同探讨的两个方向，以什么方式实现及怎么更好在贴近项目实际更好地实现并供应用。</p>
<p><span id="more-554"></span></p>
<p>假设：业务的用户等级共有10个，加上大小2种视觉尺寸的图标，还有“过期未续费用户”的表现，共有38个图标需要入库供调用（如下图）。</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205838yxD.png" border="0" alt="" width="417" height="249" /></p>
<p>在项目的CSS框架研发中，会有几个key作为考虑：请求数、代码量、兼容性、图片文件大小、是否可并为组件模块且方便逻辑性实现。</p>
<ol>
<li>众多不同等级的图标在不同方式的广泛应用时，是否会产生过多的文件请求；</li>
<li>等级图标的代码在实现上是否会使用过多的代码，且页面上真实应用的只是少量代码，从而造成代码臃肿；</li>
<li>(x)html+css输出的图标应用到页面中，是否和页面上其它元素兼容，否则将为达到兼容目标而增加一系列代码；</li>
<li>如果各图标合并后，权衡项目应用的实际情况，图象文件是否会过大而消耗带宽；</li>
<li>图标的HTML固定，className命名中的某个数字命为作为变量，通过修改变量来达到表现效果。</li>
</ol>
<p>回顾之前的出现的处理方式，可以归总为三种：</p>
<ol>
<li><strong>前景图的插入</strong><br />
这应是最原始的处理方式了，将众多单个等级的图片有序命名存放到一个目录，由前端页面应用，通过修改文件名的方式更换不同的等级显示。在实际的用户列表页面中，因为不同的用户通属不同的等级，那么，就会显示不贩等级图标，如上面假设，就会同时产生38个请求。且在项目的维护上，极易存在瓶颈。假设根据需目需要对图标文件更换存放目录或更改其尺寸大小，那么需要大面积对所有应用过的开发 template文件排查处理（更改URL，宽高定义，文件名等），很多情况难以维系在可控范围。</li>
<li><strong>透明图+背景的实现</strong><br />
这是Qzone项目中使用最多的一种方式，在项目的访问速度体验优化及图标实际应用中起到不可磨灭的作用，该方式后期也陆续为国内外其它网站使用。其具体实现方式是，保存一张1*1像素的透明图片，并将其设置长时间cache，因其display属性的特殊性，图片在页面布局上得心应手，且解决了多请求的问题，同时解决图片合并区域扩展维护的问题。但是，一旦在客户端cache文件队列中被挤掉，cache失败，该方式容易让这张透明的前景替位图产生洪水式的请求， 造成服务器压力和大流量。且&lt;img /&gt;容易继承项目中其它定义。在图标与文字的垂直对齐上各浏览器的渲染解析不一样，从而增加一些兼容代码。<br />
也有衍生出来空src的处理方式，如&lt;img src=”” class=”app_icon” alt=”icon” /&gt;，表面上看，可以节省文件的请求，但事实上，它除了会导致大量的无效请求外，还会向日给apache不断写入错误的log，造成过大的服务端压力，同时，在非IE浏览器（如firefox)也会表现出缺省图象的红叉。<br />
<img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205838Euh.png" border="0" alt="" width="463" height="197" /></li>
<li><strong>内容标签+背景</strong><br />
这里说的是带文字等内容的标签加入黄钻等级图标背景来实现，如&lt;span&gt;我是黄钻7级用户&lt;/span&gt;，给span的左边定义一个图标，把文字向右移动一定的位置。大伙在实践中验证，这种在语义上和实现上，可以说是完美的了。但是，不方便项目代码的规划和管理，特别像等级图片这类的可以归入库的代码及应用方式。同时，标题的大小区域为不可控，在后续的维护中，更会不定期更改其区域大小，那么，就在图片的合并上存在瓶颈，难以确定一个图片该预留多大的透明区域，使之不影响到其它场景的图片应用，也可能会因为后期的维护处理不当，影响到其它标签区域的背景显示异常，造成不良的用户体验。<img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205839tdb.png" border="0" alt="" width="306" height="269" /></li>
<li><strong>标签载体+背景<br />
</strong>结合前几点所述，用一个标签作为图片的载体，再给它定义背景等属性，显示出相应的图标。它既可以免除用图片处理产生的流量和请求及服务器压力，又减去合并图片时所考虑的预留空间尺寸。一般标签不具img的特殊属性，既能成块状显示出图标，又能和文字等共处一行内，那么在选取的这个标签要在样式上定义得较少，不易继承样式影响表现，破坏页面的兼容和库文件的管理维护。<br />
在实际项目中，选用了strong作为图标的替代标签：<img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205839f5w.png" border="0" alt="" width="393" height="405" /></li>
</ol>
<p>回顾完各种处理方式后，一起来了解一下实现上的细节，分析一下文章第一张图所示，共有38个图标，且都是图形化，原始想法是，把38个图合并成一个文件。但细心看，这38个图片，有好多的相同的图形，经过整理后，得到下面这张图：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205839jek.png" border="0" alt="" width="492" height="72" /></p>
<p>除四个图标载体外，数字都是相同的，因为这里使用的是第四种处理方式，那么在图标的合并上，不用给各小图片块预留过多的透明区域。<br />
雪碧图处理好以后，就可以着手写代码来实现效果了。</p>
<p><span>&lt;strong&gt;&lt;span&gt;&lt;span&gt;lv1&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;<br />
&lt;strong&gt;&lt;span&gt;&lt;span&gt;lv2&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;</span></p>
<p>为了让标签具有img的特有属性，给strong定义display:-moz-inline-stack;display:inline-block;<br />
因各浏览器兼容性的原因，需要定义了两个属性，这里不禁一定要问了，为什么不选用-moz-inline-box呢？这里选用-moz-inline-stack而非-moz-inline-box的原因是：</p>
<ol>
<li>使用-moz-inline-stack可以解决Firefox2不支持inline-block的问题，但是所有的Firefox版本对于属性为-moz-inline-stack的Element，它的First child element会继承该Element的宽度和高度，但是再下一级的Element不会再继承该属性。</li>
<li>这里说说一下与本图标应用无关的话题，在实际应用中-moz-inline-box会存在元素间的对齐等问题，在处理自适应宽的&lt;button&gt;就能遇到。虽然Firefox有一个私有属性-moz-box-align来帮助解决Element水平对齐问题，但未能预见的问题依旧不少，而相对来说-moz-inline-stack的表现更像inline-block，这点可以在Firefox3中验证出来。仅管如此，-moz-inline-stack使用时也会有一个bug，如果一个moz-inline-stack的Element外层Element是inline属性就会使Firefox中其包含的链接不可点(和IE6的filter+position:absolute出现的BUG一样），这个可以借助position:relative;来解决。</li>
</ol>
<p>设置完display属性后，我们就给图标定义宽高。实际的图标处理中，完成这两步基本就OK了。但是这个图标应用较为特殊，因为它是两个背景合成一个图标的（载体+等级数），如下图：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/2058391wP.png" border="0" alt="" width="115" height="33" /></p>
<p>下面是两个载体的拼合示意：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205839wuk.png" border="0" alt="" width="68" height="48" /></p>
<p>所以在结构上加多了两个span，一个是给等级数字的背景载体，另一个是隐藏图标替换文字。</p>
<p>代码写完后，发现代码量相当的惊人，因为只在最外层定义不同的className，那么，就意味着，我们要对众多个类及其里面的标题定义：<br />
<code>.gb_vip_1 span,<br />
.gb_vip_2 span,<br />
.gb_vip_3 span,<br />
.gb_vip_4 span,<br />
.gb_vip_5 span,<br />
.gb_vip_6 span,<br />
.gb_vip_7 span</code><br />
这样代码就相当臃肿，于是，改变className的定义方式，给各个等级图标最外层容器定义相同的命名，给里面数字的载体定义区别显示的命名(带数字的命名是方便逻辑实现)：<br />
<code><strong class="gb_vip_icon"><span class="lv1"><span class="gb_vip_none">lv1</span></span></strong><br />
<strong class="gb_vip_icon"><span class="lv2"><span class="gb_vip_none">lv2</span></span></strong></code><br />
以上所述的供讨论和参考，期盼大伙一些其它的想法和分享。</p>
<p>原文：http://webteam.tencent.com/?p=1330</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/554.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用CSS 3将我们带入下一个高度</title>
		<link>http://www.iamued.com/qianduan/548.html</link>
		<comments>http://www.iamued.com/qianduan/548.html#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:54:12 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=548</guid>
		<description><![CDATA[  “CSS 3 不是新事物，更不是只是围绕border-radius属性实现的圆角。它正耐心的坐在那里，已经准备好了首次登场，呷着咖啡，等着浏览器来铺上红地毯。你看，浏览器需要跟上了……” –谨以此文纪录ISD WEBTEAM 09年Q2力作：CSS 3.0 参考手册 (中文版) 背景 苏昱的《样式表中文手册》为代表的CSS2.0参考资料伴随了国内众多web设计师们走过了近10年的时光，这种影响是深远的，但随着CSS技术的不断发展，设计师们多受传统资料的影响，不能超脱现有的篱笆，给自己背上了沉重的包袱。你是否已注意到CSS 3已经蓄势待发？你是否渴望开始使用它们却又不知从何下手呢？正当CSS 3新特性备受期待的时候，我们的CSS3.0 中文参考手册就应运而生了…… 什么是CSS 3？ CSS 是 Cascading Style Sheet 的缩写。译作「层叠样式表」。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。 CSS3.0 则表示下一版本的CSS，3.0是版本号。 CSS 3给我们带来了什么惊喜？ CSS3.0对于我们Web设计人员来说不只是新奇的技术，更重要的是这些全新概念的web应用给我们的设计更多的无限可能性，也极大的提高了我们的开发效率。我们将不必再依赖图片或者 Javascript 去完成圆角、多背景、用户自定义字体、3D动画、渐变、盒阴影、文字阴影、透明度等提高Web设计质量的特色应用。CSS 3 .0的出现，让代码更简洁、页面结构更合理，性能和效果得到兼顾。 使用说明 本手册服务对象为网页重构师或前端开发工程师。 本手册根据W3C工作草案进行翻译，存在一定的不确定因素，最终解释权归ISD WEBTEAM所有。 本手册的编排参考css3.info的CSS Preview将CSS 3 属性分为边框、背景、颜色、文本、用户界面、基础盒模型、内容、其它模块、高级选择器九大类。 兼容性列表暂时提供Internet Explorer、FireFox、Opera、Safari、Chrome的正式版浏览器兼容性。 私有属性列表中，使用Gecko引擎的浏览器有Firefox，私有属性以-moz-开始；webkit引擎的浏览器有Safari、Chrome，以-webkit-开始；Presto引擎的浏览器有Opera，以-o-开始， 以及Internet Explorer，以-ms-开始，目前只有IE8支持-ms-前缀。 针对每个属性制作的示例除了@font face因涉及字体版权取自微软的示例，其它均为团队成员结合自身的沉淀制作，由于手册篇幅的局限性，也许有些示例难以理解，后续我们将对这部分示例单独以文章详细分析。 继承性，鉴于W3C工作草案未对继承性有较清晰的说明，本期未对继承性有测试，暂不具备参考价值。 如下载的CHM文件打不开，可以尝试右键点击CHM文件，然后在“属性”中“解除锁定”。 本手册主要用于交流，限于时间紧张，且为业余深耕夜作，错误和遗漏难免，望大家在使用中多多反馈。我们会不断的完善和升级本手册。这里提供手册V1版，以月为单位不定期更新。 不管你是第一次准备去认识CSS 3，还是已经略知皮毛，CSS 3.0 参考手册 (中文版)将有助你更好的学习和理解CSS [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/2054150IF.jpg" border="0" alt="" width="510" height="168" /></p>
<p>“<strong>CSS 3</strong> 不是新事物，更不是只是围绕border-radius属性实现的圆角。它正耐心的坐在那里，已经准备好了首次登场，呷着咖啡，等着浏览器来铺上红地毯。你看，浏览器需要跟上了……”</p>
<p align="right">–谨以此文纪录ISD WEBTEAM 09年Q2力作：<strong><a href="http://www.blueidea.com/download/product/2009/6987.asp" target="_blank"><strong>CSS 3.0 参考手册 (中文版) </strong></a></strong></p>
<p align="left"><strong><span id="more-548"></span></strong></p>
<p align="left"><strong>背景</strong></p>
<p>苏昱的《样式表中文手册》为代表的CSS2.0参考资料伴随了国内众多web设计师们走过了近10年的时光，这种影响是深远的，但随着CSS技术的不断发展，设计师们多受传统资料的影响，不能超脱现有的篱笆，给自己背上了沉重的包袱。你是否已注意到CSS 3已经蓄势待发？你是否渴望开始使用它们却又不知从何下手呢？正当CSS 3新特性备受期待的时候，我们的CSS3.0 中文参考手册就应运而生了……</p>
<p><strong>什么是CSS 3？</strong></p>
<p>CSS 是 Cascading Style Sheet 的缩写。译作「层叠样式表」。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。<br />
CSS3.0 则表示下一版本的CSS，3.0是版本号。</p>
<p><strong>CSS 3给我们带来了什么惊喜？</strong></p>
<p>CSS3.0对于我们Web设计人员来说不只是新奇的技术，更重要的是这些全新概念的web应用给我们的设计更多的无限可能性，也极大的提高了我们的开发效率。我们将不必再依赖图片或者 Javascript 去完成圆角、多背景、用户自定义字体、3D动画、渐变、盒阴影、文字阴影、透明度等提高Web设计质量的特色应用。CSS 3 .0的出现，让代码更简洁、页面结构更合理，性能和效果得到兼顾。</p>
<p><strong>使用说明</strong></p>
<ul>
<li>本手册服务对象为网页重构师或前端开发工程师。</li>
<li>本手册根据W3C工作草案进行翻译，存在一定的不确定因素，最终解释权归ISD WEBTEAM所有。</li>
<li>本手册的编排参考css3.info的CSS Preview将CSS 3 属性分为边框、背景、颜色、文本、用户界面、基础盒模型、内容、其它模块、高级选择器九大类。</li>
<li>兼容性列表暂时提供Internet Explorer、FireFox、Opera、Safari、Chrome的正式版浏览器兼容性。</li>
<li>私有属性列表中，使用Gecko引擎的浏览器有Firefox，私有属性以-moz-开始；webkit引擎的浏览器有Safari、Chrome，以-webkit-开始；Presto引擎的浏览器有Opera，以-o-开始， 以及Internet Explorer，以-ms-开始，目前只有IE8支持-ms-前缀。</li>
<li>针对每个属性制作的示例除了@font face因涉及字体版权取自微软的示例，其它均为团队成员结合自身的沉淀制作，由于手册篇幅的局限性，也许有些示例难以理解，后续我们将对这部分示例单独以文章详细分析。</li>
<li>继承性，鉴于W3C工作草案未对继承性有较清晰的说明，本期未对继承性有测试，暂不具备参考价值。</li>
<li>如下载的CHM文件打不开，可以尝试右键点击CHM文件，然后在“属性”中“解除锁定”。</li>
<li>本手册主要用于交流，限于时间紧张，且为业余深耕夜作，错误和遗漏难免，望大家在使用中多多反馈。我们会不断的完善和升级本手册。这里提供手册V1版，以月为单位不定期更新。</li>
</ul>
<p>不管你是第一次准备去认识CSS 3，还是已经略知皮毛，<a href="http://www.blueidea.com/download/product/2009/6987.asp" target="_blank">CSS 3.0 参考手册 (中文版)</a>将有助你更好的学习和理解CSS 3 。还等什么？猛击<a href="http://webteam.tencent.com/css3/">http://webteam.tencent.com/css3/</a>下载吧！</p>
<p><strong>总结</strong></p>
<p>CSS 3 属性不仅可以极大的提高我们的工作效率，让一些最耗时的CSS任务不费吹灰之力就能搞定，并且可以使用更简洁和更轻量的代码标签。虽然一些属性尚未被广泛的支持，但这并不意味着我们不能为使用高级浏览器的用户提供更好的体验。</p>
<p>CSS 3 能让我们的优化工作有了新的突破。当你已经完成了图片合并、代码精简等优化工作之后，正在焦头烂额不知道还要做啥的时候，可以尝试把用户进行拆分，去寻求更深层次的突破。例如针对一些高级浏览器使用圆角属性，在IE浏览器使用条件注释（或者hack），那么是不是可以在保证效果的同时，让网页更快的呈现在使用高级浏览器的用户面前呢？</p>
<p>如果我们的网站在各个浏览器里的一个差异不影响美观和网站的可用性，它就应该是被考虑的。如果我们继续浪费大量的时间和精力以使每个细节绝对一致(而不是采用更灵活的和未来导向的方案)，用户将没有升级他们的浏览器的任何动机，我们也就不能更早、更广泛的使用它们。</p>
<p>我相信随着时间的推进和更多浏览器的支持，CSS 3 将越来越受欢迎，它将为web设计师们带来无穷的能量。Web设计师们，还等什么？让我们一起来感受CSS 3 的能量，用CSS 3 将我们带入下一个高度吧！</p>
<p><strong>特别鸣谢</strong></p>
<p>项目过程中，我们也遇到了很多难点，W3C未正式发布CSS 3 ，工作草案不断更新，存在诸多不确定因素，中文资料匮乏，涉及多个浏览器多个版本的浏览器兼容性测试，测试过程繁琐等等，项目组成员都逐步克服，感谢大家在平时需求压力也比较大的时候还能保持着很高的激情参与到CSS 3 项目中来，在公司加完班，回家了还忙着翻译、测试浏览器兼容性等等，有时候CSS3项目群里讨论的聊天记录到凌晨1、2点…正因为有了可爱的你们，项目才能如此顺利的进行，他们是：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/205416ITh.jpg" border="0" alt="" width="510" height="296" /></p>
<p align="left">原文：<a href="http://webteam.tencent.com/?p=1252" target="_blank">http://webteam.tencent.com/?p=1252</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/548.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>纯CSS图片预加载</title>
		<link>http://www.iamued.com/qianduan/533.html</link>
		<comments>http://www.iamued.com/qianduan/533.html#comments</comments>
		<pubDate>Sun, 15 Nov 2009 02:13:33 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=533</guid>
		<description><![CDATA[有很多种方法来实现图片的预加载，通常大部分使用Javascript让事情滚动。不要再受Javascript预载的束缚了吧，用CSS你就可以毫不麻烦的预载你的图片。 为什么使用预载 你为什么会考虑使用预载呢？你是否曾有个网站，在那个网站你要滚动你的导航然后有个延迟直到图片被加载完……嘿嘿。预载将在这方面帮助你。它将在页面加载的时候加载那些图片并将其存储在浏览器的缓存里面。这样当用户滚动导航的时候，很漂亮而且流畅，没有延迟。 CSS代码 这个概念就是写一个CSS样式设置一批背景图片，然后将其隐藏，这样你就看不到那些图片了。那些背景图片就是你想预载的图片。 这是一个例子: #preloader { /* Images you want to preload*/ background-image: url(image1.jpg); background-image: url(image2.jpg); background-image: url(image3.jpg); width: 0px; height: 0px; display: inline; } 这只是一种隐藏你的图片的方法，所以它们不会被显示。我也见到有人使用非常大的background-position值将图片推出去。或者给一个负的margin值。有很多中方法隐藏你要预载的图片，选择最适合你的吧。 另一种情况 有巨大的图片需要下载的情况并不会经常发生，如果你采用通常的做法，提供某种图片正在加载的表示。这里是一些CSS，可以给用户一个提示：图片正在加载。 img { background: url(loadingHourGlass.gif) no-repeat 50% 50%; } gif图片可以是动画，类似于mac上的沙滩球或者PC上的沙漏之类的东东。采用一个动画吧，这样用户就会知道事情正在进行。 结论 当预载有意义的时候做你最好的吧，你的用户将以此喜欢上你。事实上他们可能并没有注意到，但是这是一件好事情，如果他们注意到你的网站正在加载，那可能真的是太慢了。 查看Demo 关于实例一的特别说明 首先多谢评论中网友提出的问题，翻译完这篇文章之后，考虑到一个css规则中多次定义同一个属性，浏览器一般只会处理最后一个，决定有必要做一下检验，但是没有意识到事情的严重性，所以没有及时处理，以至于可能会造成一些误解。 根据我的测试，大部分浏览器都是只加载了最后一个图片，前两个图片被无视了。但是在webkit核心的浏览器中，比如chrome，会预加载这三个图片。实例一为我们提供了一个很好的处理问题的思路，但是对于在同一个css样式中加载多个图片的用法，可能还要等css3的多背景图片属性被更多的浏览器支持才行。 PS:我来解释一下这个demo吧。可能原作者没有考虑太多，只是想演示一下预加载的效果，所以这个demo页面做的有些简单：他只是将预载的图片用于a:hover的背景了，这样在鼠标经过的时候，就可以无闪动的现实那张图片。嗯，也就是文中的第二种用法……]]></description>
			<content:encoded><![CDATA[<p>有很多种方法来实现图片的预加载，通常大部分使用Javascript让事情滚动。不要再受Javascript预载的束缚了吧，用CSS你就可以毫不麻烦的预载你的图片。</p>
<p><strong>为什么使用预载</strong></p>
<p>你为什么会考虑使用预载呢？你是否曾有个网站，在那个网站你要滚动你的导航然后有个延迟直到图片被加载完……嘿嘿。预载将在这方面帮助你。它将在页面加载的时候加载那些图片并将其存储在浏览器的缓存里面。这样当用户滚动导航的时候，很漂亮而且流畅，没有延迟。</p>
<p><span id="more-533"></span><br />
<strong>CSS代码</strong></p>
<p>这个概念就是写一个CSS样式设置一批背景图片，然后将其隐藏，这样你就看不到那些图片了。那些背景图片就是你想预载的图片。</p>
<p>这是一个例子:</p>
<p><code>#preloader {<br />
/* Images you want to preload*/<br />
background-image: url(image1.jpg);<br />
background-image: url(image2.jpg);<br />
background-image: url(image3.jpg);<br />
width: 0px;<br />
height: 0px;<br />
display: inline;<br />
}</code></p>
<p>这只是一种隐藏你的图片的方法，所以它们不会被显示。我也见到有人使用非常大的background-position值将图片推出去。或者给一个负的margin值。有很多中方法隐藏你要预载的图片，选择最适合你的吧。</p>
<p><strong>另一种情况</strong></p>
<p>有巨大的图片需要下载的情况并不会经常发生，如果你采用通常的做法，提供某种图片正在加载的表示。这里是一些CSS，可以给用户一个提示：图片正在加载。</p>
<p><code>img { background: url(loadingHourGlass.gif) no-repeat 50% 50%; }</code></p>
<p>gif图片可以是动画，类似于mac上的沙滩球或者PC上的沙漏之类的东东。采用一个动画吧，这样用户就会知道事情正在进行。</p>
<p><strong>结论</strong></p>
<p>当预载有意义的时候做你最好的吧，你的用户将以此喜欢上你。事实上他们可能并没有注意到，但是这是一件好事情，如果他们注意到你的网站正在加载，那可能真的是太慢了。</p>
<p><a href="http://www.devirtuoso.com/Examples/CSS-Preloader/" target="_blank">查看Demo</a></p>
<p><strong>关于实例一的特别说明</strong></p>
<p>首先多谢评论中网友提出的问题，翻译完这篇文章之后，考虑到一个css规则中多次定义同一个属性，浏览器一般只会处理最后一个，决定有必要做一下检验，但是没有意识到事情的严重性，所以没有及时处理，以至于可能会造成一些误解。</p>
<p>根据我的测试，大部分浏览器都是只加载了最后一个图片，<strong>前两个图片被无视了</strong>。但是在webkit核心的浏览器中，比如chrome，会预加载这三个图片。<strong>实例一为我们提供了一个很好的处理问题的思路</strong>，但是对于在同一个css样式中加载多个图片的用法，可能还要等<a href="http://www.qianduan.net/css3-series-tutorial-background-image-background-and-background-image-size.html" target="_blank">css3的多背景图片属性</a>被更多的浏览器支持才行。</p>
<p>PS:我来解释一下这个demo吧。可能原作者没有考虑太多，只是想演示一下预加载的效果，所以这个demo页面做的有些简单：他只是将预载的图片用于a:hover的背景了，这样在鼠标经过的时候，就可以无闪动的现实那张图片。嗯，也就是文中的第二种用法……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/533.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于vertical-align的表单元素垂直对齐方式研究</title>
		<link>http://www.iamued.com/qianduan/474.html</link>
		<comments>http://www.iamued.com/qianduan/474.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 11:38:09 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[重构]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=474</guid>
		<description><![CDATA[原文链接：http://www.hplus.org.cn/blog/2009/07/143 （本文的标题叫做“方式研究”，是因为，我最终也没有想通原理，只猜出了方法，但是，的确是实现了效果。） 最近的项目涉及到很多表单的制作，特别是复选框(checkbox)和单选框(radio)。但是在前端开发过程中发现，单(复)选框和它们后面的提示文字在不进行任何设置的情况下，是无法对齐的，而且在Firefox和IE中相差甚大。即使设置了vertical-align:middle，也依然不能完美对齐。如下图所示： 于是上网查看了一些网站，发现这个问题是普遍存在的，如下图（FF3.5）： 在很多网站涉及到表单的页面中，都存在这种表单元素与提示文字无法对齐的问题。于是打算研究一下这个问题。首先，搜索到了wheatlee前辈的文章《大家都对vertical-align的各说各话》。wheatlee在他的文章中关于垂直居中提到了这样几个关键点： 1、vertical-align:middle的时候，是该元素的中心对齐周围元素的中心。 2、这里“中心”的定义是：图片当然就是height的一半的位置，而文字应该是基于baseline往上移动0.5ex，亦即小写字母“x”的正中心。但是很多浏览器往往把ex这个单位定义为0.5em，以至于其实不一定是x的正中心 （baseline等名词如果不懂，请先阅读wheatlee的文章） 按照这个思路，对照我遇到的问题，首先想到的是先验证一下浏览器对于“复选框”和图片是不是使用同样的规则来渲染（是不是把复选框当成一个正方形图片来对待）。于是写出下面的代码： &#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″ /&#62; &#60;title&#62;测试vertical-align&#60;/title&#62; &#60;style&#62; body{font-size:12px;} &#60;/style&#62; &#60;/head&#62; &#60;body&#62; &#60;input style=”vertical-align:middle;” name=”test” type=”checkbox”&#62; &#60;img style=”vertical-align:middle;”  src=”testpic.gif” /&#62; 测试文字 &#60;/html&#62; 代码中的testpic.gif是一个尺寸与复选框完全一样的黑色图片。FF3.5下显示如下： 事实证明，FF3.5对于复选框和图片的垂直对齐方式是采用同样的规则进行渲染的，即将复选框当作一个正方形的图片(IE不是)。按照wheatlee“middle的时候，是该元素的中心对齐周围元素的中心”的观点，如果我在复选框后面输入英文字符，那么复选框的中心将与英文中小写字母x的中心对齐。经测试，FF3.5下面基本上是这样的(在一些字号的时候会有一定的误差，比如，如果字体高度是偶数，那么这个中心点有时在一般偏上1px，有时在一半偏下1px)。如图： 但是这对于中文来说，并不是一个好的结果。因为中文是方块字，并且相同字号的情况下，高度会比小写的x高出很多。所以，按照浏览器内置的方式，只用vertical-align:middle是无论如何也无法对齐中文的（无论是只写中文，中文在前，英文在前，FF3.5都是按照小写x中心那种方法来对齐的。）。但是回头再看看wheatlee的文章，他说这个小写x中心对齐的渲染方式，是对于“文字”来说的。那么，如果不是文字呢…？如果复选框后面跟的是一个行内元素，如label，而文字是写在它内部的，会是什么样呢？浏览器会不会将这个内联元素整体看作一个“块”，然后依照类似图片的规则进行渲染呢？如果那样，我们就达到目的了。 但是经过测试，很遗憾，事实并不是这样，加上label后跟没加没有任何区别。FF3.5/IE6/IE7均是如此。在FF3.5中用firebug看一下，证明浏览器并没有按照label的高度值来去对齐中心点。如图： 如果按照之前的设想，红蓝两线应该是重合的。但现在的情况是，它们相差了1px。并且这1px是没有规律的，随着字号的放大，并不恒定，貌似轻易也无法提炼出对应关系来。于是想到，再试一下将label也加上vertical-align:middle。结果如图： 在FF3.5和IE7下面已经很接近于我们希望的状态了，只差1px。IE6下… 无语了。 经过以上折腾，我得出了跟wheatlee相同的结论，就是，各种浏览器之间对这个问题的处理貌似没有任何规律。并且，似乎每一种浏览器对于vertical-align:middle的渲染都不是完全遵从W3C所说的“Align the vertical midpoint of the box [...]]]></description>
			<content:encoded><![CDATA[<p>原文链接：<a href="http://www.hplus.org.cn/blog/2009/07/143">http://www.hplus.org.cn/blog/2009/07/143</a></p>
<p>（本文的标题叫做“方式研究”，是因为，我最终也没有想通原理，只猜出了方法，但是，的确是实现了效果。）</p>
<p>最近的项目涉及到很多表单的制作，特别是复选框(checkbox)和单选框(radio)。但是在前端开发过程中发现，单(复)选框和它们后面的提示文字在不进行任何设置的情况下，是无法对齐的，而且在Firefox和IE中相差甚大。即使设置了vertical-align:middle，也依然不能完美对齐。如下图所示：</p>
<p><img title="01" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193810wOA.jpg" alt="01" width="325" height="137" /><br />
<span id="more-474"></span><br />
于是上网查看了一些网站，发现这个问题是普遍存在的，如下图（FF3.5）：</p>
<p><img title="error" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193812fAJ.jpg" alt="error" width="620" height="311" /></p>
<p>在很多网站涉及到表单的页面中，都存在这种表单元素与提示文字无法对齐的问题。于是打算研究一下这个问题。首先，搜索到了wheatlee前辈的文章《<a onclick="pageTracker._trackPageview('/outbound/article/www.blueidea.com');" href="http://www.blueidea.com/tech/web/2008/5892.asp" target="_blank">大家都对vertical-align的各说各话</a>》。wheatlee在他的文章中关于垂直居中提到了这样几个关键点：</p>
<p>1、vertical-align:middle的时候，是该元素的中心对齐<strong>周围元素</strong>的中心。</p>
<p>2、这里“中心”的定义是：<strong>图片</strong>当然就是height的一半的位置，而<strong>文字</strong>应该是基于baseline往上移动0.5ex，亦即<strong>小写字母“x”的正中心</strong>。但是很多浏览器往往把ex这个单位定义为0.5em，以至于其实不一定是x的正中心</p>
<p>（baseline等名词如果不懂，请先阅读wheatlee的文章）</p>
<p>按照这个思路，对照我遇到的问题，首先想到的是先验证一下浏览器对于“复选框”和图片是不是使用同样的规则来渲染（是不是把复选框当成一个正方形图片来对待）。于是写出下面的代码：</p>
<p><code><br />
&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″ /&gt;<br />
&lt;title&gt;测试vertical-align&lt;/title&gt;<br />
&lt;style&gt;<br />
body{font-size:12px;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;input style=”vertical-align:middle;” name=”test” type=”checkbox”&gt;<br />
&lt;img style=”vertical-align:middle;”  src=”testpic.gif” /&gt;<br />
测试文字<br />
&lt;/html&gt;<br />
</code><br />
代码中的testpic.gif是一个尺寸与复选框完全一样的黑色图片。FF3.5下显示如下：</p>
<p><img title="02" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193813XGc.jpg" alt="02" width="211" height="63" /></p>
<p>事实证明，FF3.5对于复选框和图片的垂直对齐方式是采用同样的规则进行渲染的，即将复选框当作一个正方形的图片(IE不是)。按照wheatlee“middle的时候，是该元素的中心对齐<strong>周围元素</strong>的中心”的观点，如果我在复选框后面输入英文字符，那么复选框的中心将与英文中小写字母x的中心对齐。经测试，FF3.5下面基本上是这样的(在一些字号的时候会有一定的误差，比如，如果字体高度是偶数，那么这个中心点有时在一般偏上1px，有时在一半偏下1px)。如图：</p>
<p><img title="03" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193815pKS.jpg" alt="03" width="629" height="403" /></p>
<p>但是这对于中文来说，并不是一个好的结果。因为中文是方块字，并且相同字号的情况下，高度会比小写的x高出很多。所以，按照浏览器内置的方式，只用vertical-align:middle是无论如何也无法对齐中文的（无论是只写中文，中文在前，英文在前，FF3.5都是按照小写x中心那种方法来对齐的。）。但是回头再看看wheatlee的文章，他说这个小写x中心对齐的渲染方式，是对于“文字”来说的。那么，如果不是文字呢…？如果复选框后面跟的是一个行内元素，如label，而文字是写在它内部的，会是什么样呢？浏览器会不会将这个内联元素整体看作一个“块”，然后依照类似图片的规则进行渲染呢？如果那样，我们就达到目的了。</p>
<p>但是经过测试，很遗憾，事实并不是这样，加上label后跟没加没有任何区别。FF3.5/IE6/IE7均是如此。在FF3.5中用firebug看一下，证明浏览器并没有按照label的高度值来去对齐中心点。如图：</p>
<p><img title="04" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193817Q9t.jpg" alt="04" width="629" height="170" /></p>
<p>如果按照之前的设想，红蓝两线应该是重合的。但现在的情况是，它们相差了1px。并且这1px是没有规律的，随着字号的放大，并不恒定，貌似轻易也无法提炼出对应关系来。于是想到，再试一下将label也加上vertical-align:middle。结果如图：</p>
<p><img title="05" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/1938199sj.jpg" alt="05" width="629" height="340" /></p>
<p>在FF3.5和IE7下面已经很接近于我们希望的状态了，只差1px。IE6下… 无语了。</p>
<p>经过以上折腾，我得出了跟wheatlee相同的结论，就是，各种浏览器之间对这个问题的处理貌似没有任何规律。并且，似乎每一种浏览器对于vertical-align:middle的渲染都不是完全遵从W3C所说的“Align the vertical midpoint of the box with the baseline of the parent box plus half the x-height of the parent.”</p>
<p>但是经过仔细总结和分析，发现好像最终对齐的结果跟<strong>label的高度</strong>和<strong>当前字体</strong>中小写x的中心点都有关系，两者同时影响着渲染结果。那么，既然现在的情况以及非常接近于希望的状态了，是否可以通过设置字体的方式来改变小写x的中心点的位置，接入对垂直对齐结果进行“微调”呢？</p>
<p>最终，在不断的测试中发现，如果将font-family中的第一个字体设置为Tahoma，则可以完美的实现对齐(Verdana等字体也可以)。而且在FF3.5/IE6/IE7/IE8和Chrome中均显示正常。最终代码如下：<br />
<code><br />
&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″ /&gt;<br />
&lt;title&gt;测试vertical-align&lt;/title&gt;<br />
&lt;style&gt;<br />
label{vertical-align:middle}<br />
.inputcheckbox{vertical-align:middle;}<br />
body{font-family:tahoma;font-size:12px;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;测试文字x&lt;/label&gt;<br />
&lt;/html&gt;<br />
</code><br />
最终效果：</p>
<p><img title="06" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193821aar.jpg" alt="06" width="629" height="572" /></p>
<p>至此，多选框(checkbox)和提示文字对齐的问题已经解决，那么其他表单元素呢？试验了一下单选框(radio)，发现，还是有问题。文字提示依然是偏上。用firebug看了一下，发现radio元素默认有5px的左边距和3px的上、右边距，却没有下边距。如图：</p>
<p><img title="08" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193823f60.jpg" alt="08" width="629" height="170" /></p>
<p>于是，尝试去掉radio的外边距，刷新后显示正常。（其实多选框也是有外边距的，只是它的外边距四个方向都有，并且相等，所以对于垂直对齐没有影响。）下图是一些常用表单元素的最终显示效果以及最终代码，大家可以用不同浏览器看一下实际的效果（注：由于演示使用的12px的中文实际只有11px高，而IE下文本框等元素的高度是22px，一个是奇数，一个是偶数，所以这些部分在IE中是无论如何也对不齐的，差1px。如果手动控制文本框高度为奇数，或者将文字设置成为偶数的高度，则显示正常）：</p>
<p><img title="09" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193825ha1.jpg" alt="09" width="487" height="185" /><br />
<code><br />
&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″ /&gt;<br />
&lt;title&gt;测试vertical-align&lt;/title&gt;<br />
&lt;style&gt;<br />
*{margin:0;}<br />
label{vertical-align:middle}<br />
.inputcheckbox{vertical-align:middle;}<br />
body{font-family:tahoma;font-size:12px;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;测试文字x&lt;/label&gt;<br />
&lt;br/&gt;&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test2″ value=”2″ type=”radio”&gt;<br />
&lt;label&gt;测试文字x&lt;/label&gt;<br />
&lt;br/&gt;&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”Text1″ type=”text” /&gt;<br />
&lt;label&gt;文字&lt;/label&gt;<br />
&lt;input  class=”inputcheckbox ” name=”Text1″ type=”text” /&gt;<br />
&lt;label&gt;文字&lt;/label&gt;<br />
&lt;br/&gt;&lt;br/&gt;<br />
&lt;label&gt;测试文字&lt;/label&gt;<br />
&lt;input   class=”inputcheckbox ” name=”Button1″ type=”button” value=”按钮” /&gt;<br />
&lt;br/&gt;&lt;br/&gt;<br />
&lt;select class=”inputcheckbox ” name=”Select1″&gt;<br />
&lt;option&gt;测试文字&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;label&gt;测试文字&lt;/label&gt;<br />
&lt;/html&gt;<br />
</code><br />
而且我发现，不但解决了中文的问题，如果提示信息换成其他语言，基本上也能够对齐，至少不会像开始那样偏移太多。下面是截图、代码和一些例子：</p>
<p><img title="07" src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/193826HAz.jpg" alt="07" width="202" height="167" /><br />
<code><br />
&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″ /&gt;<br />
&lt;title&gt;测试vertical-align&lt;/title&gt;<br />
&lt;style&gt;<br />
label{vertical-align:middle}<br />
.inputcheckbox{vertical-align:middle;}<br />
body{font-family:tahoma;font-size:12px;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;测试文字x&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;這是繁體中文&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;次回から自動的にログイン&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;English&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;Чужой компьютер&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;صفحات من ‏السعودية &lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;회원가입&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;input class=”inputcheckbox ” name=”test” value=”1″ type=”checkbox”&gt;<br />
&lt;label&gt;הפתוח&lt;/label&gt;<br />
&lt;br/&gt;<br />
&lt;/html&gt;<br />
</code><br />
至此，我的研究过程高于段落。</p>
<p>但是，还是想不通各浏览器为什么最后会显示出这样的效果。牛人们有空可以解释一下吗？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/474.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IE bug:1像素的dotted/dashed边框</title>
		<link>http://www.iamued.com/qianduan/457.html</link>
		<comments>http://www.iamued.com/qianduan/457.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 10:47:15 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=457</guid>
		<description><![CDATA[最近的一个页面中碰到的，本来想用 border 来模拟设计图的虚线效果，但是很明显 border 效果不如设计图来的好看。顺便研究了下 dashed 和 dotted 的区别。 首先，从字面上来理解，dashed 和 dotted 都是指“虚线”，他们的不同在于： dashed：来自 dash（破折号），由 dash 组成的虚线 dotted：来自 dot （点），由 dot 组成的虚线，也称点线 这里多说几句废话，其实参看下 demo，就能从视觉上获得更直观的感受了。 下面再说说相关的 bug 吧，当然了，这些 bug 再一次只是光荣地出现在了 IE 下，此处涉及到 IE6 和 IE7。 Bug1: 在 IE6 下，1px 宽的 dotted 表现的和 dashed 一样。当宽度大于 1px 时，表现正常。 Bug2:在 IE7 下，当 4 条边的宽度是 1px 和 其它任意数值共存时，1px 的 dotted [...]]]></description>
			<content:encoded><![CDATA[<p>最近的一个页面中碰到的，本来想用 border 来模拟设计图的虚线效果，但是很明显 border 效果不如设计图来的好看。顺便研究了下 dashed 和 dotted 的区别。</p>
<p>首先，从字面上来理解，<strong>dashed</strong> 和 <strong>dotted </strong>都是指“虚线”，他们的不同在于：</p>
<p>dashed：来自 dash（破折号），由 dash 组成的虚线<br />
dotted：来自 dot （点），由 dot 组成的虚线，也称点线</p>
<p>这里多说几句废话，其实参看下 <a href="http://www.iamued.com/demo/091108/dotted.html" target="_blank"><strong>demo</strong></a>，就能从视觉上获得更直观的感受了。<br />
下面再说说相关的 bug 吧，当然了，这些 bug 再一次只是光荣地出现在了 IE 下，此处涉及到 IE6 和 IE7。<span id="more-457"></span></p>
<p>Bug1: 在 IE6 下，<strong>1px</strong> 宽的 dotted 表现的和 dashed 一样。当宽度大于 1px 时，表现正常。</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/184846RAa.jpg" border="0" alt="" width="440" height="326" /></p>
<p>Bug2:在 IE7 下，当 4 条边的宽度是 1px 和 其它任意数值共存时，1px 的 dotted 表现的和 dashed 一样。4 条边的宽度全为 1px，或者为其它不是 1px 的不同值时不会出现这个 bug。</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/184846Ygx.jpg" border="0" alt="" width="441" height="330" /></p>
<p>Bug3:另外，IE6 下，1px 的 dotted 或者 1px 的 dashed 边框，在拖动页面时，有时候边框会连成实线，有时候会出现缺口。</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/184850uYc.jpg" border="0" alt="" width="400" height="550" /></p>
<p>要解决这些 bug，要么直接就不用 dotted 而直接用 dashed；要么用图片代替；要么用额外标签和代码来解决。</p>
<p>鉴于只有在边框宽度为 1px 时才会出现这些 bug，可以设置外包围标签的边框宽度为 2px，通过增加一个内标签，设置其为 1px 的内容背景色边框，再通过设置 margin-top/right/bottom/left: -1px; 来盖掉外包围标签的 1px 边框，从视觉上实现正常效果。很啰嗦，很讨厌，很无奈。<br />
<code><br />
.b6 {<br />
border: 2px dotted #000;<br />
padding-top: 0;<br />
}<br />
.b6 .inner {<br />
border: 1px solid #9c9c9c;<br />
width: 100%;<br />
height: 100%;<br />
margin: -1px;<br />
position: relative;<br />
z-index: 100;<br />
}<br />
详情请参考 <a href="http://www.iamued.com/demo/091108/dotted.html" target="_blank">DEMO</a></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/457.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

