作者elan (IE是最棒的浏览器)
看板Web_Design
标题Re: [问题] CSS的外部档案汇入....
时间Tue Aug 1 21:46:05 2006
: : 关於这个
: : http://www.w3.org/TR/html4/struct/links.html#edef-LINK
: : 可是我直接加在Link 的地方,
: : <LINK href="学习与评量研究室-刘子键副教授 着作.files/style.css"
: : type="text/css" rel="stylesheet" charset="Big5" />
: : 还是没变耶,就是原po的问题一样还是在
: : 而用 @charset "Big5" 却可以用,可解决原po问题
: : 两个不是应该要有一样的效能吗? 怎麽一个有用处,另一个没作用?
: 哈哈 我看漏了一件事 原po的网页并没有DOCTYPE宣告
: 他的网页在任何modern的浏览器都会以旧规格的HTML来render(Quirks-mode)
: 而旧规格的HTML(指XHTML/HTML4之前的规格)
: <link>是没有charset这个属性的
:→ ileadu:? 我手动帮他加入doctype 一样没有效果说... 08/01 12:29
:→ elan:你加入那一种doctype? 08/01 12:30
:→ ileadu:HTML 4.01 Strict 跟 XHTML 1.1 Strict ^^ 08/01 12:57
:→ ileadu:两个都不行. 08/01 12:58
:推 mdfh:我试过用 transitional 也一样 08/01 14:26
:推 mdfh:又另外如果我把style.css改成 utf-8就OK了? 08/01 14:30
:→ ileadu:楼上 对啊~这篇是更深入的探讨 link 如何加charset才有效 08/01 16:39
刚刚经过测试 我发现可能有其他的原因
(要不是有原po的例子 我以前也不会对IE以<link>引入外部css
做这麽多的观察 我之前从未遇过这种问题):
先说明一下情况, 原po的网页write.html是指定定utf-8编码,
而他的样式表style.css第一行有这样一个宣告:
* { font-size: 12px; font-family:Tahoma, 新细明体;}
里面font-family有指定了'新细明体', 这是样式表里唯一的非拉丁字资料,
以big5编码储存
原po以<link href="style.css" rel="stylesheet" type="text/css" />引入style.css
接下来是我在IE6上观察推测的结果,
1. 样式表第一行之後的定义全失效了 唯一可能的原因就是IE的parsing bug
(来自以错误的encoding去解译style.css的内文) 当IE遇到'新细明体'以错误的
encoding去解读而未能正确解译第一行最後面的 ;} 所以接在後面的定义全因
文法错误而未引入. 然後我就试试看把第一行的定义做点小修改:
* { font-size: 12px; font-family:Tahoma, 新细明体 ;}
^
插一个空格进去
这样应该能强迫IE跳脱parsing bug, 接着正确解译定义及宣告的结束 ';}'
果然 後续的styles又被正确的引入了.(当然, 我猜font-family也不会有
'正确'的新细明体定义)
2. 既然推测是encoding造成的parsing bug, 我就试着让IE以big5编码去去解读
以<link>引进的style.css, 理所当然依照W3C的规格 加入charset="Big5"
(前面文章已经说明在外部样式表内宣告 @charset "Big5"; 可以work, 不再赘述
另外我要向版友们致歉, 我从没试过<link>的charset功能,
只是照本宣科依照规格推文在版上) 就如ilead与mdfh兄所测试的一样, charset属性
并无作用(虽然MSDN上有说明支援这个属性). 这时, 我回忆起microsoft软体的
坏名声, 直觉的做了一件事, 就是网页的指定编码改成big5, style.css果然是
成功的引入了, 所以, 虽然依照W3C的规格, UA应该要 'respect' <link>元素
的charset属性做指定的编码, 但IE似乎还是以网页本身的编码来解译<link>所
引进的样式表 (做这个测试前我已将原po的网页加入XHTML Strict的DOCTYPE,
以standard-compliant模式来render)
3. 因此, 回到原po的问题, 根据观察的结果:
* 让你的网页与外部样式表使用相同的编码, 或者是
* 你外部样式表内的中文用什麽编码, 就在第一行宣告 @charset "[encoding]";
的规则(这个保证work!)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.10.144
1F:→ elan:这并非广泛的测试 希望其他版友对此问题多加回馈 08/01 21:46
2F:推 mdfh:没想到忘了改编码牵涉到一堆东西 ^^; 08/02 02:37
3F:→ elan:有人可以用IE7试试看吗? 08/02 15:29
4F:→ elan:回mdfh, 我认为这并非你'忘了'改编码, 是IE的bug造成你的 08/02 15:48
5F:→ elan:困扰 08/02 15:50
6F:→ elan:没有理由强制要网页与外部样式表用一样编码 08/02 15:50