<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[XHTML - 葵中剑]]></title><description><![CDATA[Just Sword Wang's Blog]]></description><link>https://swordair.com/</link><image><url>https://swordair.com/favicon.png</url><title>XHTML - 葵中剑</title><link>https://swordair.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Wed, 21 Dec 2022 12:01:02 GMT</lastBuildDate><atom:link href="https://swordair.com/tag/xhtml/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[漫谈font-size]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>起因是下面的这句话：</p>
<pre><code>font-size: 75%; /* Resets 1em to 11px */
</code></pre>
<p>这是我曾经喜欢的wordpress主题 Bito 的第一句CSS。印象里还是记得默认值是16px，那么75%就是12px了。不过这只是表面问题，其实大部分人都不怎么关系字体大小的本质。</p>
<h2 id>从标准看起</h2>
<p><a href="http://www.w3schools.com/css/pr_font_font-size.asp">W3Cschools的font-size参考</a>相当简单，只是简单的列举了属性的可取值。并且<a href="http://www.w3.org/TR/2009/CR-CSS2-20090908/fonts.html#propdef-font-size">CSS2.1 Specification RC20090908</a>里，关于font-size的定义也并不多。</p>
<p>大体上，font-size的值非常宽泛，即可以是关键词定义的绝对值，可以是百分比或者 em 的相对值，还可以是绝对单位px。在实际工作中，我自己都似乎快习惯于用px定义字体大小，很少使用到那些关键字或者比例，但可能这不是个好习惯。回想自己学习CSS的过程里的例项，大部分都是用em或者百分比的。</p>
<h2 id="px">关于px</h2>
<p>对font-size直接应用px值，这样做非常精确，而且也方便，所以我们习以为常。当对font-size赋予px值意味着浏览器将会把文本渲染成指定的像素那般高。并且通常情况是，西文字符在9px以下、中文字符在12px以下时，文字将难以辨认。使用像素单位的主要问题是两个：</p>]]></description><link>https://swordair.com/discussion-on-font-size/</link><guid isPermaLink="false">59fe0cf19855590d8c9146d6</guid><category><![CDATA[Chrome]]></category><category><![CDATA[CSS]]></category><category><![CDATA[FireFox]]></category><category><![CDATA[IE8]]></category><category><![CDATA[Opera]]></category><category><![CDATA[Safari]]></category><category><![CDATA[Windows]]></category><category><![CDATA[XHTML]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 07 Jul 2010 16:16:24 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>起因是下面的这句话：</p>
<pre><code>font-size: 75%; /* Resets 1em to 11px */
</code></pre>
<p>这是我曾经喜欢的wordpress主题 Bito 的第一句CSS。印象里还是记得默认值是16px，那么75%就是12px了。不过这只是表面问题，其实大部分人都不怎么关系字体大小的本质。</p>
<h2 id>从标准看起</h2>
<p><a href="http://www.w3schools.com/css/pr_font_font-size.asp">W3Cschools的font-size参考</a>相当简单，只是简单的列举了属性的可取值。并且<a href="http://www.w3.org/TR/2009/CR-CSS2-20090908/fonts.html#propdef-font-size">CSS2.1 Specification RC20090908</a>里，关于font-size的定义也并不多。</p>
<p>大体上，font-size的值非常宽泛，即可以是关键词定义的绝对值，可以是百分比或者 em 的相对值，还可以是绝对单位px。在实际工作中，我自己都似乎快习惯于用px定义字体大小，很少使用到那些关键字或者比例，但可能这不是个好习惯。回想自己学习CSS的过程里的例项，大部分都是用em或者百分比的。</p>
<h2 id="px">关于px</h2>
<p>对font-size直接应用px值，这样做非常精确，而且也方便，所以我们习以为常。当对font-size赋予px值意味着浏览器将会把文本渲染成指定的像素那般高。并且通常情况是，西文字符在9px以下、中文字符在12px以下时，文字将难以辨认。使用像素单位的主要问题是两个：</p>
<ol>
<li>当把文字设定为固定px值后，IE6以下浏览器将不能对其缩放。</li>
<li>固定尺寸后失去级联特性。</li>
</ol>
<p>老外的眼里，第一点似乎是个大问题，因为他们把网站的可访问性和易用性看的很重，无法看清字几乎是不能容忍的。而第二点，只要不做弹性布局或者设置字体调节器之类的应用，并且针对的只是显示器，也就不是大问题。这恐怕也是导致px这么泛滥的原因。好用，简单，并且最重要的是——精确。</p>
<p>但是对于易用性来说，px似乎不是个好东西。<br>
<a href="http://www.w3.org/TR/1999/WAI-WEBCONTENT-19990324/#tech-relative-units">W3C Web 可访问性指南</a>：在标记语言的属性值和样式表属性值里使用相对单位而不是绝对单位。[...]比如，在CSS里，使用 ‘em’ 或者 百分比长度 而不是使用绝对单位 ‘pt’ 或者 ‘cm’ 。</p>
<h2 id>百分比的使用</h2>
<p>百分比和em都是相对值，相对于父元素的字体大小。1em等于1个字体的大小，<a href="http://css-tricks.com/">Chris Coyier</a>认为em是基于大写字母 M 的宽度(除此以外，我找不到更好的参考)。使用百分比和em可以很好使得各个元素间产生级联的比例关系。</p>
<p>鉴于windows的浏览器，默认的字体大小是medium，即 16ppem (后面会讲到)下显示为16px。所以75%就是12px，而62.5%就是10px。</p>
<p>基于<a href="http://webtech-walker.com/archive/2008/05/16032443.html">font-sizeのパーセント表記一覧</a>里的百分比的零散表格，我重新组织了下面这张整表。下表仅仅作为参考，因为百分比的微弱递减或递增不会对文本产生可视化的效果(当然也有例外)，反而容易产生出混乱的级联百分比关系。</p>
<table>
	<tr>
		<th>值\相对值</th>
		<th>12px</th>
		<th>13px</th>
		<th>14px</th>
		<th>15px</th>
		<th>16px</th>
	</tr>
	<tr>
		<th>10px</th>
		<td>84%</td>
		<td>77%</td>
		<td>72%</td>
		<td>67%</td>
		<td><span style="color:red;">63%</span></td>
	</tr>
	<tr class="even">
		<th>11px</th>
		<td>92%</td>
		<td>85%</td>
		<td>79%</td>
		<td>74%</td>
		<td>69%</td>
	</tr>
	<tr>
		<th>12px</th>
		<td>100%</td>
		<td>93%</td>
		<td>86%</td>
		<td>80%</td>
		<td><span style="color:red;">75%</span></td>
	</tr>
	<tr class="even">
		<th>13px</th>
		<td>109%</td>
		<td>100%</td>
		<td>93%</td>
		<td>87%</td>
		<td>82%</td>
	</tr>
	<tr>
		<th>14px</th>
		<td>117%</td>
		<td>108%</td>
		<td>100%</td>
		<td>94%</td>
		<td>88%</td>
	</tr>
	<tr class="even">
		<th>15px</th>
		<td>125%</td>
		<td>116%</td>
		<td>108%</td>
		<td>100%</td>
		<td>94%</td>
	</tr>
	<tr>
		<th>16px</th>
		<td>134%</td>
		<td>124%</td>
		<td>115%</td>
		<td>107%</td>
		<td>100%</td>
	</tr>
	<tr class="even">
		<th>17px</th>
		<td>142%</td>
		<td>131%</td>
		<td>122%</td>
		<td>114%</td>
		<td>107%</td>
	</tr>
	<tr>
		<th>18px</th>
		<td>150%</td>
		<td>139%</td>
		<td>129%</td>
		<td>120%</td>
		<td>113%</td>
	</tr>
	<tr class="even">
		<th>19px</th>
		<td>159%</td>
		<td>147%</td>
		<td>136%</td>
		<td>127%</td>
		<td>119%</td>
	</tr>
	<tr>
		<th>20px</th>
		<td>167%</td>
		<td>154%</td>
		<td>143%</td>
		<td>134%</td>
		<td>125%</td>
	</tr>
	<tr class="even">
		<th>21px</th>
		<td>175%</td>
		<td>162%</td>
		<td>150%</td>
		<td>140%</td>
		<td>132%</td>
	</tr>
	<tr>
		<th>22px</th>
		<td>184%</td>
		<td>170%</td>
		<td>158%</td>
		<td>147%</td>
		<td>138%</td>
	</tr>
	<tr class="even">
		<th>23px</th>
		<td>192%</td>
		<td>177%</td>
		<td>165%</td>
		<td>154%</td>
		<td>144%</td>
	</tr>
	<tr>
		<th>24px</th>
		<td>200%</td>
		<td>185%</td>
		<td>172%</td>
		<td>160%</td>
		<td>150%</td>
	</tr>
	<tr class="even">
		<th>25px</th>
		<td>209%</td>
		<td>193%</td>
		<td>179%</td>
		<td>167%</td>
		<td>157%</td>
	</tr>
	<tr>
		<th>26px</th>
		<td>217%</td>
		<td>200%</td>
		<td>186%</td>
		<td>174%</td>
		<td>163%</td>
	</tr>
</table>
<p>之所以选择了参考了这位日本开发者的资料是有原因的。比如，我们常常全局定义字体的相对medium(通常为16px)的62.5%，也就是10px，然后再对文档的个个其他部分定义em值。相对于10px，1.2em就是12px，1.6em就是16px，依次类推。这样的比例使用起来很直观，并且会在所有的浏览器里表现完好，当然除了IE。</p>
<p>IE会错误的显示字体大小(感觉上是字体框架有细微的变大)，并且仅限于中文。除非我们将比例设置成63%而不是62.5%。所以当我看到这张表中63%的时候，我觉得同是非西欧字符，这张表应该更具有参考价值。不过这些值我也没能自己去全部测试，偷懒一下～</p>
<p>em似乎比百分数更加直观，而且对于一个字体的宽度的把握往往也更容易。同时它们有相同的级联性，使用的时候总是要避免规则的叠加。比如定义 div{font-size:1.2em;} ，那么在div里包含div就会出问题。1.2emx1.2em的叠加会使得文字比想象中的大——但这还不要紧，如果使用的是0.8em？缩小倍率的多次叠加很快会使得文字变得无法分辨。</p>
<p>无论是em还是百分比，都是相对值。并且常常相对于medium。但是关于medium这类关键字，就有了更多的话题。</p>
<h2 id>关键字</h2>
<p>我对于font-size的理解一直停留在上面说的那些，直到半个月前，我读到这篇<a href="http://style.cleverchimp.com/font_size_intervals/altintervals.html">Toward a standard font size interval system</a>。</p>
<p>回到之前的<a href="http://www.w3.org/TR/2009/CR-CSS2-20090908/fonts.html#propdef-font-size">CSS2.1 Specification RC20090908</a>，标准把关键字定义为这样：</p>
<table>
	<tr>
		<th>CSS absolute-size values</th>
		<td>xx-small</td>
		<td>x-small</td>
		<td>small</td>
		<td>medium</td>
		<td>large</td>
		<td>x-large</td>
		<td>xx-large</td>
		<td style="background:#eee;">&nbsp;</td>
	</tr>
	<tr>
		<th>HTML font sizes</th>
		<td>1</td>
		<td style="background:#eee;">&nbsp;</td>
		<td>2</td>
		<td>3</td>
		<td>4</td>
		<td>5</td>
		<td>6</td>
		<td>7</td>
	</tr>
</table>
回顾略显古老的[HTML 3.2 Reference Specification - Font](http://www.w3.org/TR/REC-html32#font)，这七个关键字是否是对应于已经实现的HTML font标记不得而知，但是上面的对应关系并不是一一对应的，medium对应的是size 3。[Html Font Size Tutorial CSS Style](http://www.htmlcss.org/font-size.html)上可以清楚的看到全部的关键字效果。
<p>下面这张图，更加直观些。但是注意第二行。同样对于English Font加上larger，IE8和FF渲染为18px，Opera、Chrome和Safari则渲染为19px。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/font_size_compare.png" alt="font size compare"></p>
<p>下面的表截取自<a href="http://style.cleverchimp.com/font_size_intervals/altintervals.html">Toward a standard font size interval system</a>里的Synoptic table，对应于windows常用的96dpi的情况。是的，96dpi，我们几乎从来不去改变这个默认的值，除非也许某个人因为高分屏字太小的折磨，而主动调大到了120dpi。</p>
<table cellpadding="3" cellspacing="0">
	<tr>
		<td style="text-align:right;background:black;color:#FFCC00;">CSS absolute size keywords:</td>
		<td style="background:#FFFFCC;">xx-small</td>
		<td style="background:#FFFF99;">x-small</td>
		<td style="background:#FFFF66;">small</td>
		<td style="background:#FFFF00;">medium</td>
		<td style="background:#FFFF66;">large</td>
		<td style="background:#FFFF99;">x-large</td>
		<td style="background:#FFFFCC;">xx-large</td>
		<td style="background:#808080;">&nbsp;</td>
	</tr>
		<td style="text-align:right;background:black;color:#FFCC00;">HTML absolute font sizes:<br>(interpolated Mozilla values)</td>
		<td style="background:#FFFFCC;">1</td>
		<td style="background:#808080;">&nbsp;</td>
		<td style="background:#FFFF66;">2</td>
		<td style="background:#FFFF00;">3</td>
		<td style="background:#FFFF66;">4</td>
		<td style="background:#FFFF99;">5</td>
		<td style="background:#FFFFCC;">6</td>
		<td style="background:#FFFFCC;">7</td>
	<tr>
		<td style="text-align:right;background:black;color:#FFCC00;">HTML headings:<br>(interpolated Mosaic values)</td>
		<td style="background:#FFFFCC;">h6</td>
		<td style="background:#808080;">&nbsp;</td>
		<td style="background:#FFFF66;">h5</td>
		<td style="background:#FFFF00;">h4</td>
		<td style="background:#FFFF66;">h3</td>
		<td style="background:#FFFF99;">h2</td>
		<td style="background:#FFFFCC;">h1</td>
		<td style="background:#808080;">&nbsp;</td>
	</tr>
	<tr>
		<td style="text-align:right;background:#FFCC00;color:black;">normalized scaling factor:</td>
		<td>60% - 3:5</td>
		<td>75% - 3:4</td>
		<td>89% - 8:9</td>
		<td>100% - 1:1</td>
		<td>120% - 6:5</td>
		<td>150% - 3:2</td>
		<td>200% - 2:1</td>
		<td>300% - 3:1</td>
	</tr>
	<tr>
		<td style="text-align:right;background:black;color:#FFCC00;">px computed from a 16 ppem base:<br><br>e.g., 12pt @ 96ppi or 16pt @ 72ppi<br>(XP 5.0 UA default)</td>
		<td>10px<br><br><span style="font-size:10px">E</span></td>
		<td>12px<br><br><span style="font-size:12px">E</span></td>
		<td>14px<br><br><span style="font-size:14px">E</span></td>
		<td>16px<br><br><span style="font-size:16px">E</span></td>
		<td>19px<br><br><span style="font-size:19px">E</span></td>
		<td>24px<br><br><span style="font-size:24px">E</span></td>
		<td>32px<br><br><span style="font-size:32px">E</span></td>
		<td>48px<br><br><span style="font-size:48px">E</span></td>
	</tr>
</table>
<p>牵扯到一个很重要的概念，ppem。它指的是Pixels per em，即每个字体大小的像素数，定义了字符在屏幕上的易读性。关于更多的信息，我强烈建议阅读<a href="http://style.cleverchimp.com/font_size_intervals/altintervals.html">Toward a standard font size interval system</a>原文。</p>
<p>当把xp的dpi从96调整到120， 整个系统的尺寸，包括图形和文字都被放大了。此时，如果打开IE，font-size:medium 不再是16px，而是20px。虽然我也试过Chrome和FireFox，但它们没有变化。我不明白原因，如果有人知道，麻烦请告诉我声: ）</p>
<p>这再次的提醒了我们，CSS不是只为显示器而设计的，而且也不是专为windows而设计的。我们有时可能需要考虑更多更多。<br>
水平有限，文中如有错误望指正~</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Web书评]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>整理行装的时候，瞥见这张一年半前的照片，然后在柜子了浏览了一下这些见证过往的书籍。原来也曾这么这么地努力过:)。现在，书更多了一些，有几本书借出去了，所以合影似乎没多大的意义。所以仍旧用这张照片，怀念下阳光里，一本书，一首曲子的时光。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/books_with_K701_s615f.jpg" alt></p>
<p>以前总是看别人的书评。当然在不看书评前，自己总是乱买书，结果总是有几本书比较糟糕。但好在数量不是很多。在即将重新启程的当前，自己也该写个书评总结回顾下。题外话，书看多了，也没啥好的。</p>
<h4 id="javascriptdavidflanagan">《JavaScript 权威指南》— David Flanagan</h4>
<p>厚的书总之给人无形的压迫感，JavaScript权威指南，也就是大家俗称的犀牛书，就是这么一本近千页的书，尽管其中有近三分之一是以参考手册的形式。这本书虽然全面，但是对于讲解过程却并不是很平和。在我看来，这更像是一本参考书而非教学书。不仅读来相对枯燥，整个逻辑更是程序员固有的棱角分明，我觉得对于初学者完全不适合。这部书大而全，讲述了JavaScript的方方面面，但深入度却都不是最佳。可以说这是本必备的不错的参考书，如果用作学习，恐怕下面讲的《JavaScript 高级程序设计》更为合适。</p>
<h4 id="javascriptdomjeremykeith">《JavaScript DOM 编程艺术》</h4>]]></description><link>https://swordair.com/web-development-book-reviews/</link><guid isPermaLink="false">59fe0cf19855590d8c9146d5</guid><category><![CDATA[Book review]]></category><category><![CDATA[CSS]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[XHTML]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Fri, 02 Jul 2010 17:01:40 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>整理行装的时候，瞥见这张一年半前的照片，然后在柜子了浏览了一下这些见证过往的书籍。原来也曾这么这么地努力过:)。现在，书更多了一些，有几本书借出去了，所以合影似乎没多大的意义。所以仍旧用这张照片，怀念下阳光里，一本书，一首曲子的时光。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/books_with_K701_s615f.jpg" alt></p>
<p>以前总是看别人的书评。当然在不看书评前，自己总是乱买书，结果总是有几本书比较糟糕。但好在数量不是很多。在即将重新启程的当前，自己也该写个书评总结回顾下。题外话，书看多了，也没啥好的。</p>
<h4 id="javascriptdavidflanagan">《JavaScript 权威指南》— David Flanagan</h4>
<p>厚的书总之给人无形的压迫感，JavaScript权威指南，也就是大家俗称的犀牛书，就是这么一本近千页的书，尽管其中有近三分之一是以参考手册的形式。这本书虽然全面，但是对于讲解过程却并不是很平和。在我看来，这更像是一本参考书而非教学书。不仅读来相对枯燥，整个逻辑更是程序员固有的棱角分明，我觉得对于初学者完全不适合。这部书大而全，讲述了JavaScript的方方面面，但深入度却都不是最佳。可以说这是本必备的不错的参考书，如果用作学习，恐怕下面讲的《JavaScript 高级程序设计》更为合适。</p>
<h4 id="javascriptdomjeremykeith">《JavaScript DOM 编程艺术》— Jeremy Keith</h4>
<p>这本书的翻译成编程艺术有点夸大其辞，其实英文名原名是《DOM Scripting Web Design with JavaScript and Document Obect Model》。主讲DOM，讲解也非常清晰，没有很多生僻的东西。因为内容牵扯的不深，即使是初学也能很好的阅读。</p>
<h4 id="javascriptnicholasczakas">《JavaScript 高级程序设计》— Nicholas C. Zakas</h4>
<p>关于JavaScript，我最喜欢的就是这本Zakas写的JavaScript高级程序设计。该书的层次结构非常清晰，而且内容非常精炼！我觉得这本书是最好的JS入门书籍，并且在很长的一段时间里，它扮演着睿智的讲师。文中涉及到的细节，特别是浏览器差异的细节，非常深入。可能对于没有编程经验的人来说，这本书看起来会有点费力。但完全不能因为“高级”二字而认为这本书很难。</p>
<h4 id="ajaxnicholasczakasjeremymcpeakjoefawcett">《Ajax 高级程序设计》— Nicholas C. Zakas, Jeremy McPeak, Joe Fawcett</h4>
<p>同样是Zakas的书，特点是讲解透彻。不过这本书没有完整看完，所以不妄加评论。</p>
<h4 id="csswebandybuddcameronmollsimoncollison">《精通 CSS 高级Web标准解决方案》— Andy Budd, Cameron Moll, Simon Collison</h4>
<p>超级薄的一本书！才200页。但确是本值得一看的好书。书里基本没有废话，涉及到的面也算的上广，最重要的是讲解的很透彻。包括浮动、定位，甚至是滑动门技术、CSS hack。但是强行把CSS hack 翻译成 CSS招数之类的，还是有点不习惯。除了翻译方面的一些小问题，这本书相当好。甚至语言风格也像是对话一般，读起来感觉不是很累。</p>
<h4 id="ericmeyercss1ericameyer">《Eric Meyer 谈 CSS(卷1)》— Eric A. Meyer</h4>
<h4 id="ericmeyercss2ericameyer">《Eric Meyer 谈 CSS(卷2)》— Eric A. Meyer</h4>
<p>两本实践的书，每本约10个案例，讲述了使用CSS的整个过程。我就是通过这23个例子走过来的:)。一开始虽然学了CSS但是对于使用完全没有实感。不过经过这两本书后就感觉大不一样了。如果作为实践过程，这两本非常有效果。但是如果作为参考，这两本就没什么价值了。</p>
<h4 id="xmldomajaxflashsasjacobs">《XML 基础教程 入门、DOM、Ajax与Flash》— Sas Jacobs</h4>
<p>又是一本涵盖面较为广泛的书，不仅仅讲述XML基本(事实上是大部分的内容)，还牵扯到XML的实际使用，特别是Ajax和Flash方面的应用。</p>
<h4 id="phprasmuslerdorfkevintatroeptermacintyre">《PHP 程序设计》— Rasmus Lerdorf, Kevin Tatroe, Pter MacIntyre</h4>
<h4 id="phpmysqlwebhughewilliams">《PHP &amp; MySQL Web 数据库应用开发指南》— Hugh E. Williams</h4>
<p>这两本书我都只是匆匆浏览了一下，以便了解PHP这门语言。PHP 程序设计中规中矩，更像一本语言参考书。后者则是既包含了语法的讲解，还穿插了MySQL的部分，最后更是用例子来指导整个教学。由于是浏览，对于内容的把握细致不到哪里，但我觉得前者是一本中规中矩的书，不能说讲的很出彩。后者则是一本理论和实践相结合的书，里面的例子很丰富，非常有参考价值。</p>
<h4 id="flashactionscript3">《Flash ActionScript 3 殿堂之路》— 孙颖</h4>
<p>这里唯一一本国人写的书。并且再次证明了，国人的书还有很长的路要走。我并不是说作者不行，只是并不是所有的人都适合写书，并不是强人写出的书就是好书。这本书我完整的看完了，作者试图用浅显的例子说明程序的思路，但这反而让已经有程序概念的人混淆。其中的好几个类比的例子并不是很合适。但在国内AS3刚刚起步缺乏优秀教程的时候，这本书适时地出现并填补了这个空白。</p>
<p>就写这么多吧，发觉自己不怎么会评论呢:)~</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[浏览器模式]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>关于浏览器模式，一直以来的理解是这样的：浏览器厂商出于那些老站点的向后兼容的目的，创建了两种模式。即标准模式(standards mode)和怪异模式(quirks mode)。在标准模式里，浏览器按照规范渲染页面，而在怪异模式里，浏览器以一种老式的或者是模拟老式浏览器的渲染方式表现页面。</p>
<p>这些并没有错，但是还不够全面和深入。当我回顾《CSS Mastery》的时候，也让我想起了很多渐渐淡忘的、并且也可能是无关紧要的其他碎片。<br>
比如，两种模式最大的差异的例子就是IE盒模型的解释。IE如此，Opera 7也是如此。再比如，Mozilla和Safari的第三种“准标准模式(almost standards mode)”，只是在处理表格的方式上有些细微的差异，其他与标准模式无异。等等。</p>
<p>一直以来，确保DOCTYPE的正确也是非常重要的事。浏览器根据DOCTYPE是否存在以及是何种DOCTYPE来确定渲染方式。如果总结如表，应该是这个样子。</p>
<table>
	<tr>
		<th>DOCTYPE</th>
		<th>MODE</th>
	</tr>
	<tr>
		<td>XHML + 形式完整DOCTYPE</td>
		<td><span style="color:green">标准模式</span></td>
	</tr>
	<tr>
		<td>HTML 4.01 + strict</td></tr></table>]]></description><link>https://swordair.com/browser-modes/</link><guid isPermaLink="false">59fe0cf19855590d8c9146cf</guid><category><![CDATA[CSS]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[IE6]]></category><category><![CDATA[IE7]]></category><category><![CDATA[UTF8]]></category><category><![CDATA[XHTML]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sat, 29 May 2010 13:07:46 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>关于浏览器模式，一直以来的理解是这样的：浏览器厂商出于那些老站点的向后兼容的目的，创建了两种模式。即标准模式(standards mode)和怪异模式(quirks mode)。在标准模式里，浏览器按照规范渲染页面，而在怪异模式里，浏览器以一种老式的或者是模拟老式浏览器的渲染方式表现页面。</p>
<p>这些并没有错，但是还不够全面和深入。当我回顾《CSS Mastery》的时候，也让我想起了很多渐渐淡忘的、并且也可能是无关紧要的其他碎片。<br>
比如，两种模式最大的差异的例子就是IE盒模型的解释。IE如此，Opera 7也是如此。再比如，Mozilla和Safari的第三种“准标准模式(almost standards mode)”，只是在处理表格的方式上有些细微的差异，其他与标准模式无异。等等。</p>
<p>一直以来，确保DOCTYPE的正确也是非常重要的事。浏览器根据DOCTYPE是否存在以及是何种DOCTYPE来确定渲染方式。如果总结如表，应该是这个样子。</p>
<table>
	<tr>
		<th>DOCTYPE</th>
		<th>MODE</th>
	</tr>
	<tr>
		<td>XHML + 形式完整DOCTYPE</td>
		<td><span style="color:green">标准模式</span></td>
	</tr>
	<tr>
		<td>HTML 4.01 + strict DTD</td>
		<td><span style="color:green">标准模式</span></td>
	</tr>
	<tr>
		<td>DOCTYPE包含URL和transitional DTD</td>
		<td><span style="color:green">标准模式</span></td>
	</tr>
	<tr>
		<td>DOCTYPE只包含transitional DTD</td>
		<td><span style="color:red;">怪异模式</span></td>
	</tr>
	<tr>
		<td>DOCTYPE不存在或形式不完整</td>
		<td><span style="color:red;">怪异模式</span></td>
	</tr>
</table>
这张由我根据《CSS Mastery》一书所列出的表并不怎么完整，[Alastair Campbell](http://www.google.com/profiles/alastc)有一个更加全面的[关于IE浏览器模式和DOCTYPE的表格](http://alastairc.ac/testing/IE_Doctypes/)。
<p>另外一个可能有点过时的，是Eric Meyer<a href="http://meyerweb.com/eric/dom/dtype/dtype-grid.html">关于DOCTYPE switching的表格</a>。多年之后我再去看这个链接的时候，发觉它居然还在:)<br>
而现在，我更喜欢看<a href="http://www.quirksmode.org/">QuirksMode</a>上的资料。</p>
<p>实际工作中，一般都不会忘记去添加DOCTYPE，所以很多情况都只是我们无意为之。比如IE6，当DOCTYPE不是页面的第一个元素的时候，就会进入怪异模式。这导致在页面开头添加XML文件的可选声明</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
</code></pre>
<p>也会使页面表现出人意料。之后的IE7修复了这个bug，但却不完全。在IE7中，一个xml声明并不会再导致进入怪异模式，但是这并不表示在DOCTYPE之前加入其他东西也能不触发。比如html注释。</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; 
&lt;!-- ... and keep IE7 in quirks mode --&gt; 
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; 
	&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</code></pre>
<p>这段代码依旧触发IE7的怪异模式，而触发的原因仅仅只是一段html注释。所以在DOCTYPE前，一段html注释也会导致怪异模式下不可预料的表现。</p>
<p>另一个需要小心的陷阱就是BOM头。当php处理UTF文件的时候会把BOM读成字符，include之后就可能会跑到DOCTYPE前面，从而再次触发IE的怪异模式。所以保存UTF8编码的时候可以选无BOM，BOM对于UTF8的意义本来就不大。</p>
<p>前段时间写的HTML5，DOCTYPE简化到只剩下</p>
<pre><code>&lt;!DOCTYPE html&gt;
</code></pre>
<p>对此w3cschool上的解释是这样的：HTML 4.01 中的 doctype 需要引用一个 DTD，这是因为 HTML 4.01 基于 SGML。HTML 5 不基于 SGML，也不需要引用 DTD，但是需要声明文档类型让浏览器按照它们应该的方式来运行。</p>
<p>事实证明，IE只要认到 <code>&lt;!DOCTYPE html</code> 这串字符就会用标准模式...</p>
<p>也许HTML5的日子真的就这么迫近了，新的总结，那就是后话了，呵呵。<br>
最后记录些DOCTYPE，发觉自己总是在复制他们~</p>
<p>HTML 4.01 Strict</p>
<pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
</code></pre>
<p>HTML 4.01 Frameset</p>
<pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Frameset//EN&quot; &quot;http://www.w3.org/TR/html4/frameset.dtd&quot;&gt;
</code></pre>
<p>HTML 4.01 Transitional</p>
<pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
</code></pre>
<p>XHTML 1.0 Strict</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</code></pre>
<p>XHTML 1.0 Frameset</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Frameset//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd&quot;&gt;
</code></pre>
<p>XHTML 1.0 Transitional</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
</code></pre>
<p>XHTML 1.1</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>