XCSSファイル(Themeのスタイルも含む)では、スタイル用に決められた構造によって定義する必要があります。
スタイルの定義は、ソースファイルを直接編集、またはnexacro studioのスタイルエディタにて編集を行います。
スタイルの構造
スタイルは、下記の図のようにCSSセレクターによって適用範囲を決定し、その配下のスタイル定義エリアへ「プロパティ名 : バリュー値;」の記述にて各スタイル情報を列挙します。スタイル定義エリアへは、設定したいプロパティのみ記述し、変更の必要がないプロパティは削除またはバリュー値なしにします。
.Button { background : #c0504d; }
CSSセレクター
セレクターの種類
nexacro platformのセレクターには①Selector、②Child Selector、③Class Selectorの3種類があり、セレクターを指定する際の記述順は①→③→②になります。
Selector
スタイルプロパティを適用する対象を指定します。
下記は、Buttonコンポーネントに対してスタイルを適用する場合の例です。
.Button
Child Selector
下位コントロールにスタイルプロパティを適用する対象を指定します。
下記は、Comboコンポーネントのテキスト編集領域に対してスタイルを適用する場合の例です。親Selectorである「.Combo」とChild Selectorである「.comboedit」の間には、" "(半角スペース)を1つ挿入する必要があります。
.Combo .comboedit
nexacro platformでの「Child Selector」は、標準CSSのChild Selectorとは異なります。形式は標準CSSの子孫セレクター(Descendant selectors)と類似しています。
Class Selector
cssclassプロパティ値として設定するクラス名に該当します。セレクターの定義としてクラス名を指定する際には必ず先頭にObject Type Nameを付ける必要があります。
user cssclass名は必ずObject Type Nameと一緒に使用する必要があります。
下記は、Buttonコンポーネントに対して「myButton」というクラス名を指定する場合の例です。
.Button.myButton
user cssclassの指定はThemeのStyleでは指定できません。アプリケーションと紐づけるXCSSファイルでのみ指定できます。
セレクターの優先度
セレクターにはスタイルが適用される優先度があります。
Class Selector >(Child Selector)> Selectorの順で適用されます。
コンポーネントの場合
Comboコンポーネントの例
1.Combo.myCombo
2.Combo
Class Selectorの定義があった場合、Selectorの定義より優先されます。
コントロールの場合
Comboコンポーネントの例
1.Combo.myCombo .dropbutton
2.Combo .dropbutton
3.ButtonControl
ドロップダウンボタン(dropbutton)に対して、Class Selectorの定義があった場合、Child Selectorの定義より優先されます。また、Class Selectorの定義もChild Selectorの定義もない場合はButtonControlの定義が適用されます。
ステータス情報
nexacro platformでは、利用者の操作などで変化するコンポーネントのステータス情報として、statusとuserstatusを指定することができます。
ステータス一覧
区分 | ステータス名 | 説明 |
---|---|---|
status | enabled | 活性状態(enable:true) |
disabled | 非活性状態(enable:false) | |
focused | フォーカスを受けている状態 | |
mouseover | コンポーネント領域にマウスカーソルがある状態 | |
deactivate | 無効状態 | |
readonly | 読み取り専用状態(readonly:true) | |
userstatus | pushed | ボタンが押されている状態 |
selected | コンポーネント内部の項目が選択された状態 | |
blinked | 点滅状態 | |
nulltext | 値がnullの状態 | |
invalidtext | 無効な値がバインドもしくは設定された状態 |
ステータスの記述方法
ステータスは[]で囲んで記述します。記述例は下記のとおりです。
//Comboコンポーネントに対してフォーカスを受けている状態 .Combo[status=focused] //Comboコンポーネントのボタン領域に対してマウスオーバー状態 .Combo .comboedit[status=focused] //Buttonコンポーネントのクラス名「myButton」に対してボタンが押されている状態 .Button.myButton[userstatus=pushed]
下位コントロールに伝播するstatusは、disabled / enabled / readonlyの3つです。例えば、Calendarコンポーネントの statusが「readonly」である場合、calendareditも「readonly」になります。しかし、Cellのstatusが「selected」であっても、cellcheckboxには影響しません。
statusとusetstatusはそれぞれ1つずつ指定できます。
また、statusとuserstatusの組み合わせによる指定は可能です。
例)
.Combo .comboedit[status=focused][userstatus=nulltext]・・・可
.Button.myButton[userstatus=pushed][userstatus=selcted]・・・不可
下位コントロールのステータスの記述時に、親コンポーネントのstatusの後ろに記述することはできません。
例)
.Radio .radioitem[status=mouseover][userstatus=selected] ・・・可
.Radio[status=mouseover] .radioitem[userstatus=selected] ・・・不可
スタイルプロパティ処理の優先度
同一レベル(コントロール)
1.0. inline 1.1. class + status 1.2. status 1.3. typename + status 1.4. class + normal 1.5. normal 1.6. control normal
親レベル(上位継承)
2.0. inline 2.1. class + status 2.2. status 2.3. typename + status 2.4. class + normal 2.5. normal 2.6. control normal
例えば、Comboコンポーネントのドロップボタンにマウスオーバー時のスタイルプロパティの処理順は下記のとおりです。
レベル | 処理順 | スタイル |
---|---|---|
同一レベル(コントロール) | 1.0. inline | - |
1.1. class + status | .Combo.myCombo .dropbutton[status=mouseover] | |
1.2. status | .Combo .dropbutton[status=mouseover] | |
1.3. typename + status | .ButtonControl[status=mouseover] | |
1.4. class + normal | .Combo.myCombo .dropbutton | |
1.5. normal | .Combo .dropbutton | |
1.6. control normal | .ButtonControl | |
親レベル(上位継承) | 2.0. inline | - |
2.1. class + status | .Combo.myCombo[status=mouseover] | |
2.2. status | .Combo[status=mouseover] | |
2.3. typename + status | - | |
2.4. class + normal | .Combo.myCombo | |
2.5. normal | .Combo | |
2.6. control normal | - |