ExtJS控件樣式修改及美化


Extjs項目對富客戶端開發提供了強有力的支持,甚至改變了前端的開發方式,使得開發變得更加趨向於面向組件。對界面的美化而言,也是根本性的改變。普通的網頁美工面對extjs項目根本無法下手,需要腳本編寫人員配合美工一起來完成工作(另外,spketIDE提供的樣式修改工具也不理想)

 

修改extjs的既有樣式

1.覆蓋extjs的樣式表

這里說的修改不是去改extjs本身的ext-all.css, 也不建議這樣去做,這樣會影響所有頁面;而應該是用自定義的css去覆蓋某些控件的默認樣式。大部分控件都有類似clsstyle的屬性供開發者去定制樣式;但具體要設置樣式的哪些屬性才能達到特定效果,api文檔就沒說了。比如要構建一個不帶邊框的panel,設置borderbodyborder屬性是不行的,還是會有1px的邊框。網上去搜就更難了,准備好萬能的firebug,自己摸索。

        打開firebug,切換到html選項卡,找到panel對應的div節點,如下圖:

panel控件的基准樣式是x-panel,其中的border-stylesolid就是設置邊框的,將其覆蓋為border-style:none就成無邊框的了。

具體方法:定義無邊框的樣式.my-panel-no-border{border-style:none},然后定義panel時設置baseCls屬性:

var mypanel = Ext.Panel({

  baseCls:'my-panel-no-border',

  //其他屬性

});

沒文檔,搜又不好搜,只能用這種最土的方法了。類似的還有個需求,checkboxgroup里面的checkbox以列模式擺放時,各個checkbox是對齊的;現在需要

checkbox縮進擺放,體現出一定的層次關系,就像樹形列表一樣。打開firebug,找checkbox的樣式,加上什么padding之類的屬性就行了。

 

2.采用js代碼動態修改,例如: Ext.get(this.header.query('ul')[0]).applyStyles('background-color:aqua');

 

3.大部分控件都有類似clsstyle的屬性供開發者去定制樣式,例如:bodyStyle: "background-color:#dfe8f6; "不過不推薦這樣設置背景色,除非不准備更換主題,常做的方法是把panel背景設為透明background:transparent;這樣就不妨礙更換主題了

 

Extjs項目推薦使用第1種方式進行自定義樣式。顯而易見的是第2種方式是有很多缺點的:

1.腳本被解釋執行后才可以生效,影響腳本的整體響應速度。

2.很難維護。在一個數千行的腳本中維護這些樣式代碼恐怕不是一件易事,更何況,代碼一旦交給其他人維護,更是大海撈針。

3.如果采用addClass之類方式還可能會引起腳本出錯。extjs源碼中大量使用樣式名稱作為選擇器,一旦就某個dom增加了其他class,很可能造成這些代碼失效。

 

不過,第2種方法有時候也不得不作為一種暴力手段而發揮作用。

 

所以要采用覆蓋extjs樣式名稱的方法,將這些覆蓋掉的樣式名稱集中在一個樣式表文件中。

 

/*tab文字居中*/ span.x-tab-strip-text{ text-align:center; } /*所有組件body的基礎樣式*/ .x-panel-body , .x-tab-panel-body{ /*background-color: transparent;*/ /*這個樣式使得panel透明了,這樣就可以看到背景圖或顏色,否則框架會將白色作為背景色*/ } /*tab的樣式,tab切換耳朵右邊的藍色部分*/ ul.x-tab-strip-top{ background-image: url("../images/table_titlebg.gif"); background-repeat:repeat-x; }

 

其中的樣式名稱都是在extjs里面最先定義的,然后在這個文件中再覆蓋之(大部分情況是覆蓋這個樣式的一部分定義而不是全部)。找到某個ui組件的樣式需要熟練使用firebug才可以,有些時候要一層層div的尋找,需要一些耐心和技巧。

1  .x-panel-body,.x-tab-panel-body

  這個樣式是panelbody部分,可參考ext-all.cssfirebug來了解其原來的定義。在開發中,我們需要自定義panel的背景色,比如有些情況下希望panel是透明的,這樣只需如下定義即可

   .x-panel-body  , .x-tab-panel-body{

    background-color: transparent;

}

2  .x-grid3

同樣的,grid組件的背景色是這里設置的,如果不設置,默認是白色的

3  .x-grid3-hd-row td  表頭的樣式

4  .x-grid3-row       表格中每一行的樣式

5  .x-grid3-row-alt    表格間隔色,框架會在在某些行上比如奇數行加上這個樣式

6  Tab頭文字居中

span.x-tab-strip-text{

         text-align:center;

}

    … …

    Extjs的樣式比較多也比較碎,需要一段時間來找到並覆蓋,建議在開發中抽出一段時間來專門進行這個工作,這對代碼的維護和移植都是很有好處的。

 


免責聲明!

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



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