睡蓮‧池水間

Guest
2012-May-20  
0 位會員和 11 位訪客在線上

文章 :: 語言集

IE 7 下慎用 :first-letter 偽元素

睡蓮
 
池水間 
  不久前在正體中文站替一位網友解決 IE 8下佈景問題時,發現用 IE 7 及 6 版本進入網站,CPU 會飈高,持續載入中的空白畫面久久沒有回應,被逼要中止程式,而 IE 8 及其他瀏覽器就無此問題。( 補註:更正為只有 IE 7版本,IE 6 的於後來經再測試後確定無問題。)

  是什麼原因導致 CPU 飈高?這是繼上次替網友測試某專業佈景網站所提供的佈景而發現<title>排序問題後的另一個挑戰自己的難題 ...

  在我的認知裡,會因佈景問題造成 CPU 飈高的,大多是出在 javascript 上,但在網友提供某免費佈景網站的佈景裡,除了引用一條 js 檔不存在的死連結外,根本就沒有用到任何 javascript。眼看 theme.html 內容比官方的內建佈景還要簡單不過,於是就出動我最常用於查找錯誤的註解法,鎖定 theme.html 中的某一行結構,遁著語法中的 id,最終在 CSS 裡抓出元凶了。

  過去我所見過的 CSS bug,不外乎都是內容顯示不正常,會造成 CPU 飈高失去回應的倒是首見。對於以手寫代碼為樂、喜歡研究代碼的我,更是挑起了興趣,打開 notepad++ 測將起來。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW">
<head>            
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>CSS偽元素bug</title>
<style type="text/css">
 /*<![CDATA[*/
#bug {  position:absolute; }
h1:first-letter {color:#f00;}
em {color:#38bd00; background:#efefef; }
/*]]>*/
</style>
</head>
<body>
<h1 id="bug"><em>CSS偽元素bug</em></h1>
</body>
</html>

  上例代碼中橘色是 CSS 偽元素,而綠色就是關鍵地方,當 :first-letter 遇上 ID 或 Class 選擇器、絕對定位、及母元素下的內聯元素 + background 這些組合,則 CPU 飈高條件成立。 ( 想試驗上例代碼的可以在 IE 7 下點按這裡打開實驗板,將上面代碼全複製進去觀看結果。


1) ID 或 Class 選擇器:

假若將此選擇器換成類型選擇器或屬性選擇器,則將失去效用,使 IE 7 下的 CPU 正常。( 實驗板 )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW">
<head>            
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>CSS偽元素bug</title>
<style type="text/css">
 /*<![CDATA[*/
h1 {  position:absolute; }
h1:first-letter {color:#f00;}
em {color:#38bd00; background:#efefef;}
/*]]>*/
</style>
</head>
<body>
<h1 id="bug"><em>CSS偽元素bug</em></h1>
</body>
</html>


2) 絕對定位 ( position:absolute ):

若將絕對定位換成相對定位或是拿掉不用,也將失去效用,使 IE 7 下的 CPU 正常。( 實驗板 )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW">
<head>            
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>CSS偽元素bug</title>
<style type="text/css">
 /*<![CDATA[*/
#bug {  position:relative; }
h1:first-letter {color:#f00;}
em {color:#38bd00; background:#efefef;}
/*]]>*/
</style>
</head>
<body>
<h1 id="bug"><em>CSS偽元素bug</em></h1>
</body>
</html>


3) 母元素下的內聯元素 + background :

內聯元素必須是像下面母元素之下所有文字全包圍起來才符合條件

<h1 id="bug"><em>CSS偽元素bug</em></h1>

若是從文字中插入如下黃色地方,便會失去效用。( 實驗板 )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW">
<head>            
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>CSS偽元素bug</title>
<style type="text/css">
 /*<![CDATA[*/
#bug {  position:absolute; }
h1:first-letter {color:#f00;}
em {color:#38bd00; background:#efefef; }
/*]]>*/
</style>
</head>
<body>
<h1 id="bug">CSS偽元素<em>bug</em></h1>
</body>
</html>

除此之外,將內聯元素改為區塊元素或拿掉 background,也同樣會使 CPU 正常,但是 :first-letter 偽元素會因內聯元素變成區塊元素而失去效果,而拿掉 background 便會完全看不見任何一字。


    «« HTML 5 新功能演示 你需要知道的CSS3動畫技術 »»    

引用

  • 文章地址: http://waterlily-lsl.com/modules/article/view.article.php/c2/231
  • 引用地址: http://waterlily-lsl.com/modules/article/trackback.php/231

評分

10
9
8
7
6
5
4
3
2
1


 

API: RSS | RDF | ATOM

回覆及設定

    關閉


 

最 新 發 表 及 資 訊 區

此為池水間 banner ,需要安裝 Adobe Flash Player 才能觀看內容。

最新留言

最新留言:2012-Jan-6 11:13am
留言編號:76
留言者: wuji888
網主回覆:
總留言數: 71

前往萍踪留影

造訪統計

今天:140
昨天:751
本週:140
本月:10156
總計:431393
平均:311

連結

Powered By XOOPS
Valid XHTML 1.1
Valid CSS 3
除另有註明外,本站內容均採用 Creative Commons 姓名標示-非商業性-相同方式分享 3.0 授權條款授權
登 入