2012-02-03 75 views
0

我正在開發一個新的大型PHP/Symfony 2項目,並決定使用Sass/SCSS和Compass,我發現它們都非常適合以現代方式管理CSS。但是,仍然有一個問題我找不到任何答案:如何將PHP變量放在原始SCSS文件中,並將它們保存在輸出CSS文件中?如何讓PHP變量保留在SASS/SCSS生成的CSS樣式表中?

這不是一個細節,因爲如果沒有這個功能,就沒有辦法將Sass生成的樣式表與PHP進行對接,這在一些大型項目中可能會非常有限。

要清楚,並以此爲出發點,以經典的方式,我們可以用PHP接口CSS主要是這樣的:

<link type="text/css" href="layout.css.php?my_var=#CC0000" rel="stylesheet" /> 

,然後在僞CSS文件layout.css.php像在上面的例子:

<?php header("Content-type: text/css");?> 

.my_color { 
    background-color:<?=$_GET['my_var']?>; 
} 

現在,我怎麼可以做一些等值的SCSS /指南針?換句話說,如何在最初的CSS輸出文件中保留原始SCSS文件中的一些PHP變量,以便像上面的例子那樣,可以使用PHP實時進一步分析它?

當我嘗試這樣做時,由於PHP語法,Compass和SASS編譯器失敗。

Phamlp有一些針對PHP的過濾器,它只適用於haml模板,而不適用於SCSS文件。

LESSphp似乎有such functionality,但很多人似乎正在從LESS轉到SCSS/Compass,那麼最好的方法是什麼?

非常感謝。

回答

3

我真的不認爲你想做你想做的事情。

一個像薩斯語言的主要優點,LESS,和手寫筆(注:我相信Stylus比薩斯一個更強大,更靈活的語言)是他們進行預處理到裸露CSS然後可以通過瀏覽器或緩存由CDN分發。如果您通過PHP運行其他靜態內容,則完全失去了這一優勢。

我相信,在這個時代有動態風格內容的正確方法就像你似乎在試圖實現是使用JavaScript:讓應用程序提供一個靜態JS文件,然後用動態數據增加它。在這個例子中,你將會有一個函數向服務器詢問「用戶喜歡的背景顏色是什麼?」 (通過XMLHttpRequest或通過查看與原始的PHP編寫的頁面一起交付的JSON對象)。然後,它可以使用諸如jQuery之類的輔助庫來在適當的元素或類上設置適當的屬性。

此方法與服務器端CSS生成相比具有很大的優勢(比如適當的緩存,更大量的服務器端靜態內容,這意味着更好的站點響應能力,改善的問題分離,更易於實現備用UI,沒有設置顯示屬性,...) - 而且唯一的缺點是它需要一個支持JS的瀏覽器。請考慮一下。

+0

你說得對,我只是用這個基本的例子來大幅度簡化目的,我的真實環境要複雜得多(通過adapt.js驅動960.gs流體和響應式佈局,即:主體列將使用grid_24樣式,當右列沒有PHP返回的記錄時,或grid_17,而如果右列有內容,所以這種「服務器範圍」條件在這種情況下不是緩存問題。有用的,可以解決我的問題(與另一個技術層落實:-) 非常感謝您的詳細解答 – user1186503 2012-02-03 11:47:14

+0

考慮拆分靜態的東西與動態的東西這適用於CSS和JS,用戶屬性只需創建另一個js文件,其中包含一個對象user.properties ll變量。靜態文件將使用此對象,因此可以緩存。 – 2012-02-03 14:08:24