2011-06-01 34 views
1

我知道有此規定將內容添加到網頁一樣的方法:http://nooshu.com/adding-content-using-css3是否可以使用css3聲明js事件和/或函數?

但是...我不知道是否還有申報中的CSS一個js事件中給出選擇的節點上,像一個可能性:

.myclass { 
    declare-js-event: "onclick"; 
    declare-js-function: "alert('I've been clicked!')" 
} 

如果(正如我強烈認爲)這是不可能的,那麼這些功能至少在未來的css v4計劃或排除設計和css將永遠無法做到這樣的事情?

回答

1

您可以使用IE的expression()函數在CSS中聲明JavaScript表達式和函數。另一種方法是使用url()函數。

例如:

// Expression() 
selector { width: expression((document.body.clientWidth > 1024)? "1200px" : "960px"); } 

// URL() 
selector { background: url("javascript: alert('XSS')"); } 

表達的IE {6,7}添加有時被用來掩蓋了在用於IE交叉兼容性一些額外的邏輯;不過,建議不要使用expression()

隨着cx42net的迴應,CSS處理表示,而JavaScript處理頁面的行爲。在CSS中使用JavaScript並不常見,並且通常將其自身表現爲XSS攻擊,如上面的url()示例所示。

有可能使用JavaScript是較老的瀏覽器版本,但我認爲他們正在慢慢取消對它的支持,因爲IE8 +不再支持expression()。也就是說,我不推薦在CSS中使用JavaScript,特別是如果你期望你的網站是Forward Compatible

+0

沒錯,我沒有想到exprseion或url,好主意:)(但是我仍然相信在css中這樣做很愚蠢,不是嗎?) – 2011-06-01 10:36:31

1

不,這是不可能的,我不認爲它計劃在將來添加。

原因很簡單,css代表「級聯樣式表」,所以它的目標是改變html頁面的可視化效果。

不添加功能,它的作品保留給Javascript。

但是你爲什麼要這樣做?你可以在你的html文件中包含一個script.js,並在dom準備好時調用你想要的。在jQuery中有這樣的東西:

$(function() { 
    // do what you want here 
    // add onclick event on what you want 
    // etc 
} 
+0

好吧,他們添加了一種添加內容的方式......我認爲它不像將css與js集成在一起那麼邪惡,因爲它全部是關於選擇節點,這是js框架現在做的一件事情,它會讓網站變慢js是一種高級慢語言。 – rsk82 2011-06-01 10:20:15

+0

是的,我可以理解內容,但javscript比「只是文本」更復雜。最終,添加一個可以調用函數的事件爲什麼不行,但是將js函數的內容寫入css並不是我會發布的內容:這會讓事情變得更加複雜(我的js代碼在哪裏做這些奇怪的事情頁?)。 – 2011-06-01 10:31:50

+1

而且,通過CSS添加的內容首先是爲了更好的呈現,比如在任何列表項之前添加「>>」,或者替換爲花哨字符。不改變整個html內容。 (用於最初使用,但我確定我們可以在Web中找到示例,顯示相反的結果:p) – 2011-06-01 10:32:56

相關問題