之前在在痞客邦使用 SyntaxHighlighter 為程式碼上色這篇文章提到如何使用,但在實際使用了一段時間之後就發現到一個問題:
overflow 的捲軸顯示不正常,尤其是在只有一行的程式碼時。
在不同瀏覽器下有不同的情況,例如:
- IE7: 高度少一行,所以只有一行又有捲軸時,區塊剩下捲軸,看不到程式碼。
- IE8: 只有一行時,該有捲軸卻沒有。(早期的 Firefox 版本也有,現在已經沒有了)
- Chrome 和 Safari: 垂直卷軸一直存在。
總之有很多問題,在花了不少時間研究之後,終於改出了一個稍微正常的版本,在 Firefox、Chrome 和 Safari 實測看起來都正常,但是 IE8 單行仍然不是很正常,但勉強可用;IE7 單行時正常,但多行時仍然會少一行而出現垂直卷軸。
除此之外,將關於的按鈕移到左邊,不會擋住程式碼。
修改 shCoreDefault.css 的部分程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter table, .syntaxhighlighter table td, .syntaxhighlighter table tr, .syntaxhighlighter table tbody, .syntaxhighlighter table thead, .syntaxhighlighter table caption, .syntaxhighlighter textarea { -moz-border-radius: 0 0 0 0 !important; -webkit-border-radius: 0 0 0 0 !important; background: none !important; border: 0 !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.13em !important; margin: 0 !important; outline: 0 !important; overflow: visible !important; padding: 0 !important; position: static !important; right: auto !important; text-align: left !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; min-height: inherit !important; min-height: auto !important; } .syntaxhighlighter .toolbar { position: absolute !important; top: 1px !important; width: 11px !important; height: 11px !important; font-size: 10px !important; z-index: 10 !important; }
|
另外針對 IE8 以下的版本額外使用另外的 CSS,並透過條件式註解額外引用:
1 2 3 4
| .syntaxhighlighter { min-height:33px !important; *min-height:34px !important; }
|
其他樣式也可以依這個方式修改。
這邊提供修改過的 shCoreDefault.css:
http://in2.csie.ncu.edu.tw/~emn178/ref/syntaxhighlighter_3.0.83/styles/shCoreDefault.css
http://in2.csie.ncu.edu.tw/~emn178/ref/syntaxhighlighter_3.0.83/styles/ie.css
可以直接將css引用改成下面這個
1 2 3 4
| <link type="text/css" rel="stylesheet" href="http://in2.csie.ncu.edu.tw/~emn178/ref/syntaxhighlighter_3.0.83/styles/shCoreDefault.css"/>
|