??xml version="1.0" encoding="utf-8" standalone="yes"?>
使用~写可以帮助减少你CSS文g的大,更加Ҏ阅读。css~写的主要规则如下:
16q制的色彩|如果每两位的值相同,可以~写一半,例如Q?br> #000000可以~写?000;#336699可以~写?369;
通常有下面四U书写方?
方便的记忆方法是时针,上右下左。具体应用在margin和padding的例子如下:
margin:1em 0 2em 0.5em;
Ҏ的属性如下:
可以~写Z句:border:1px solid #000;
语法?span class="code">border:width style color;
背景的属性如下:
可以~写Z句:background:#f00 url(background.gif) no-repeat fixed 0 0;
语法?span class="code">background:color image repeat attachment position;
你可以省略其中一个或多个属性|如果省略Q该属性值将用浏览器默认|默认gؓQ?/p>
字体的属性如下:
可以~写Z句:font:italic small-caps bold 1em/140% "Lucida Grande",sans-serif;
注意Q如果你~写字体定义Q至要定义font-size和font-family两个倹{?/p>
取消默认的圆点和序号可以q样写list-style:none;,
list的属性如?
可以~写Z句:list-style:square inside url(image.gif);
最q?l常有朋友问我一些工作中遇到的CSS问题。他们L不能很好的控制CSSQ媄响CSS的效率发挥。我来分析ȝ一下错误所在,帮助大家更加Ҏ使用CSS?/p>
本文ȝ了我开始用CSS布局Ҏ以来所有的技巧和兼容ҎQ我愿意把这些与你分享,我会重点解释一些新手容易犯的错?包括我自׃犯过?Q如果你已经是CSS高手Q这些经验技巧可能已l都知道Q如果你有更多的Q希望可以帮我补充?/p>
使用~写可以帮助减少你CSS文g的大,更加Ҏ阅读。css~写的主要规则请参看?a target="new">常用css~写语法ȝ》,q里׃展开描述?/p>
? 记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width="100"Q但是在CSS中,你必ȝ一个准的单位Q比如:width: 100px width:100em。只有两个例外情况可以不定义单位Q行高和0倹{除此以外,其他值都必须紧跟单位Q注意,不要在数值和单位之间加空根{?/p>
当在XHTML中用CSSQCSS里定义的元素名称是区分大写的。ؓ了避免这U错误,我徏议所有的定义名称都采用小写?/p>
class和id的值在HTML和XHTML中也是区分大写的,如果你一定要大小写合写Q请仔细认你在CSS的定义和XHTML里的标签是一致的?/p>
当你写给一个元素定义class或者idQ你可以省略前面的元素限定,因ؓID在一个页面里是唯一的,而clas s可以在页面中多次使用。你限定某个元素毫无意义。例如:
div#content { /* declarations */ }可以写成
#content { /* declarations */ }q样可以节省一些字节?/p>
通常padding的默认gؓ0Qbackground-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突Q可以在样式表一开始就先定义所有元素的margin和padding值都?Q象q样Q?/p>
* {
margin:0;
padding:0;
}
CSS中,子元素自动承父元素的属性|象颜艌Ӏ字体等Q已l在父元素中定义q的Q在子元素中可以直接l承Q不需要重复定义。但是要注意Q浏览器可能用一些默认D盖你的定义?/p>
如果对同一个元素的定义有多U,以最接近(最一U?的定义ؓ最优先Q例如有q么一D代?/p>
Update: Lorem ipsum dolor set
在CSS文g中,你已l定义了元素pQ又定义了一个class"update"
p {q两个定义中Qclass="update"被使用Q因为class比p更近。你可以查阅W3C的?Calculating a selector’s specificity?了解更多?/p>
一个标{֏以同时定义多个class。例如:我们先定义两个样式,W一个样式背景ؓ#666Q第二个样式?0 px的边框?/p>
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在页面代码中Q我们可以这栯?/p>
q样最l的昄效果是这个div既有#666的背景,也有10px的边框。是的,q样做是可以的,你可以尝试一下?/p>
CSS初学者不知道使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这D代码:
q段代码的CSS定义是:
div#subnav ul { /* Some styling */ }你可以用下面的方法替代上面的代码
样式定义是:
#subnav { /* Some styling */ }用子选择器可以你的代码和CSS更加z、更加容易阅诅R?/p>
Z节省字节Q我不要l背景图片\径加引号Q因为引号不是必ȝ。例如:
background:url("images/***.gif") #333;可以写ؓ
background:url(images/***.gif) #333;如果你加了引P反而会引v一些浏览器的错误?/p>
当一些元素类型、class或者id都有共同的一些属性,你就可以使用l选择器来避免多次的重复定义。这可以节省不少字节?
例如Q定义所有标题的字体、颜色和marginQ你可以q样写:
h1,h2,h3,h4,h5,h6 {如果在用时Q有个别元素需要定义独立样式,你可以再加上新的定义Q可以覆盖老的定义Q例如:
h1 { font-size:2em; }? 你用CSS来定义链接的多个状态样式时Q要注意它们书写的顺序,正确的顺序是Q?link :visited :hover :active。抽取第一个字母是"LVHA"Q你可以记忆?LoVe HAte"(喜欢讨厌)。ؓ什么这么定义,可以参考Eric Meyer的?a target="new">Link Specificity》?/p>
? 果你的用户需要用键盘来控Ӟ需要知道当前链接的焦点Q你q可以定?focus属性?focus属性的效果也取决与你书写的位置Q如果你希望聚焦元素 昄:hover效果Q你把:focus写在:hover前面Q如果你希望聚焦效果替代:hover效果Q你把:focus攑֜:hover后面?/p>
一个非常常见的CSS问题Q定位用Q动的时候,下面的层被Q动的层所覆盖Q或者层里嵌套的子层出了外层的范围?/p>
通常的解军_法是在Q动层后面d一个额外元素,例如一个div或者一个brQƈ且定义它的样式ؓclear: both。这个办法有一点牵强,q运的是q有一个好办法可以解决Q参看这文章?a target="new">How To Clear Floats Without Structural Markup?注:本站尽快翻译此??/p>
上面2U方法可以很好解xQ动超出的问题Q但是如果当你真的需要对层或者层里的对象q行clear的时候怎么办?一U简单的Ҏ是用overflow属性,q个Ҏ最初的发表在?a target="new">Simple Clearing of Floats》,又在?a target="new">Clearance》和?a target="new">Super simple clearing floats》中被广泛讨论?/p>
上面那一UclearҎ更适合你,要看具体的情况,q里不再展开。另外关于float的应用,一些优U的文章已l说得很清楚Q推荐你阅读Q?a target="new">Floatutorial》、?a target="new">Containing Floats》和?a target="new">Float Layouts?/p>
q是一个简单的技巧,但是值得再说一遍,因ؓ我看见太多的新手问题都是问这个:CSS如何横向居中Q你需要定义元素的宽,q且定义横向的marginQ如果你的布局包含在一个层(容器)中,pq样Q?/p>
你可以这样定义它横向居中:
#wrap {但是IE5/Win不能正确昄q个定义Q我们采用一个非常有用的技巧来解决Q用text-align属性。就象这P
body {W一个body的text-align:center; 规则定义IE5/Win中body的所有元素居?其他览器只是将文字居中) Q第二个text-align:left;是将#warp中的文字居左?/p>
因ؓ老版本浏览器不支持CSSQ一个通常的做法是使用@import技巧来把CSS隐藏h。例如:
@import url("main.css");然而,q个Ҏ对IE4不v作用Q这让我很是头疼了一阵子。后来我用这L写法Q?/p> @import "main.css";
q样可以在IE4中也隐藏CSS了,呵呵Q还节省?个字节呢。想了解@import语法的详l说明,可以看这里?a target="new">centricle’s css filter chart?/p>
有些时候,你需要对IE览器的bug定义一些特别的规则Q这里有太多的CSS技?hacks)Q我只用其中的两种ҎQ不微软在卛_发布的IE7 beta版里是否更好的支持CSSQ这两种Ҏ都是最安全的?/p>
另外一U方法,我认为比CSS Hacks更加l得赯验是采用微Y的私有属性条件注?conditional comments)。用q个Ҏ你可以给IE单独定义一些样式,而不影响L式表的定义。就象这P
<!--[if IE]> <br /> <link rel="stylesheet" type="text/css" href="ie.css" /> <br /> <![endif]-->? 调试CSS发生错误Q你p象排版工人,逐行分析CSS代码。我通常在出问题的层上定义一个背景颜Ԍq样p很明昄到层占据多大I间。有些h? borderQ一般情况也是可以的Q但问题是,有时候border 会增加元素的寸Qborder-top和boeder-bottom会破坏纵向margin的|所以用background更加安全些?
另外一个经常出问题的属性是outline。outline看v来象boederQ但不会影响元素的尺寸或者位|。只有少数浏览器支持outline属性,我所知道的只有Safari、OmniWeb、和Opera?/p>
在写CSS代码的时候,对于~进、断行、空|每个人有每个人的书写习惯。在l过不断实践后,我决定采用下面这L书写样式Q?/p>
selector1,
selector2 {
property:value;
}
当用联合定义时Q我通常每个选择器单独写一行,q样方便在CSS文g中找到它们。在最后一个选择器和大括号{之间加一个空|每个定义也单独写一行,分号直接在属性值后Q不要加I格?/p>
我习惯在每个属性值后面都加分P虽然规则上允许最后一个属性值后面可以不写分P但是如果你要加新样式时容易忘记补上分可生错误,所以还是都加比较好?/p>
最后,关闭的大括号}单独写一行?/p>
I格和换行有助与阅读?/p>
译者注Q一很好的文章Q很久以前在blog上就推荐q,q两天断断箋l花了点旉译了一下,推荐读读?a >英文原文在此?/p>
文中所有的 layout q个单词都未作翻译,一来本w这个单词意思就比较多,L啥都觉得别扭Q二来它也是专有的属性,所以就意会一下吧。水qx限,很多地方都是模模p糊地意译,发现错误Ƣ迎留言指出?/p>
引用一D|?a >Dean Edwards的评P
I recommend that every CSS designer and DOM scripter read this. Understanding “layout” gives a huge insight into lots of other IE bugs and idiosyncrasies.
Internet Explorer 中有很多奇怪的渲染问题可以通过赋予?#8220;layout”得到解决。John Gallant ?Holly Bergevin 把这些问题归cMؓ“寸bug(dimensional bugs)”Q意思是q些 bug 可以通过赋予相应元素某个宽度或高度解冟뀂这便引出关?#8220;layout”的一个问题:Z么它会改变元素的渲染Ҏ,Z么它会媄响到元素之间的关p?q个问题问得很好Q但却很隑֛{。在q篇文章中,我们专注于这个复杂问题会有那些方面的表现Q某一斚w的具体讨论和范例请参考文中给出的相关链接?/p>
“Layout”是一?IE/Win 的私有概念,它决定了一个元素如何显CZ及约束其包含的内宏V如何与其他元素交互和徏立联pR如何响应和传递应用程序事?用户事g{,q有点类g一个窗体的概念?/p>
微Y的开发者们认ؓ盒状元素(box-type elements)应该h一?#8220;属?property)”(q是面向对象~程中的一个概?Q于是他们便使用?layout
, 也就?hasLayout
?/p>
hasLayout
其实既不是一个属性更不是一个行为,而是 IE q个渲染引擎代代l承一贯拥有的一个渲染概念,在这个概念下渲染的元素将h一U特性?/p>
实际上这U渲染特性在有些 HTML 元素中与w俱来,而在另外一些元素中也可以通过一?CSS 属性将其触发ؓ true
Q且一旦触发将不可逆{?/p>
当我们说一个元?#8220;拥有layout”?#8220;得到layout”Q或者说一个元?#8220;has layout” 的时候,我们的意思是指它的微软专有属?hasLayout
被设Z true
。一?#8220;layout元素”可以是一个默认就拥有 layout 的元素或者是一个通过讄某些 CSS 属性得?layout 的元素?/p>
?#8220;无layout元素”Q是?hasLayout 未被触发的元素,比如一个未讑֮宽高寸的干净 div 元素可以做Z?“无layout先”?/p>
l一个默认没?layout 的元素赋?layout 的方法包括设|可触发 hasLayout = true
?CSS 属性。参?a >默认 layout 元素以及q些属?/font>列表。没有办法设|?hasLayout = false
Q?除非把一开始那些触?hasLayout = true
?CSS 属性去除?/p>
hasLayout
的问题不新手还是老手Q不设计师或者程序员可能都遇到过。具?layout 的元素通常有着不同d而且难以预料的的昄效果Q而且有时甚至会牵q到他们的孩子元素?/p>
一个元素是否具?#8220;layout”可能会引发如下的一些问题:
上面的列表只是列Z个大概,也不完善。下面的文章尽可能详细d的描q有?#8220;layout”所带来的各U问题?/p>
不同于标准属性,也不像某些浏览器的私?CSS 属性,layout 无法通过某一?CSS 声明直接讑֮ 。也是说没?#8220;layout属?#8221;q么一个东西,元素要么本n自动拥有 layoutQ要么借助一?CSS 声明悄悄地获?layout?/p>
下列元素应该是默认具?layout 的:
<html>, <body>
<table>, <tr>, <th>, <td>
<img>
<hr>
<input>, <select>, <textarea>, <button>
<iframe>, <embed>, <object>, <applet>
<marquee>
下列 CSS 属性和取值将会让一个元素获?layoutQ?/p>
position: absolute
float: left|right
display: inline-block
.gainlayout { _height: 0; }
另外Q更h向后兼容性的Ҏ是?条g注释(conditional comments):
<!--[if lte IE 6]> <style> .gainlayout { height: 1px; } </style> <![endif]-->
在条件注释中链接一个专门对 IE/Win 做修正的外部样式表文Ӟ也不׃ؓ一个安全有效的好方法:
<link rel="stylesheet" href="allbrowsers.css" type="text/css" /> <!--[if lte IE 6]> <link rel="stylesheet" href="iefix.css" type="text/css" /> <![endif]-->
我们更們于?height: 0
?1px
—?q主张始l?height
除非它和别的什么东西冲H?(overflow: hidden
)。对于取|我们则們于避?1%
Q因为它可能?虽然很少)引v一些问?/font>?/p>
一个需要注意的情况是如果我们希望一个元素保持内联,那么׃能?height
了,q时可以?display: inline-block
。我们只在早期调试阶D는 zoom: 1
来避免一些渲染错误?/p>
我们曄q一些把 Holly hack 真的当作 holy(圣? hack 盲目使用的情况,比如ҎQ动元素用或者对已经h特定宽度的元素也使用q个 hack。要Cq个 hack 的目的不是要l某个元素加一个高度,而只是要触发 hasLayout = True
而已?/p>
不要l所有元素设|?layoutQ?code>* {_height: 1px;}。所谓过犹不及,获得 layout 不等于获得灵丹妙药,它只是用来改变渲染模式?/p>
但是览器L会变的,我们需要面对很多问题,比如一些依?IE6 ?bug 所做的 hack 会在 IE7 或更高版本的新浏览器中因 bug 修复而失?甚至有害)的问题;比如新版本浏览器中类似的布局 bug 依然存在但用?hack 的过滤器比如 * html
却不能正常工作的问题。这U情况下QMS专有属?zoom
可以考虑使用了?/p>
<!--[if lt IE 7]><style> /* IE 6 + IE5.5 + IE5.0 所用样?/ .gainlayout { height: 0; } </style><![endif]--> <!--[if IE 7]><style> .gainlayout { zoom: 1;} /* 或者其他Q何以后可能需要的东西 */ </style><![endif]-->
zoom: 1;
可以?IE5.5+ 的Q何元?包括内联元素)获得 layoutQ但是在 IE5.0 中无效?
zoom
隐藏h?其实当我们考虑?#8220;向后兼容”时是很自相矛盄Q我们强烈徏议页面设计者回q头看一下自己页面中用的到的明显的或是不明显?#8220;hacks”Qƈ用条件注释针对不同浏览器重新处理以保万无一失?/p>
IE Mac ?windows 下的 IE 是完全不同的两个东西Q它们各自拥有自q渲染引擎QIE Mac 全然不?#8220;hasLayout”(或contenteditable)所谓何物。相比之?IE Mac 的渲染引擎要更标准兼容一点,比如 height
是被当?height
处理Q没有别的效果。因此针?#8220;hasLayout”?hacks 和别的解x?特别是通过使用 height
?width
属性的)往往?IE Mac 来说是有害的Q所以需要对光藏。更多的关于 IE Mac 相关的问题可以在 IE Mac, bugs and oddities pages 扑ֈ?/p>
MSDN 中涉及到 hasLayout q个 MS 属性的地方寥寥无几Q而具体解?layout ?IE 渲染模型之间关系的则之又少?/p>
在IE4的时候,除了未经l对定位也未指定宽高的内联元素,几乎所有元素都有某U?layout(MSDN)。在q种早期的layout概念中,?border, margin, padding
q些属性被UC“layout属?#8221;Q它们是不能应用C个简单的内联元素上的。换句话_“拥有layout”可以粗略理解成Q?#8220;可以拥有q几个属?#8221;?/p>
MSDN 上仍然?layout 属性这U说法, 只是含义变了Q它们和拥有 layout 的元素已l没有什么关pM。在 IE5.5 中方才引入了 MS 的这个专有属?hasLayout
Q也只是某种内部的标志位而已?/p>
?IE5.5 中,MSHTML Editing Platform(卛_以通过讄<body contenteditable=true>
来允许用户实时编辑、拖?layout 元素以及调整其尺寸等)的文档中描述了三个和 layout 相关的重要特性:
如果一?layout 元素中有内容Q内容的排版布局由它的边界矩Ş框决定?/p>
拥有 layout 的意思基本上是表示某元素是一个矩形?/p>
从内部来_拥有 layout 意思就是一个元素将自己负责l制其内部内宏V?/p>
?layout 自n相关的内部工作机制直?005q?月才有相应文档描qͼ当时׃ The Web Standards Project 和微软的特别工作组的原因,Markus Mielke [MSFT] 打开了深入讨论的大门Q?/p>
一般来_?Internet Explorer ?DHTML 引擎中,元素是不对自q位置安排负责的。虽然一?div 或者一?p 元素都在源码中有一个位|,在文档流有一个位|,但是它们的内容却是由它们最q的一?layout 先(l常?body)控制安排的。这些元素依赖它们祖先的 layout 来ؓ他们处理诸如军_大小寸和测量信息等诸多J重的工作?/p>
我们的分析试图解释在已知案例下发生了什么事情,q种分析也应该可以作为未知案例下的指对{但我们q种试图利用U种试案例投石探\的黑测试方法,是注定无法消除黑q秘感的——我们无法回{?#8220;Z?#8221;的问题。我们只能去试了解整个“hasLayout”模式的工作框Ӟ以及它会怎样影响|页文档的渲染。因此,最l我们只能提供一?em>指导斚w(而且只能是指导方针,而不是绝对的解决Ҏ)?/p>
我们认ؓ他们所指的是一个小H体。一?layout 元素的内部内Ҏ完全独立的,而且也无法媄响其边界外的M内容?/p>
?MS 属?layout 只是某种标志位:一旦它被设定,q个元素׃拥有其特D的 layout“Ҏ?#8221;Q这包括体现在其自n以及光 layout 孩子w上的Q动、清除Q动、层叠、计数等{诸多方面的Ҏ性能?/p>
q种独立性也许正可以解释Z?layout 元素通常比较E_Q而且它们可以让某?bug 消失。这U情늚代h有二Q一是偏M标准Q二是它没有考虑C后可能因此出现的 bug 和问题?/p>
MS ?#8220;面”模式Q从W号学角度考虑Q可以看做是由很多互不相关的的区块构成Q?HTML ?W3C 的模式则认ؓ“面”模式应该是叙q完备的Q故事性的相关信息区块构成的?/p>
动元素会被 layou 元素自动包含。这是很多新手经帔R到的问题Q在 IE 下完成的面C标准兼容览器下所有未清除的Q动元素都伸出了其包含容器之外?/p>
q一步又有一个问题就?在有序列表中)Mh layout 的列表元素似乎都有自q立的计数器。比如我们有一个含五个列表元素的有序列表,只有W三个列表元素有 layout。我们会看到q样Q?/p>
1… 2… 1… 4… 5…
此外Q如果一个有 layout 的列表元素跨行显C时Q列表符号会底部寚w(而不是按照预料的剙寚w)?/p>
以上某些问题q是无法解决的,所以如果需要列表符L时候最好避免让列表和列表元素获?layout。如果需要限定尺寸,最好给别的元素讑֮寸Q比如给整个列表外面套一个元素ƈ讑֮它的宽度Q又或者比如给每个列表元素中的内容讑֮高度{等?/p>
另一个IE中列表的常见问题出现在当某个 li
中的内容是一?display: block
的锚?anchor)时。在q种情况下,列表元素之间的空格将不会被忽略而且通常会显C成额外的一行夹在每?li
之间。一U避免这U竖直方向多余空白的解决Ҏ是赋予这些锚?layout。这栯有一个好处就是可以让整个锚点的矩形区域都可以响应鼠标点击?/p>
table
L?layout 的,它总表Cؓ一个已定义宽度的对象。在IE6中,table-layout: fixed
通常和一个宽度设?00%的表格相同,同时q也会带来很多问?一些计方面的错误)。另外在IE5.5和IE6的quirks模式?a title="查看 Philippe Wittenbergh 的文? >q有一些别的需要注意的情况?/p>
注意Q由?position: relative
q不触发 hasLayoutQ所以很多诸如内Ҏ失或错位的渲染错误就会因此而v。这些现象可能会在刷新页面、调整窗口大、滚动页面、选中内容{情况下出现。原因是 IE 在据q个属性对元素做偏Ud理时Q却g忘了发出信号让其 layout 孩子元素q行“重绘”(而如果是一个layout元素Q那么在光l事件的信号链中Q这个传l其孩子的信h会正常发出的)?/p>
以上是一些相关问题的描述。作为经验之谈,相对定位一个元素时最好给予其 layout。再有,我们也需要检查拥有这U结构的父元素是否也需?layout 或?code>position: relative亦或二者都需要,如果涉及到Q动元素这点就十分重要?/p>
理解 CSS 的包含区块概念很重要Q它回答了绝对定位元素是相对哪里定位的问题:包含区块军_了偏Uv点,包含区块定义了百分比长度的计参考?/p>
对于l对定位元素Q包含区块是由其最q的定位先军_的。如果其先都没有被定位Q那么就使用初始包含区块 html
?/p>
通常情况下我们会?position: relative
来设定Q意包含区块。这是_我们可以让一个绝对定位元素所参考的原点和长度等不依赖于元素的排列顺序,q可以满?#8220;内容优先”q种可访问性概늚需要,也可以给复杂的Q动布局带来方便?/p>
但是׃ layout 概念的存在,q种设计理念的效果在IE中就要打个问号了。因为在IE中绝对定位的元素是相对于其最q的 layout 定位先而做偏移的,而百分比的尺寸却是参考这?layout 定位先的下一?layout 先计算的。注意这里的差别,q有刚才提到 position: relative
是不会触?hasLayout 的?/p>
假设一个无 layout 的父元素被相对定位了——我们就得给它赋?layout 才能使偏U量起作用:
假设一个未定位的父元素需要特定尺寸,而且面设计是基于百分比宽度的——我们就可以攑ּq个x了,因ؓ览器支持不佻I
hasLayout = false
则指的是“Ҏ边缘(border edge)”Q当 hasLayout=true
时指的才是补白边~:
hasLayout 会媄响一个块U别链接的鼠标响应区?可点d?。通常 hasLayout = false 时只有文字覆盖区域才能响应。?hasLayout = true 则整个块状区域都可响应。添加了 onclick/onmouseover {事件的L块元素也有同样的现象?/p>
两种堆叠模式虽互不相容,但却共存于IE的渲染引擎中。经验之谈:调试的时候,两种情况都要考虑到。我们可能会有规律地在下拉菜单或者类似的复杂菜单中看到相关问题,因ؓ它们往往牉|到堆叠,定位和Q动等诸多令h头疼的问题。给那些 z-index 定位的元?layout 是一U可能的修正ҎQ不q也不限于此Q这里只是提醒一下?/p>
如果l一?HTML 标签讑֮ contenteditable=true
属性,比如<body contenteditable=true>
Q将会允许对该元素以及其 layout 子元素进行实时的~辑、拖动改变尺寸等操作。你可以把这属性用在Q动元素或者一个有序列表中?layout 列表元素上看看效果?/p>
Z对元素进行操?~辑它们)Q?#8220;contenteditable”?#8220;hasLayout”为那?hasLayout
q回 true
的元素引入了一套单独的堆叠序?/p>
Editing Platform l承?layout 概念Q对 layout 的误解多是因 contenteditable 而v卛_作ؓ证明(那些某种E度上集成了IE~辑引擎的应用Y件多暗含着对layout概念的某U强制向后兼Ҏ??/p>
你的 MSIE 面在别的浏览器中一团糟Q我们可没必要让q种事情发生。如果用恰当,M好的览器都能摆q?MSIE 的页面——只要你使用一些正的 CSS?/p>
利用 hasLayout
?#8220;新的块格式内容”之间?em>l微怼之处Q我们可以有几种Ҏ在标准兼Ҏ览器中重新实?hasLayout
?#8220;包含动元素”效果Q和一?#8220;动元素旁边的元?/font>”所Ҏ的效果?/p>
某些 doctypeQ或?<xml>
声明Q在 IE6 中会触发“quirks模式”或曰向后兼容模式。在q种模式下,IE6 像 IE5.5Qƈ且和它老弟拥有一LbugQ一L问题和一L行ؓ?/p>
而对于IE7Q?code><xml> 声明不会再改变渲染模式了Q要触发 quirks 模式Q我们不得不插入一个注释才行?IE7 ?quirks 模式?IE6 ?quirks 模式是否一栯有待验证)
<?xml version="1.0" encoding="utf-8"?> <!-- ... ?IE7 q行?quirks 模式 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
整个 layout 概念和一些基?CSS 概念是不兼容的,卛_含,排列QQ动,定位和层叠等?/p>
׃面中元素或有或没有 layoutQ会D IE/Win 的行为和 CSS 规范相违背?/p>
软g bug 是由于在制作q程中对完整性和逻辑问题考虑不周{h为错误而导致的。这是hcȝ固有~陷Q目前还没有什么好的解x法?/p>
同样׃q种~陷QQ何试图不重写软g而修?bug 的做法,都将会不可避免的D软g中出现更复杂的bug?/p>
所有依赖别的Y件的软g——当然包括依赖操作系l,也会同样依赖他们?bug。于是我们会从所有关联的软g中得Cq串?bugQ这也更说明扑ֈ一个无 bug 软g是几乎不可能的?/p>
本文创徏?005q??0日,最后一ơ修改于2006q??日?/p>