你真的知道css三種存在樣式(外聯樣式、內部樣式、內聯樣式)的區別嗎?


  css樣式在html中有三種存在形態:

  內聯樣式:<div style="display: none"></div>

  內部樣式: <style></style>

  外聯樣式:<link href="" />

  三者的優先級為:內聯樣式>內部樣式>外聯樣式。

  你可能會對內部樣式和外聯樣式的優先級產生懷疑。反正我懷疑過,是不是兩者的先后順序不同會產生覆蓋?當然經過測試,完全沒有這種情況。~至於原理,我覺得是和渲染機制有關。


  分割線~其實以上都是基礎知識,下面才是要講的重點。

  我們知道,在js中修改節點的長、寬、背景色等等樣式屬性是很常見的操作。比如

var targetObj = document.getElementById("test");
targetObj.style.width = "100px";

  如果targetObj本身就已經設定了寬度。在js中通過target.style.width去讀取那個既定寬度時,會出現:當寬度是在內聯中定義可以讀取到,如果寬度不是在內聯中定義,targetObj.style.width返回的就是一個空串。

 

  總結:

  targetObj.style.width去獲取的應該是在內聯中定義的寬度,如果寬度定義在非內聯中,永遠不會獲取到值,盡管你看到元素在瀏覽器中呈現得有長有高的;

  通過js代碼動態添加targetObj.style.width的優先級是最高的,但是你可以理解為它是添加到內聯樣式中,而事實也確實是如此。其實對於這句話其實還可以再補充一點點。對於targetObj.className = "newStyle",設置類設置新樣式的手段,請務必保證添加的類的樣式有足夠高的優先級,否則將看不到任何效果。你可以在.newStyle的樣式屬性定義中增加!important,提高優先級,但是這樣在ie6中不奏效,反而需要用帶下划線的屬性另外定義(hack技術)。我采用的方法基本是通過給.newStyle增加id標簽來提高其優先級。比如(#name li.newStyle和.newStyle相比,優先級不知高了幾個檔次),而且所有瀏覽器都支持。

  探索到這里,還可以繼續探索下去,對於樣式操作,有沒有更有效的方式?cssText,提供了批量處理功能,

  詳見另一篇博文:http://www.cnblogs.com/Iwillknow/p/3691490.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM