sencha touch 擴展篇之使用sass自定義主題樣式 (下)通過css修改官方組件樣式以及自定義圖標


  上一講我們講解了如何使用官方的api來修改主題樣式,這講我們繼續講解sass的樣式修改,

  編譯官方自帶的主題包

   在生成的項目以及官方sdk的目錄下,自帶了一些主題sass包,我們也可以通過修改sass文件來引入他們並進行編譯,下圖是官方sdk中自帶的主題樣式包:

  

  我們如何在sass文件中導入這些樣式呢,我們接着上一講創建的項目,打開項目下resources/sass文件夾下的app.scss文件,去掉上一講修改的樣式,如圖:

  

  如果你要引入對應的樣式,只需修改@import的路徑就可以了,這里我們將其修改為黑莓的樣式,我們對@import的路徑進行下修改:

  

  這里我們將default替換成了bb10,如果你要引入別的樣式,替換成別的樣式的文件夾名即可,接着我們用命令行工具對scss文件進行編譯,進入到sass文件夾目錄下,

  執行compass watch app.scss(實時監聽),也可以執行compass compile app.scss進行單次編譯,上講我們講過

  

  等css被overwrite覆蓋了,我們來運行下項目,如圖,我們的項目變成了黑莓的默認樣式:

  

  其他的附帶樣式大家可以自己去嘗試,這里我們就不多做演示了,接着我們講講如何在sass中通過css來修改官方組件,

  

 在sass中通過css修改官方組件

   默認情況下,sencha touch的組件都有一個baseCls來匹配他們的組件名稱,如下:

Ext.List -> .x-list
Ext.field.Text -> .x-field-text
Ext.field.Numer -> .x-field-number

  如果你修改了一個組件的baseCls屬性,你會發現他的所有樣式都不存在了,一般情況下我們很少修改baseCls屬性,如果是在原有組件基礎上疊加,可以設置cls屬性,相當於在組件原有dom結構上多加了個css屬性,我們可以通過修改這個css屬性來改變樣式,

  一般情況下,你可能並不是非常熟悉sencha touch組件的dom結構,這個時候,你就需要通過瀏覽器的dom查看工具來對組件進行查看,

  在chrome瀏覽器中,你可以把鼠標移到組件上右鍵審查元素,或者f12打開開發者工具,進行元素查看,這里我們以項目中的titlebar組件的文本內容為例:

  首先我們選中titlebar的文本內容,右鍵,選擇審查元素,如果你是英文版的chrome,那么對應的是inspect Element,

  

  點擊審查元素后,會打開chrome的開發者工具,如圖:

  

  

  接下來,你可以在右邊的樣式欄對你選中的元素屬性進行修改測試,我們將文本的顏色修改為紅色,

  

  這時我們可以看到項目中的標題文本變成了紅色,但是這並不是真正的項目演示效果,我們還需要將樣式拷貝到scss文件中進行編譯,我們右鍵復制該樣式到app.scss中,添加文本

顏色,如圖:

  

  等待命令行overwrite樣式,成功后我們刷新項目,如圖,文本顏色變成紅色了

  

  這樣我們就修改樣式成功了,不過在有些情況下,由於原有組件已經存在某些樣式,直接這么寫會無法修改樣式,此時,你需要修改css的優先級來讓你寫的樣式對

已有樣式進行強制覆蓋,比較常用的是!important(其他的方式大家可以去查看css優先級的相關資料)

  如下, 

.x-title .x-innerhtml {
  color:red !important;
}

 

  其他組件的修改方法以此類推,在sencha touch中,幾乎所有的組件都是可以任意修改樣式的,所以你可以隨意構建出自己想要的任何界面,

  接着我們介紹下大家遇到問題最多的自定義圖標

 

  使用sass自定義sencha touch 圖標

   從sencha touch 2.2版本開始,原有的圖片圖標都被替換成了字體圖標,網上的大部分教程都是2.2之前版本的,所以很多人參照那些教程達不到想要的效果,這里我們就來講講sencha touch 2.2版本之后的自定義圖標的方法,

  首先,我們了解下為什么要將圖片圖標替換為字體圖標呢,大家知道,不同的移動設備會有不同的屏幕尺寸,不同的屏幕密度,不同的分辨率,原生開發中我們可以為不同的分辨率指定不同的圖片,但是在html5開發中,要實現起來卻比較困難,一張圖片如果分辨率低了,那么在大屏高分辨率手機上就會模糊失真,因為圖片圖標是屬於位圖的,而使用自體圖標能很好地解決這個問題,因為字體圖標是矢量圖,不管放大多少倍也不會失真,並且通過css樣式就能輕松地改變它的大小跟顏色,另一方面,字體圖標相對圖片圖標來說占用的內存會少很多,而且加載速度也比圖片要快。

  了解了為什么使用字體圖標后,我們來看看如何在新版本的st中自定義icon圖標

  在sencha touch中,默認集成了pictos字體圖標,對照圖如下,上面為圖標,下面為對應的content文本:

  

  這些圖標都是pictos字體中已經自帶的,不過,為了減少css文件的大小,sencha touch默認只引入了小部分icon樣式,如user,locate等

  但是在sass文件中其實已經為我們封裝好了這些icon,我們打開項目文件下的touch/resources/themes/stylesheets/default/minxins/_Class.scss文件,可以看到已經定義好的引入或還未引入的icon樣式:

  

  這里return的即上面pictos圖中圖標所對應的文本content,name即可以通過@incloude icon(name)所對應的name,

  下面我們演示下如何使用:

  1.引入已有的圖標

  我們打開app.scss,這里我們引入一個圖標list,

  

  等待編譯結束,我們修改Main.js中tabpanel的welcometab的圖標home改為list

  

  運行項目,我們可以看到項目的home圖標變成list圖標了

  

  

  2.直接通過include定義指定的圖標

  

@include("test","H");

  這里的test是你定義的樣式名,而“H”則是pictos對照圖里字體圖標對應的文本,此時,我們便可以在iconCls中引用test來使用這個圖標了

 

  3.自定義字體:

  當然,我們也可以定義自己的字體圖標,給大家推薦個網站http://icomoon.io/,這個上面可以自己選擇自己喜歡的字體圖標,然后選擇后進行導出成字體圖標,導出的字體圖標我們可以利用css3的@font自定義字體,

  

  之后的使用中,你可以在app.scss文件直接定義字體圖標的樣式通過iconCls進行調用:

.icon-notice {
  font-family: "icomoon" !important;
  font-size: 23px !important;
  content: "\e60a";
}

  也可以通過官方api來引入自定義的字體圖標: 

@include icon('home', '\e60a', 'icomoon');

 

  4.自定義圖片圖標

  雖然不是很推薦,但在一些特殊情況下,比如你沒有字體圖標,或者圖標太復雜等情況,你可以自定義圖片圖標,

  很簡單

  直接定義css樣式的圖片背景,通過iconCls引入就行了 

.icon-home {
  background: url("../images/icon-home-press.png") no-repeat;
}

  我們在需要使用這個圖標的組件用iconCls:"icon-home"來引入就可以了,

  有的時候可能存在圖標大小不對的情況,也可以通過修改樣式來調整:

  

.icon-home, .icon-user, .icon-info, .icon-setting {
  width: 24px !important;
  height: 24px !important;
}

由於css優先級的問題,這里的!important不能少,否則寬高改變會無效

 

  

  

  

 

 

 

  


免責聲明!

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



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