2010-01-11 43 views
1

我有大約200 CSS文件這樣使用:自動轉換CSS文件深色背景的

/** 
* GeSHi Dynamically Generated Stylesheet 
* -------------------------------------- 
* Dynamically generated stylesheet for bnf 
* CSS class: , CSS id: 
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann 
* (http://qbnz.com/highlighter/ and http://geshi.org/) 
* -------------------------------------- 
*/ 
.bnf .de1, .bnf .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} 
.bnf {font-family:monospace;} 
.bnf .imp {font-weight: bold; color: red;} 
.bnf li, .bnf .li1 {font-weight: normal; vertical-align:top;} 
.bnf .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} 
.bnf .li2 {font-weight: bold; vertical-align:top;} 
.bnf .sy0 {color: #000066; font-weight: bold;} 
.bnf .st0 {color: #a00;} 
.bnf .st1 {color: #a00;} 
.bnf .re0 {color: #007;} 
.bnf .ln-xtra, .bnf li.ln-xtra, .bnf div.ln-xtra {background-color: #ffc;} 
.bnf span.xtra { display:block; } 

但是在這些CSS文件的色彩設計就ok目光僅僅放在光(最好是白色)的背景。是否有一個算法(我可以用PHP代碼表示)我可以將這些文件中的顏色應用到黑色背景上(黑色背景),以使它們看起來很漂亮嗎?可能是我應該只是反轉所有的顏色?或者,還有更好的方法?

+2

不是真的適用於現有的代碼,但長期使用,考慮CSS的抽象 - LESS(http://lesscss.org/)和薩斯(http://sass-lang.com/)爲2倍的例子。這將允許您稍後操作並重新綁定您的CSS – 2010-01-11 10:07:41

+0

問題在於,CSS文件是由外部庫生成的,我不想修改它。 – 2010-01-11 10:26:38

回答

1

從一個CSS文件中找到的所有顏色值轉換爲其相反值,您可以使用此功能:

function inverseColors($css) { 
    preg_match_all('/#([a-f0-9]{6}|[a-f0-9]{3})/i', $css, $matches); 
    $original = $matches[0]; 
    $inversed = array(); 
    foreach($matches[1] as $key => $color) {  
     $parts = str_split($color, strlen($color) == 3 ? 1 : 2); 
     foreach($parts as &$part) { 
      $part = str_pad(dechex(255 - hexdec($part)), 2, 0, STR_PAD_LEFT); 
     } 
     $inversed[$key] = '#'.implode('', $parts);  
    } 

    $css = str_replace($original, $inversed, $css); 
    echo $css; 
} 

這將在兩個三個六位十六進制顏色值工作。但請注意,這不會產生最佳顏色,反轉顏色可能不適合您的佈局。通過爲所有顏色創建查找表並在新CSS中替換這些值,可以獲得更好的結果。

要遍歷所有的CSS文件,你可以用SPL類來完成遞歸搜索,然後使用

file_put_contents($file, inverseColors(file_get_contents($file))); 

替換CSS文件看看PHP's documentation about glob瞭解更多如何遞歸遍歷目錄(以評論部分)。

1

如果CSS文件包含一些顏色組,您可以先爲每種可用顏色定義新顏色。
然後你用一個file_get_contents函數將一個完整的CSS文件讀入一個變量。應用str_replace以其新值重新生成所有顏色,最後使用file_put_contents將文件寫回。 (用另外的名字嗎?)

要處理200個CSS文件,使用opendirreaddirclosedir讀取包含你的CSS文件的目錄中的內容,讓您能夠批量處理PHP代碼的顏色值轉換。