深圳室内环境治理 十一月 7th, 2011

1.深圳市格瑞卫康环保科技有限公司
http://www.green-welcome.com/
2.深圳市滟阳天环保科技有限公司
http://www.sz-yyt.com/ 
我们公司治理的是第1家,家里装修治理的是第2家。

Posted in N.房子 | Comments(0)»

Dropbox hosts IP 十月 21st, 2011

http://shhx2005.gotoip3.com/2011/01/02/dropbox.html

199.47.217.179 www.dropbox.com
174.129.218.39 dl.dropbox.com
50.17.206.117 dl-web.dropbox.com

---------------

 

174.36.30.67 dropbox.com

174.36.30.71 www.dropbox.com

75.101.129.115 dl.dropbox.com

75.101.159.151 dl-web.dropbox.com

174.36.30.67 forums.dropbox.com

 

------------------------------

208.43.202.50 dropbox.com
184.72.243.126 dl.dropbox.com
184.72.227.239 dl-web.dropbox.com
208.43.202.53 dropbox.com
50.16.186.123 dl.dropbox.com
50.16.193.114 dl-web.dropbox.com
208.43.202.53 dropbox.com
184.72.234.18 dl.dropbox.com
184.72.234.18 dl-web.dropbox.com
208.43.202.53 dropbox.com
184.72.245.128 dl.dropbox.com
184.72.236.250 dl-web.dropbox.com
----------------------------------------------
#dropbox
174.36.30.67 dropbox.com
174.36.30.71 www.dropbox.com
174.36.30.72 www.dropbox.com
174.36.30.73 www.dropbox.com
75.101.129.115 dl.dropbox.com
75.101.159.151 dl-web.dropbox.com
174.36.30.67 forums.dropbox.com
174.36.30.67 wiki.dropbox.com

Try https :-)

 
http://www.lizhenwen.com/w3c/727#plan-design

去年就想将IE的bug系统地整理下,但一直都很忙没有完成,看到这篇E文后,我毫不犹豫的放下了手中的工作将之翻译出来。
由于是第一次译文,所以错误在所难免,欢迎大家批评指正。

原文:Ultimate IE6 Cheatsheet: How To Fix 25+ Internet Explorer 6 Bugs

翻译:http://www.lizhenwen.com/w3c/727(译文对原文进行了补充)

对IE6最好的策略就是不去兼容它。

好吧,我知道你的难处,你不得不去兼容IE6这个狗血的浏览器,因此不得不在兼容IE6上花费很多时间。对此,我颇有同感,让我来帮助你吧。

我不会象许多文章那样让你去抵制IE6,这并不会帮助到你(迫不得已时)去兼容IE6;因为IE6依旧占有一定的市场份额,你无法放弃IE6。本文将帮助你来解决这个难题。

我查阅过很多资料来摘录这些解决方案(有些是我自己提供的),现在我做成手册提供给大家搞定IE6这个家伙。我尽可能的提供了最优解决方案而不是一些hacks,并且提供了一些相关的资料。如果你发现有更好的方法或者本文有错误,请联系我。

 

【目录】

〖策略〗

在讨论IE6的BUG及如何修复之前,有必要先讲一些策略去避免这些恼人的问题——正所谓防患于未然 。

〖对IE6单独兼容〗

兼容IE6的第一步就是单独对IE进行兼容,你针对IE6所写的代码只影响IE6。

〖图片〗

〖布局〗

解决IE6布局方面的BUG非常的恼人!特别是在实现一个精美的设计稿时。

〖列表〗

〖行为〗

ie6有着一些行为方面的BUG,究其原因是IE6版本太老了,不能完好地支持CSS2更不支持CSS3,而且微软固执的使用了其私有方法。

〖JavaScript〗

IE6有着数不尽的JavaScript bug,这里我不会讲解每一个IE6下JavaScript的bug,只摘取其中几个普遍的问题来讨论。

〖其他〗

〖相关资源〗

〖策略〗

在讨论IE6的BUG及如何修复之前,有必要讲叙一些策略去避免这些恼人的问题——正所谓防患于未然 。

目录 | 顶部

IE6 市场占有率

据Market Share统计,目前(2009年8月)IE6 的市场占有率为25.25%,但是其他地方的统计明显要低,为18.1%;尽管统计结果不同,但都呈现出了下降的趋势(翻译此文时,淘宝的IE6用户已从70%跌破至69%)。但是最重要的,还是你自己网站的统计数据。如果你对你的网站进行了流量分析,那么IE6的占有率是否值得你去针对IE6进行开发?这需要你自己去权衡。

如果你网站绝大部分访问者不使用IE6并且不付费给你,那么你不必特意区针对IE6做兼容,从而节省时间、精力及资金。

目录 | 顶部

做一个简洁的设计

在做设计的同时考虑代码的实现,可以避免一些布局上的问题。再复杂的设计稿也能用简洁的代码实现,如果你使用了过于繁冗的标签,那么你需要重新修缮设计稿。

如果你有丰富的开发经历,攻克过很多种布局难题,记录下你的解决方案,在以后碰到相同问题时可以提高开发效率。

目录 | 顶部

使用合适的文档申明(doctype)

使用一个错误的文档声明会触发quirks mode(怪异模式),正确的文档声明可以保证你的页面在所有浏览器下保持一致的效果。使用其中的一个文档申明:HTML 5HTML 4.01 StrictHTML 4.01 FramesetHTML 4.01 TransitionalXHTML 1.0 Strict,XHTML 1.0 FramesetXHTML 1.0 Transitional, or XHTML 1.1

HTML 5

html运行
<!DOCTYPE HTML>

HTML 4.01 Strict

html运行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 Frameset

html运行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

HTML 4.01 Transitional

html运行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

XHTML 1.0 Strict

html运行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XHTML 1.0 Frameset

html运行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.0 Transitional

html运行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML 1.1

html运行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

目录 | 顶部

验证你的代码

我曾听说过有些人认为校验代码没有任何实用价值,但我不这么认为。校验仅仅只需花费一点点时间,而且将受益于所有浏览器而非仅仅IE6;验证确保了向后兼容并且易于维护。至少也得验证XHTML!唯一可以忽略验证的情况是在你打算使用CSS3时。

你可以使用w3提供的工具验证XHTML/验证CSS

目录 | 顶部

先对标准浏览器进行兼容

在写代码的过程中,一开始在标准浏览器中测试(如 Firefox, Opera, Chrome等),然后再去测试非标准浏览器(如IE6/IE7),因为这些标准浏览器都遵循w3c标准,大多的处理方式都相同。你可以分开来单独去兼容“特别”的IE浏览器,这样做能规范你的代码,你将会因此拥有扎实的基础;而且如果你不再需要兼容这些非标准浏览器,你可以一次性删除这些修复兼容性代码。

目录 | 顶部

渐进增强(Progressive Enhancement)

渐进增强(Progressive Enhancement)是为了确保没有页面特效后基本功能也是可用的。简单来讲,渐进增强是指在确保页面在禁用JavaScript后能正常运作后,再对页面添加各种特效(JavaScript动画、Ajax异步等等)。我们同样可以运用“渐进增强”原则来使用CSS3(或者一些CSS2)、HTML5以及其他IE6所不支持的web规范。

某些情况下,是无法让所有用户在任何浏览器下都完全一模一样,特别是那些使用IE6的用户。运用渐进增强策略,可以保证让那些用户至少使用到你网站(或网络应用)的基本功能。

更多渐进增强的资料:

目录 | 顶部

使用自己的预设样式(CSS Reset)

每个浏览器都有各自不同的预设样式,在你的样式表之前使用预设样式(CSS Reset)可以避免在之后编写冗长的浏览器兼容样式。在网上有很多CSS Reset可供参考。

简单CSS Reset示例:

css 
body,div,ul,ol,li,h1,h2,h3,h4,h5,h6,form,fieldset,input,textarea,p,th,td {margin:0;padding:0;}

一些可供参考的CSS Resets:

目录 | 顶部

使用JavaScript框架

如果你的网站使用了较多的JavaScript特效,建议使用JavaScript框架。大部分的js框架都兼容了包括IE6在内的各种浏览器。可选的框架有很多,但一般能用一种框架实现的效果一定可以用另外一种框架实现,所以你可以根据个人喜好来选择合适的框架。

以下是一些常用的JavaScript框架:

强烈推荐实用MooTools,但如果你是入门者,还是建议使用jQuery。

目录 | 顶部

使用JavaScript模拟标准浏览器

现在有一些JavaScript来使IE模拟标准浏览器,如果你有较高比例的用户使用IE6并且开启了JavaScript,可以考虑使用Dean EdwardsIE7或者类似的脚本。

译者注:不建议使用这些脚本,因为这些“模拟”的实现往往会消耗大量的资源,IE本来就够烂了。

目录 | 顶部

如何在IE下调试页面

在IE下调试页面很麻烦,Firefox下的扩展程序FirebugWeb Developer Toolbar都是很好用的工具,如果你想在IE或其他浏览器上使用firebug,可以用Firebug Lite

在IE下有两种最好的调试方法:IE CollectionIETester,并且都是免费的(虽然有一点点缺陷)。IETester的开发者也提供了DebugBar这款IE插件免费供个人使用,但商业用户只可试用60天。

目录 | 顶部

〖对IE6单独兼容〗

兼容IE6的第一步就是单独对IE进行兼容,你针对IE6所写的代码只影响IE6;有几种方法可以区分开IE6:IE特有条件注释、CSS选择器、JavaScript,我们将逐一讨论。

目录 | 顶部

使用IE特有条件注释

微软给IE添加了条件注释以区分不同版本,任何东西都可以塞进条件注释里:标签、JavaScript、js文件、css、内联样式。可以使用条件注释来针对某一个IE浏览器版本来编写代码。

规则如下:(译注:可参考IE 特有注释(hack)

html运行
<p>这段文字会在所有浏览器显示</p>
<!--[if lte IE 6]>
<p>这段文字仅显示在 IE6及IE6以下版本。</p>
<p>This message will only appear in versions of Internet Explorer less than or equal to version 6.</p>
<![endif]-->
 
<!--[if gte IE 6]>
<p>这段文字仅显示在 IE6及IE6以上版本。</p>
<p>This message will only appear in versions of Internet Explorer greater than or equal to version 6.</p>
<![endif]-->
 
<!--[if gt IE 6]>
<p>这段文字仅显示在 IE6以上版本(不包含IE6)。</p>
<p>This message will only appear in versions of Internet Explorer greater than version 6.</p>
<![endif]-->
 
<!--[if IE 5.5]>
<p>这段文字仅显示在 IE5.5。</p>
<p>This message will only appear in Internet Explorer 5.5.</p>
<![endif]-->
 
<!--在 IE6及IE6以下版本中加载css-->
<!--[if lte IE 6]>
<link type="text/css" rel="stylesheet" href="css/ie6.css" />
<![endif]-->
 
<p>这段文字会在所有浏览器显示</p>

使用条件注释加载css的好处是这些样式是独立于其他css文件的,因此不会在编写兼容代码时弄得一团糟;而且当IE6的市场份额降低到不需要兼容时,可以快速的清理掉。

使用条件注释的唯一缺点是在IE浏览器下会增加额外的HTTP请求数,所以需要权衡是否这样做。但我不建议使用条件注释加载外部js文件,因为js文件会造成阻滞,在js未加载完之前其余文件都不会被加载;对于js请使用JavaScript程序来区分浏览器而非条件注释。

目录 | 顶部

使用CSS选择器区分开IE6

如果你不打算使用条件注释,CSS选择器是另外一个区分开IE6的办法,IE6不支持子选择器;先针对IE6使用常规申明CSS选择器,然后再用子选择器针对IE7+及其他浏览器。

示例:

html运行
<style type="text/css" >
/* IE6 专用 */
.content {color:red;}
/* 其他浏览器 */
div>p .content {color:blue;}
</style>
<div>
	<p class="header">Some Header Text Here</p>
</div>

这个方法的缺点是容易把样式表弄得一团糟,所以一定要写好注释说明。

在示例中,针对IE6写的样式在其他浏览器中也会执行,但(标准浏览器中)之后的子选择器覆盖了之前的申明,而IE6不支持子选择器所以忽略了它。

扩展阅读:

目录 | 顶部

使用JavaScript区分开IE6

如果你想要使用JavaScript区分开IE6,请看示例:

javascript
//原生JavaScript
if(typeof document.body.style.maxHeight === "undefined") {
	alert('IE6 Detected');
}
 
//MooTools(框架)
if (Browser.Engine.trident4) {
	alert('IE6 Detected');
}
 
//jQuery(框架)
if (($.browser.msie) &amp;&amp; ($.browser.version == "6.0")){
	alert('IE6 Detected');
}

扩展阅读:

目录 | 顶部

〖图片〗

目录 | 顶部

PNG半透明图片

有很多JavaScript解决方案来修复IE6使用PNG-24图片,但除了Twin Helix’s IE5.5+ PNG Alpha Fix都不支持CSS sprites。

另外一个办法是使用IE特有的滤镜,可阅读Aaron Baxter的博客或译者的《ie5+ PNG Fix》

JavaScript方式修复IE6 PNG

目录 | 顶部

IE6下的圆角

可以详细阅读CSS 圆角菜单

目录 | 顶部

背景闪烁问题

如果你给链接、按钮用CSS sprites作为背景,你可能会发现在IE6下会有背景图闪烁的现象。造成这个的原因是由于IE6没有将背景图缓存,每次触发hover的时候都会重新加载,可以用JavaScript设置IE6缓存这些图片:

javascript
	document.execCommand("BackgroundImageCache",false,true);

其他解决方法:

目录 | 顶部

〖布局〗

解决IE6布局方面的BUG非常的恼人!特别是在实现一个精美的设计稿时。

目录 | 顶部

理解 hasLayout

许多IE6下的Bug及渲染问题都可以归于微软的私有概念hasLayout。简要的说,在给元素定义具体的尺寸(如heightwidth)就会触发hasLayout,在IE6下缺失或触发hasLayout会导致一些bug。

扩展阅读:

IE6 盒模型

如果怪异模式(quirks mode)在IE6中启用,IE6将会使用微软旧版的盒模型:width是元素的实际宽度,内容宽度 = width – (margin-left + margin-right + padding-left + padding-right + border-left-width + border-right-width)。最好的办法是申明正确的文档类型以避免触发怪异模式,或者避免给有borderpadding的元素定义width属性。当然你也可以考虑使用条件注释。

扩展阅读:

目录 | 顶部

最小高度

IE6 不支持min-height属性,但它却认为height就是最小高度。感谢Dustin Diaz提供了一个很好的方法:使用!important,ie6会忽视它但其余浏览器不会。

注:IE6在同一个声明语句中(即一个综括号{})的属性定义,后面的总是会覆盖前面的,所以下例中后面的height覆盖掉了前面定义的important height

css
/* 所有浏览器 */
#container {min-height:200px; height:auto !important; height:200px;}

另一个方法是使用CSS 选择器:

css
/* 仅IE6 */
#container {min-height:200px; height:200px;}
 
/* 其他浏览器 */
html>body #container { height:auto;}

目录 | 顶部

最大高度

非常遗憾,在IE6下实现max-height只能使用IE特有滤镜,或者可以使用JavaScript实现。我个人更建议使用JavaScript来解决,因为IE滤镜会消耗大量资源甚至会使浏览器崩溃,而且禁用JavaScript后这两种方法都无法生效。

JavaScript

javascript
//直接使用ID来改变元素的最大高度
var container = document.getElementById('container');
container.style.height = (container.scrollHeight > 199) ? "200px" : "auto";
 
//写成函数来运行
function setMaxHeight(elementId, height){
	var container = document.getElementById(elementId);
	container.style.height = (container.scrollHeight > (height - 1)) ? height + "px" : "auto";
}
 
//函数示例
setMaxHeight('container1', 200);
setMaxHeight('container2', 500);

目录 | 顶部

100% 高度

在IE6下,如果要给元素定义100%高度,必须要明确定义它的父级元素的高度,如果你需要给元素定义满屏的高度,就得先给htmlbody定义height:100%;

css
/* 给child元素定义100%高度(IE6)*/
#parent {height:500px;}
#child {height:100%;}
 
/* 定义满屏高度(IE6)*/
html, body {height:100%;}
#fullLength {height:100%;}

目录 | 顶部

最小宽度

max-heightmax-width一样,IE6也不支持min-width。有2个方法实现最小宽度,使用额外的标签、使用JavaScript。

javascript
//直接使用ID来改变元素的最小宽度
var container = document.getElementById('container');
container.style.width = (container.clientWidth < width) ? "500px" : "auto";
 
//写成函数来运行
function setMinWidth(elementId, width){
	var container = document.getElementById(elementId);
	container.style.width = (container.clientWidth < width) ? width + "px" : "auto";
}
 
//函数示例
setMinWidth('container1', 200);
setMinWidth('container2', 500);

目录 | 顶部

最大宽度

只能使用JavaScript。

javascript
//直接使用ID来改变元素的最大宽度
var container = document.getElementById(elementId);
container.style.width = (container.clientWidth > (width - 1)) ? width + "px" : "auto";
 
//写成函数来运行
function setMaxWidth(elementId, width){
	var container = document.getElementById(elementId);
	container.style.width = (container.clientWidth > (width - 1)) ? width + "px" : "auto";
}
 
//函数示例
setMaxWidth('container1', 200);
setMaxWidth('container2', 500);

目录 | 顶部

双边距Bug

当元素浮动时,IE6会错误的把浮动方向的margin值双倍计算。Steve Clason给出了解决方法:给元素添加display:inline;

css
/*IE6下将产生双倍边距*/
.floatedEl {float:left; margin-left:100px;}
 
/*修正*/
.floatedEl {float:left; margin-left:100px; display:inline;}

目录 | 顶部

清除浮动

如果你想用div(或其他容器)包裹一个浮动的元素,你会发现必须给div(容器)定义明确的heightwidthoverflow之中一个属性(除了auto值)才能将浮动元素严实地包裹。

示例:

html运行
<div id="container">
<div id="floated1"></div>
<div id="floated2"></div>
</div>
css
#container {border:1px solid #333; overflow:auto; height:100%;}
#floated1 {float:left; height:300px; width:200px; background:#00F;}
#floated2 {float:right; height:400px; width:200px; background:#F0F;}

译者常用的方式:

css
#container {zoom:1;} /* ie浏览器 */
#container:after{content:"\0020";display:block;height:0;clear:both;} /*标准浏览器*/

扩展阅读:

目录 | 顶部

浮动层错位

当内容超出外包容器定义的宽度时会导致浮动层错位问题。在Firefox、IE7及其他标准浏览器里,超出的内容仅仅只是超出边缘;但在IE6中容器会忽视定义的width值,宽度会错误地随内容宽度增长而增长。如果在这个浮动元素之后还跟着一个浮动元素,那么就会导致错位问题。

浮动层错位问题在IE6下没有真正让人满意的解决方法,虽然可以使用overflow:hidden;overflow:scroll;来修正,但hidden容易导致其他一些问题,scroll会破坏设计;JavaScript也没法很好地解决这个问题。所以我的建议是一定要避免这个问题发生,使用一个固定的布局或者控制好内容的宽度。

扩展阅读

目录 | 顶部

躲猫猫bug

在IE6和IE7下,躲猫猫bug是一个非常恼人的问题。一个撑破了容器的浮动元素,如果在他之后有不浮动的内容,并且有一些定义了:hover的链接,当鼠标移到那些链接上时,在IE6下就会触发躲猫猫。

点此查看bug示例页

头大了吧!但别担心,well-documented提供了详细的解决方法。

不管为何会触发这个问题,解决方法很简单:

  1. 在(那个未浮动的)内容之后添加一个<span style="clear:both;"></span>
  2. 触发包含了这些链接的容器的hasLayout,一个简单的方法就是给其定义height:1%;

扩展阅读:

目录 | 顶部

绝对定位元素的1像素间距bug

IE6下的这个错误是由于进位处理误差造成(IE7已修复),当绝对定位元素的父元素高或宽为奇数时,bottomright会产生错误。唯一的解决办法就是给父元素定义明确的高宽值,但对于液态布局没有完美的解决方法。Paul O’Brien有关这个bug有一篇文章来讲解

扩展阅读:

目录 | 顶部

3像素间距bug

在IE6中,当文本(或无浮动元素)跟在一个浮动的元素之后,文本和这个浮动元素之间会多出3像素的间隔,Stu Nichols有一个非常好的解决方法

译注:可运行下面代码来查看作者提供的修复方法

html运行
<style type="text/css">
.container {width:750px; height:237px; margin:50px auto; background:url(http://www.cssplay.co.uk/ie/3pxbug/bug.jpg) no-repeat center top;}
.container #page1,.container #page2 {width:30%; margin:0 auto 0 auto; padding-top:80px;}
 
.container .topMid {overflow:hidden; height:15px; background: url(http://www.cssplay.co.uk/ie/3pxbug/topmid.png);}
.container .topLeft {overflow:hidden; width:20px; height:15px; float:left; background:url(http://www.cssplay.co.uk/ie/3pxbug/topleft.png);}
.container .topRight {overflow:hidden; width:25px; height:15px; float:right; background:url(http://www.cssplay.co.uk/ie/3pxbug/topright.png);}
 
.container .content {height:100px; margin-right:25px; background:#ccc;}
.container .content h2 {font-size:20px; height:80px; line-height:70px; text-align:center; margin:0;}
.container .midLeft {width:20px; height:100px; float:left; background: url(http://www.cssplay.co.uk/ie/3pxbug/midleft.png);}
.container .midRight {width:25px; height:100px; float:right; background: url(http://www.cssplay.co.uk/ie/3pxbug/midright.png);}
 
 
.container .bottomMid {overflow:hidden; height:20px; background: url(http://www.cssplay.co.uk/ie/3pxbug/bottommid.png);}
.container .bottomLeft {overflow:hidden; width:20px; height:20px; float:left; background:url(http://www.cssplay.co.uk/ie/3pxbug/bottomleft.png);}
.container .bottomRight {overflow:hidden; width:25px; height:20px; float:right; background:url(http://www.cssplay.co.uk/ie/3pxbug/bottomright.png);}
 
/* 给浮动层添加 display:inline 和 -3px 负值margin  */
 
.container #page2 .topLeft,
.container #page2 .midLeft,
.container #page2 .bottomLeft {display:inline;margin-right:-3px;}
.container #page2 .topRight,
.container #page2 .midRight,
.container #page2 .bottomRight {display:inline;margin-left:-3px;}
 
/*  给中间的内容层定义 margin-right 以纠正-3px */
 
* html #page2 .content {margin-right:22px;}
</style>
<div class="container">
	<div id="page1">
		<div class="topLeft"></div>
		<div class="topRight"></div>
		<div class="topMid"></div>
		<div class="midLeft"></div>
		<div class="midRight"></div>
		<div class="content">
			<h2>〖3px Bug〗</h2>
		</div>
		<div class="bottomLeft"></div>
		<div class="bottomRight"></div>
		<div class="bottomMid"></div>
	</div>
</div>
 
<div class="container">
	<div id="page2">
		<div class="topLeft"></div>
		<div class="topRight"></div>
		<div class="topMid"></div>
		<div class="midLeft"></div>
		<div class="midRight"></div>
		<div class="content">
			<h2>〖3px Bug 已修正!〗</h2>
		</div>
		<div class="bottomLeft"></div>
		<div class="bottomRight"></div>
		<div class="bottomMid"></div>
	</div>
</div>

目录 | 顶部

IE下z-index的bug

在IE浏览器中,定位元素的z-index层级是相对于各自的父级容器,所以会导致z-index出现错误的表现。解决方法是给其父级元素定义z-index,有些情况下还需要定义position:relative

扩展阅读:

目录 | 顶部

Overflow Bug

在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素,如下例:

html运行
<style type="text/css" >
.wrap {overflow:hidden;width:100px;height:100px;background:#336600;border:solid #666600 5px;}
.child {position:relative;width:50px;height:200px;background:#99CC00;}
</style>
<div class="wrap">
	<div class="child">
	</div>
</div>

解决方法就是给外包容器.wrap加上position:relative;

目录 | 顶部

〖列表问题〗

最为特别的IE许多bug都会影响到列表,这里例举了一些示例。

目录 | 顶部

横向列表宽度bug

如果你使用float:left;<li>横向摆列,并且<li>内包含的<a>(或其他)触发了hasLayout,在IE6下就会有错误的表现:

html运行
<style type="text/css" >
#menu li {
	float:left;
	list-style:none;
	background:#CCCCFF;
}
#menu li a {
	padding:0 10px;
	display:block;
	height:20px;	/* 触发了hasLayout */
}
</style>
<ul id="menu">
	<li><a href="#" title="">Menu Item #1</a></li>
	<li><a href="#" title="">Menu Item #2</a></li>
	<li><a href="#" title="">Menu Item #3</a></li>
</ul>

解决方法很简单,只需要给<a>定义同样的float:left;即可。

目录 | 顶部

列表阶梯bug

bug示例:

html运行
<style type="text/css" >
ul {
    clear: both;
    list-style: none;
}
a {
    display: block;
    float: left;
    background: #99CCFF;
}
#two a {
    font-size: 1.1em;
}
</style>
<ul>
	<li><a href="#">One</a></li>
	<li><a href="#">Two</a></li>
	<li><a href="#">Three</a></li>
</ul>
<ul id="two">
	<li><a href="#">One</a></li>
	<li><a href="#">Two</a></li>
	<li><a href="#">Three</a></li>
</ul>

列表阶梯bug通常会在给<li>的子元素<a>使用float:left;时触发,我们本意是要做一个横向的列表(通常是导航栏),但IE却可能呈现出垂直的或者阶梯状。

解决办法就是给<li>定义float:left;而非子元素<a>,或者给<li>定义display:inline;也可以解决。

目录 | 顶部

垂直列表间隙bug

当我们使用<li>包含一个块级子元素时,IE6(IE7也有可能)会错误地给每条列表元素(<li>)之间添加空隙;解决这个问题的方法有很多,看示例:

BUG代码:

html运行
<style type="text/css" >
ul {margin:0; padding:0; list-style:none;}
li a {display:block; background:#ddd;}
</style>
<ul>
	<li><a href="#">Item 1</a></li>
	<li><a href="#">Item 2</a></li>
	<li><a href="#">Item 3</a></li>
</ul>

解决方法:

Jon Hicks<a>flaot并且清除float来解决这个问题:

css
ul {margin:0; padding:0; list-style:none;}
li a {display:block; padding:0.5em; background:#ddd; float:left; clear:left;}

另外一个办法就是触发<a>hasLayout(如定义高宽、使用zoom:1;

css
ul {margin:0; padding:0; list-style:none;}
li a {display:block; padding:0.5em; background:#ddd; zoom:1;}
/* height:1%; 也有同样的作用 */

也可以给<li>定义display:inline;来解决此问题。

另外还有一个极有趣的方法,给<a>包含的文本末尾添加一个空格:

html运行
<ul>
	<li><a href="#">Item 1 </a></li>
	<li><a href="#">Item 2 </a></li>
	<li><a href="#">Item 3 </a></li>
</ul>

扩展阅读:

目录 | 顶部

〖行为〗

ie6有着一些行为方面的BUG,究其原因是IE6版本太老了,不能完好地支持CSS2更不支持CSS3,而且微软固执的使用了其私有方法。

目录 | 顶部

IE6中的:hover

在IE6中,除了<a>(需要有href属性)才能触发:hover行为,这妨碍了我们实现许多鼠标触碰效果,但还是有一些法子是可以解决它的。

最好是不要用:hover来实现重要的功能,仅仅只用它来强化效果。

许多修复IE6 hover的方法都是使用微软提供的私有方法behavior或者JavaScript,通常使用JavaScript框架或者IE6修复类js。

目录 | 顶部

在IE浏览其中使用Canvas标签

canvas是HTML5新引入的元素,提供了通过 JavaScript 绘制图形的方法,此方法使用简单但功能强大。

所有IE浏览器都不支持HTML5中的canvas标签,而是使用它微软私有的VML,但是可以通过JavaScript来使canvas在IE下生效。

修复canvas的一些JavaScript:

目录 | 顶部

IE6调整窗口大小的 Bug

当把body居中放置,改变IE浏览器大小的时候,任何在body里面的相对定位元素都会固定不动了。Emil Stenström发现了IE6 Resize Bug并提供了解决办法:给body定义position:relative;就行了,够简单吧!~

目录 | 顶部

〖JavaScript〗

IE6有着数不尽的JavaScript bug,这里我不会讲解每一个IE6下JavaScript的bug,只摘取其中几个普遍的问题来讨论。

目录 | 顶部

Error: Expected Identifier, String, Or Number

IE浏览器不容许不良的JavaScript书写,如果在数组或者Hash对象的末尾有逗号就会引发异常“Expected Identifier, String, Or Number”,其他浏览器允许这样做,但在书写时注意删除末尾的逗号以避免这个错误。

 

目录 | 顶部

IE中JavaScript内存泄露

由于IE浏览器使用其自己的内存管理,当JavaScript使用的内存没有被回收时就会引发内存泄露。可阅读《JScript的内存泄漏》《Finally, the alternative fix for IE6’s memory leak is available》

目录 | 顶部

〖其他〗

IE6中一些其他bug

目录 | 顶部

文本重复Bug

在IE6中,一些隐藏的元素(如注释、display:none;的元素)被包含在一个浮动元素里,就有可能引发文本重复bug:

html运行
<style type="text/css" >
.demobox {
	width: 250px;
	border: 3px solid #4c6f42;
}
.firstfloat {
	float: left;
	background: #939a90;
}
.secondfloat {
	float: left;
	width: 250px;
	margin-bottom: 2px;
	background: #fbdabb;
}
</style>
<!-- Begin live demo -->
<div class="demobox">
	<div class="firstfloat">第一个浮动层</div>
	<!-- comment --> <!-- comment --> <!-- comment --> <!-- comment --> <!-- comment -->
	<div class="secondfloat">
		第二个浮动层<br />
		<span style="background: #f2ab82;">aa这段文字会被重复。。。这段文字会被重复。。。这段文字会被重复。。。这段文字会被重复。。。这段文字会被重复。。。</span>
	</div>
	<div style="clear: both; background: #b2d4af;">清除浮动层</div>
</div>
<!-- end live demo -->

Position Is Everything详细讲解了这个问题,但解决办法很简单:给浮动元素添加display:inline;

css
.firstfloat {display:inline;}

目录 | 顶部

IE的收藏夹图标(Favicons)

收藏夹图标会以16×16像素大小显示在你的收藏夹里,有两种方法来显示收藏夹图标:

  1. 把一张图片命名为favicon.ico并放置在网站的根目录,IE及其他浏览区都会自动设置该文件为收藏夹图标;
  2. <head>区域声明: 
    <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />

需要注意的是收藏夹图标会被一直缓存,除非你清除浏览器的缓存,才会更新新的图标;如果你想要浏览者自动更新收藏夹图标,请给favicon.ico设置expires。

扩展阅读:

目录 | 顶部

IE6的GZip

服务器端使用GZip压缩了的文件,在某些版本的IE6(特别是未更新XP sp2的)中会有一些问题。所幸的是Seb Duggan找到了IE6 GZip bug解决方法,在Apache中使用ISAPI_Rewrite

Seb提供的方法是在 ISAPI_Rewrite 安装目录下的httpd.conf中加入以下代码:

html运行
RewriteEngine on
 
RewriteCond %{HTTP:User-Agent} MSIE [56]
RewriteCond %{HTTP:User-Agent} !SV1
RewriteCond %{REQUEST_URI} .(css|js)$
RewriteHeader Accept-Encoding: .* $1

目录 | 顶部

〖相关资源〗

修订历史:
2010-02-04 修正最小高度部分important的说明;

相关阅读

  1. 小技巧:带分隔线左右布局的实现
  2. 合理隐藏文字
  3. 固宽背景图居中错位的问题
  4. HTML默认样式
  5. 纯CSS的图片展示效果

 

环境: ie6 (window sp3) ie7,8,9 firefox3.6, chrome10,opera 10.62 (window7)

本文先列举出几种常见的字体的显示问题以及优点,然后再列举几个web字体的最佳实践,一一作一分析。

1) Tahoma&& Arial字体比较

(1)字体下划线问题:Tahoma在ie6下的li元素里面显示很好,其他的所有浏览器中,下划线都会粘连中文文字,英文问题没有粘连;但是Arial字体除了ie6,firefox3.6 ,其他浏览器都是下划线粘贴着文字。

(2)13px中文问题:ie6 和firefox3.6 显示很难看,用的是14号字体,其他浏览器都用12px字体显示的(Arial字体比Tahoma字体好看点);

(3) 中英文混排问题:同一行中出现了中文和英文,如果设置了vertical-align属性,会出现高低不齐的现象。ie7出现了错位。zoom:1可以解决一部分问题。

(4)设置Tahoma字体后可以使表单元素和label对齐(比如radio,check ,text,select和相应的文本对齐,同时设置两者 vertical-align:middle )

2)宋体的问题(又名SimSun),unicode 编码 \5b8b\4f53

(1) Opera 下,只认 "宋体", 不认 SimSun

eg:font: 12px arial; 此时,Opera 默认中文字体就是宋体,font: 12px sans-serif; 此时,Opera 默认中文字体就是宋体。
font: 12px tahoma,arial,simsun,sans-serif; 对于'宋体'来说,如果后面已经没有中文字体,用 simsun 还是 ok 的。

3)helvetica的问题

(1)找不到字体的时候,使用默认字体。

(2)如果用 font: 12px helvetica2,tahoma; 定义字体时,会调用排在第二的 tahoma.

(3) font: 12px xxx,tahoma; 一切正常

4)关于行高

(1)font: 12px/1 \5b8b\4f53; 行高为 1 时,IE6-7 下,高度不够时,会导致中文上下显示不全。

(2)font: 12px/1.5 \5b8b\4f53; 行高为 1.5 时,一切正常。 文章中推荐使用1.5

 5)中文编码对字体的影响

(1)如果没有设置宋体,在非中文操作系统中很难看。

(2)可以通过不设置sans-serif 来避免上面的问题。

6)关于sans-serif字体

就是无衬线字体,是一种通用字体族。

常见的无衬线字体有 Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。
font-family最后加上sans-serif,也是为了保证能够调用这个字体族里面的字体,因为大多数计算机里都有这种字体。

 7)字体继承方面:在IE里,所有的表单元素都不继承body的字体属性,需要单独设置 。

 总结:

方案一:body {font-family: Arial, sans-serif; }该方案能解决在ie6下的问题,但是该方案对表单对齐没有优势。

方案二:body {font-family: Tahoma, sans-serif; } 该方案不能很好的解决在ie6下的下划线问题,此外在ie6下对于13px的字体也不能很好的支持。

方案三: body {font: 12px/1.5 tahoma, arial, simsun, sans-serif;} 比较tahoma 和arial字体,arial在ie6下使用较少。顾推荐。

方案四:body {font: 12px/1.5 tahoma, arial, \5b8b\4f53;} 使用unicode字符,支持各种格式。

此外不使用sans-serif,在非中文操作系统的不会出现很难看。推荐方案四

 

人,应当是自由的 九月 30th, 2011

“人,应当是自由的。它可以自由的劳动创造,也可以自由的思想,但任何人的自由都不应妨碍别人。

        对鸣放运动的感想

        1、不放则不鸣,放则鸣,表示人们的思想已到僵化程度,思想言论被控制了,这真是对思想言论自由的莫在嘲笑。

        2、不少人由于思想僵化脑筋不灵活或由于文化知识水平有限,对事物真相缺乏了解,往往逐流,得过且过,这对于国家民族都是很危险的,我们应急不及待的提高人民的文化小平,增进知识,允许人们思想自由鼓励独立思考是解决社会矛盾的基本办法:

        3、思想问题不能用行政命令也不能只靠群众运动解决的,借助于命令或群众运动,都不是充分依靠群众的表现,只能说是领导缺乏自信与无能,和不负责任。

        4、人非机器也,所以想控制人是做不到的事,要想控制人的思想理更是荒唐,思想是存在于人脑的反映,要解决思想问题应从存在及各人的具体情况着手,企图用暴力控制别人的思想是行不通的,这种所谓控制思想,不如去摧毁作为存在的物质世界和砍掉产生思想的脑袋好了。”

 

“干部太多,这不但支付了不少财富,而且由于机构庞大,重重迭迭,妨碍生产”

 

 

----- 1957 华中师范学院 封章谏

[zt] On having layout 九月 6th, 2011

A lot of Internet Explorer's rendering inconsistencies can be fixed by giving an element “layout.” John Gallant and Holly Bergevin classified these inconsistencies as “dimensional bugs,” meaning that they can often be solved by applying a width or height. This leads to a question of why “layout” can change the rendering of and the relationships between elements. The question, albeit a good one, is hard to answer. In this article, the authors focus on some aspects of this complicated matter. For more thorough discussions and examples, please refer to the links provided.

    <!--[if lt IE 7]><style>
    /* style for IE6 + IE5.5 + IE5.0 */
    .gainlayout { height: 0; }
    </style><![endif]-->
     
    <!--[if IE 7]><style>
    .gainlayout { zoom: 1; }
    </style><![endif]-->

http://www.satzansatz.de/cssd/onhavinglayout.html

6月9日,为了纪念美国电吉他之父莱斯·保罗(Les Paul)诞辰96周年, 今天谷歌的Doodle变身成为一把抽象的吉他,拨动上面的琴弦、键盘,就可以弹奏出相应的音乐。

http://www.google.com.hk/webhp?hl=zh-CN

永久有效网址 http://www.google.com/logos/2011/lespaul.html

麦盾的播放代码:(打开以上网址之后,在地址栏输入以下代码,回车即可播放。可修改最后的""引号内的内容)

javascript:void((function(d,t){var xa={49:2,50:6,51:3,52:0,53:7,54:1,55:8,56:4,57:9,48:5,81:2,87:6, 69:3,82:0,84:7,89:1,85:8,73:4,79:9,80:5,65:2,83:6,68:3,70:0,71:7,72:1,74:8,75:4,76:9,186:5,90:2, 88:6,67:3,86:0,66:7,78:1,77:8,188:4,190:9,191:5},ks={0:[0.67,0.25],1:[0.2,0.9],2:[0.67,0.24],3:[0.8,0.12],4:[0.2,0.9],5:[1,0.12],6:[0.6,0.8],7:[0.6,0.2],8:[0.7,0.8],9:[0.9,0.16]},p;function m(y,a,b){if(!p){var w=window.frames['doodle-sound'],d=(w.contentWindow||w).document;p=d.getElementById('guitar11-sound-player-2')}p&&p.playTrack('guitar-'+(y<10?'0':'')+y,y,0.4+(0.6-0.4)*a,-0.8+1.6*b)};var dx=/\d/,k=0;d=d.split('');(function(){v=d[k++];var c;if(v){if(dx.test(v)){m(v,ks[v]&&ks[v][0]||1.0,ks[v]&&ks[v][1]||1.0)}else{c=v.charCodeAt(0)-32,x=xa[c],x&&m(x,ks[x]&&ks[x][0]||1.0,ks[x]&&ks[x][1]||1.0)};window.mindon=m;setTimeout(arguments.callee, t|400)}})();})("3686 3675 53686565326553 36886 89865 3685326656"))

 

Les Paul 生平:  
原名 Lester William Polsfuss 的「電吉他之父 」Les Paul,1915年6月9日生于美國威斯康星州的 Waukesha。從13歲開始,Les Pau l就開始作為一名 Honky-tonk 吉他手公開演奏。17歲那年,Les Pau l從中學退學,開始在聖路易斯的 Sunny Joe Wolverton's Radio Band中演奏。Les Paul最早的錄音從1936年開始,當年他參與了鄉村組合 Rhubarb Red 和布魯斯歌手 Georgia White 的唱片錄制。此後,Paul 開始轉向了爵士樂,在他20歲出頭的時候組建了一支三重奏樂隊。1938年,Les Paul 搬到了紐約,從此他開始與 Fred Waring 的 Pennsylvanian s樂隊合作,每周在國家電台演出。


「Eddie Lang 和 Django Reinhardt 是真正影響我的音樂人,」Les Paul 在2005年接受採訪時說。「他們倆都像是世界以外的人,我非常的崇拜他們,崇拜這個詞甚至不能表達我對他們的感情,遠比崇拜要深.……他們已經超越了我的信仰。」1943年,Les Paul 來到了好萊塢,在那裡他遇到了 Bing Crosby,兩人合作錄制了1945年的那首熱門單曲《It's Been a Long, Long Time》。此後,Paul 與藝名叫做『Mary Ford』的妻子 Colleen Summers 合作錄制的一些唱片也都獲得了成功。在 Capitol Records 期間,他們合作推出了多首大受歡迎的單曲,其中包括《Mockin' Bird Hill》、《How High the Moon》、《Vaya Con Dios》和《Hummingbird》。1964年,Les Paul 與 Mary Ford 離婚,兩人的這段合作就此宣告結束。離婚之後的 Les Pau l一直處於半退休狀態,直到八十年代末,他才宣告復出,開始了有規律的演出。
 

在2009年8月13日(美國時間),Les Paul 由於肺炎所引起的併發症在紐約的White Plains醫院去世,享年94歲。
 

相對於在音樂方面的成就,Les Paul對於電吉他的發展和錄音技術的研究與貢獻更被大家所稱道。在上世紀30年代末,Les Pau l開始實驗使用雙拾音器。後來,他發明了最早的實心電吉他。五十年代初,Les Paul 開始于吉布森(Gibson)吉他合作。1952年,Les Paul Goldtop吉他正式推出。經過多次不同的試驗之後,Gibson 終於在1958年推出了 Les Paul 標準版吉他,據稱,Les Paul 吉他至今仍保留著50年前的設計。
 

「為了証明他的電聲理論,他自學了演奏吉他,」滾石樂隊(The Rolling Stones)的吉他手 Keith Richards 說。「後來我們這些所有的吉他演奏者都受益于他的工作和天分。」
 

Les Paul 吉他被無數音樂人使用和熱愛,史密斯飛船樂隊(Aerosmith)的吉他手 Joe Perry 說:「它(Les Paul)彈起來真是太舒服了,這就是為什麼無論是那些硬搖滾樂手還是鄉村樂手都愛使用這種吉他的原因。」
 

除了對電吉他的發展做出的貢獻之外,Les Paul 對於多軌錄音技術的革新也為流行音樂日後的發展起到了至關重要的作用。「如果沒有他,我們今天聽到的音樂就不可能是現在這個樣子。」著名音樂製作人 Rob Cavallo說。「如果我們沒有現在的多軌錄音技術,我們怎麼能聽到一個歌手在他自己聲音的伴唱下演唱?又怎麼能聽到主音吉他與節奏吉他的合奏?」

適合糖尿病人的湯水 四月 27th, 2011

適合糖尿病人的湯水

 

(一) 湯

材料 ﹕淮山一兩 北芪八錢 有心茯神一兩 巴戟一兩 所陽五錢 制茨實兩半

杜仲五錢 蓮子一兩 百合一兩

製法 ﹕(一)全部材料洗淨後放在凍水中。(二)水沸後慢火煲二小時。

可供二至四人飲用

功效:降血糖及降血壓,藥性溫和,不分寒熱,非糖尿病人亦可飲用。

 

(二) 日常飲用

材料 ﹕苦瓜二條 油柑子二兩 雲苓皮一兩 淮山八錢 巴戟一兩 粟米鬚一兩

製法 ﹕(一)苦瓜洗淨後,連皮和核切成中段,油柑子切開。(二)全部材料洗淨後放在凍水中。(三)水沸後慢火煲一小時。

可供二至四人飲用

功效:降血糖,不分寒熱,非糖尿病人亦可飲用。

註(1)病人飲用前應請教自己的家庭醫生

  (2)喜歡喝中國茶的糖尿病人仕,最好選擇普洱茶葉。

 

编写原则:
1、全局规则之一,不要写<style>标签、不要写class,所有CSS都用style属性,什么元素需要什么样式就用style写内联的CSS。
2、全局规则之二,少用图片,邮箱不会过滤你的img标签,但是系统往往会默认不载入陌生来信的图片,如果用了很多图片的邮件,在片没有载入的情况下,丑陋无比甚至看不清内容,没耐心的用户直接就删除了。图片上务必加上alt。
3、不要在style里面写float、position这些style,因为会被过滤。那么如何实现左右布局或者更复杂的布局呢?用table。
4、style内容里面background可以设置color,但是img会被过滤,就是说不能通过CSS来设置背景图片了。但是有一个很有意思的元素属性,也叫background,里面可以定义一个图片路径,这是个不错的替代方案,虽然这样功能有限,比如无法定位背景图片了,有总比没有好。例如要给一个单元格加一个背景,必须这样写:
<td background=”http://image1.koubei.com/images/common/logo_koubei.gif”></td>
5、div模式的邮箱不支持flash,iframe模式的有待验证。

最后提一句,sohu的邮箱很怪异,会在每个文本段后面加一个空格,导致原本正常的排版一行放不下而换行,从而使某些布局错乱。所以,如果你要兼容sohu邮箱的话,遇到一些紧凑的布局就要格外小心了,尽量减少文本段的数量,留足宽度。

 

 

邮件模板,请严格按照下面的规则执行。邮件客户端和Web页面的需求不同,在编写代码的时候,考虑的方向也不一样。 

!Doctype声明 

为了向前兼容和避免某些浏览器的怪癖,使用html5的!doctype声明,格式如下: 

<!DOCTYPE HTML> 

原则,及思维出发点 

1. 不需要考虑DOM节点的精简和结构的优化。 

以完成设计样式为最优先。必要时,不必吝啬使用表格嵌套,不必吝啬使用空的表格元素来占据空间。 

2. 宁可冗余,也不可缺少必要定义。 

3. 充分利用表格的私有属性来布局。width, height, bgcolor, background, align, valign等 

4. 可替代性: 

在编写html的时候,请思考当你页面的所有图片都被屏蔽时,是否用户还能了解页面的主要内容。 

请务必在所有要设置背景图片的元素上,定义背景颜色。 

5. 可利用Dreamweaver等工具来协助编写html,但切记,一定要时候做好每行代码的检查。 

Mackup 

1. 主体页面,包括细节处理,尽量使用<table>布局。 

2. 不允许在<tr>元素上定义CSS样式,请将样式尽量定义在<td>元素上。(Gmail等邮件客户端会过滤<tr>上的属性) 

3. 禁止使用<style type=”text/css”>来处理主要样式,所有的Web邮件系统都会过滤该标签。因此邮件模板中不能使用伪类(pseudo class)和伪元素(pseudo elements),以及高级选择符。 

但是, 

我们仍然可以使用<style>来提升一些比较先进的邮件PC客户端的体验,比如伪类。 

但,必须使用表格和元素样式来完成所有基本样式和布局。 

4. 禁止使用<link>来加载外联CSS 

5. 可以使用<div>来实现细节的,具有典型块级元素(block)的布局样式。而尽量避免使用<p>,因为我们不容易清除<p>在不同浏览器的默认样式 

6. 注意定义图片的替换文字(alt),及替换文字的颜色。 

样式 

1. 文字的处理。 

font-* 族的CSS属性不允许使用缩写,请分别定义 font-size, font-weight, line-height, font-family(font-family有可能被过滤) 

2. 继承性 

注意表格不会继承外部的font等属性,请务必,在每个<td>元素上都定义字体属性和颜色。 

3. 背景的处理 

不允许使用style=”background:url(http://…)”,请使用<td>的属性(attribute) background=“http://…”。(由于CSS背景图片是一种会影响页面渲染速度的定义,因此大多数Web邮件系统会过滤它。) 

背景颜色,也请使用表格的bgcolor属性。 

4. 对于复杂样式的处理,可以大胆地、大块地切图。 

5. 避免尝试让两个table-cell的元素对齐,如果, 一个元素是用具体的宽度定义(width=”100″),另一个元素是用百分比来定位( width=”50%”) 

6. 避免使用list-style来处理列表样式,请使用 “ &#8226; ” 字符来替代。 

7. 避免使用<img>元素拼接的方式,来实现背景大图的分割,尽量使用表格的background 

我们知道,在<img>元素下4px空白的问题。 

禁用的,和不建议使用的CSS样式(见参考文献1) 

这些样式,大都是可能引起元素偏移到容器外的样式 

禁止使用 position, background, float 

特别说明: 

margin: margin的使用要非常谨慎,不允许使用margin作为重要的布局依据,不允许使用负margin,避免使用非零和非auto的margin属性。 

图片版本控制(点评网业务需求) 

如果邮件模板中的图片,使用 CDN 网络地址——如 http://i3.dpfile.com/…/abc.png——那么,更新这张图片的时候,请联系DBA(数据库工程师)刷新该图片的版本号。 

并且,在新的邮件模板中,将该图片的版本号加1,比如: 

将 http://i1.dpfile.com/…/edm/top.png 更新为 http://i1.dpfile.com/…/edm/top.v1.png 

将 http://i1.dpfile.com/…/edm/bot.v12.png 更新为 http://i1.dpfile.com/…/edm/top.v13.png 

常见问题 

1. 如何让邮件在Gmail等Web页面中居中 

有几种方式: 

a> 在 body上定义style=”width:apx; margin:auto”。注意,在Web邮件中,会自动为你生成一个<div style=”width:apx; margin:auto”> 的元素在最外层。(可以有效利用这一特性,定义背景颜色等样式,和实现其他可能的事情) 

而不要尝试自己在邮件模板最外层添加一个带有margin:auto的<div>元素。 

b> 使用<center> 

2. 如何在邮件的布局中占据空白 

请使用空白的<td>元素,设置height属性来起到站位的作用。 

 

http://user.qzone.qq.com/21195254/blog/1296205414