1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OutSystemsで自動生成されるスタイルシートについて疑問に思ったことをService StudioとDevToolsで確かめてみた

Posted at

はじめに

現在、Front-end Developer Specialist (OutSystems 11)の試験勉強をしている中で、OutSystemsのCSSの優先順位について公式ドキュメント(カスケーディングスタイルシート - CSS)を読んでいたところ、

「このスタイルってどれのことを指してて、ブラウザやServiceStudioではどう出力されるの?」

という疑問が湧きました。
自動生成されるスタイルシートも含まれるので、普段の開発ではあまり意識しない部分があったりします。

そこで、Service Studioの画面とブラウザの開発者ツール(DevTools)を使って、各スタイルの適用箇所と出力結果を実例付きで深掘りしてみました!

今回の対象のスタイルシートは以下の二つです。

  • グリッドのContainerウィジェットのシステムスタイルシート
  • グリッド設定がThemeプロパティに定義されているテーマエクストラスタイルシート

こちらの2つは自動生成されるスタイルシートなので、普段の開発ではあまり意識しない部分があったりします。
試験ではそこまで具体的に深堀りされないかもしれないですが、イメージの助けになればいいなと思っています。


公式ドキュメントのスタイル適用順序

OutSystemsでは、以下の順序でスタイルが適用されます(後のものほど優先されます):

  1. グリッドのContainerウィジェットのシステムスタイルシート
  2. ブロックスタイルシート
  3. 基本テーマを含むテーマスタイルシート(指定された場合)
  4. 画面またはメールスタイルシート
  5. グリッド設定がThemeプロパティに定義されているテーマエクストラスタイルシート
  6. スタイルエディタ使用時にService Studioによって生成されるスタイル
  7. Attributes または Extended Properties で定義したインラインスタイル

使用環境

  • OutSystemsバージョン:11
  • Service Studioバージョン:11.55.22
  • ブラウザ:Google Chrome(DevTools使用)
  • アプリ種別:Reactive Web App

各項目をService StudioとDevToolsで確認してみた

① グリッドのContainerウィジェットのシステムスタイルシート

疑問: 
システムスタイルシートってどれのことでしょうか。
結論:
公式ドキュメントでシステムスタイルシートがどれを指しているのか明確な記載は見つけられませんでした。
調べた結果としては自動で生成されているBasic.cssというスタイルシートのことを指しているのかなと思っています。
このcssで定義されているクラスはブロックのスタイルシートで上書きできるからです。

  • Service Studioでの編集の仕方:恐らくできない。
  • 適用順序:1番目
  • DevToolsでの出力例
    DevToolsのSourceタブから見ると、生成されているスタイルシートを見ることができます。
    赤枠で囲ったcssが今回の対象です。
    {51862B13-FBB8-4276-8F25-5B6A7C8E93B8}.png
    中身を見てみると、以下のようなクラスが定義されています。
    {7E08E5E1-63D6-45D4-A568-46637A8CE386}.png
    ThemeGrid_ContainerはReactive Web Appでデフォルトで作成されるLayoutBaseブロックのContainerなどで使用されています。

Basic.cssがブロックのスタイルシートで上書きできることの確認

  1. Basic.cssで定義されているクラス(ThemeGrid_Container)が適用されているときの表示の確認  
    Block内に配置したContainerにThemeGrid_Containerを適用してみました。
    実装
    {7160F1F9-28A5-4F9C-9F8E-A4426376BCE0}.png
    ブラウザでどのように表示されるかを見てみます。
    border-boxなので黒いボーダーを設定している親要素に子要素が収まってますね。
    {C910BBBA-032F-462E-BE0E-1E8198E8ECB2}.png
    適用されているCSSをDevToolsのElementsタブでBasic.cssが適用されていることを確認できます。
    {49F6A2A3-0FE2-4EC2-8DBB-B3C5E3507AC0}.png

  2. Basic.cssで定義されているクラス(ThemeGrid_Container)をブロックのスタイルシートで上書きしたときの表示の確認  
    BlockのスタイルシートでBasic.cssで定義されているクラス(ThemeGrid_Container)を上書きしてみました。
    実装
    Style Sheet EditorでブロックのスタイルシートにThemeGrid_Containerクラスを定義します。
    {152FBB41-6D27-4C50-9C9E-94FB4B8E8415}.png
    ThemeGrid_Containerを適当にTextを表示するContainerに適用します。
    {8E04898D-D2DA-4505-965A-57CFD67C1F7D}.png
    ブラウザでどのように表示されるかを見てみます。
    子要素が親要素を突き抜けていて、ブロックのスタイルシートで上書きしたcontent-boxが適用されていることが見た目でもわかるかと思います。
    {D5694B6A-DEF5-4698-B41A-638C1739B826}.png
    適用されているCSSをDevToolsのElementsタブから確認します。
    {26F01762-2CFD-4B52-B8FC-D9F617B2035A}.png
    ブロックのスタイルシートが適用され、Basic.cssが上書きされていますね。


② グリッド設定がThemeプロパティに定義されているテーマエクストラスタイルシート

疑問: 
これも自動生成されるシートなので普段の開発ではあまり意識しない部分です。
どのシートのことを指しているのでしょうか。
結論:
Themeプロパティでグリッド設定を設定したときの内容が反映されています。

  • Service Studioでの場所:ThemeプロパティでColumnsを設定する
    {7C3152F3-A573-4C8B-B480-B6011240D49F}.png
  • 読み込みタイミング:5番目
  • DevToolsでの出力例
    DevToolsのSourceタブから、生成されているスタイルシートを確認します。
    赤枠で囲ったcssが今回の対象です。
    {1A06DC41-99B8-4D82-8381-B45C610FBAC9}.png
    中身を見ると、ThemeプロパティでColumnsを25に設定したため、ThemeGrid_Widthクラスが25まで作成されています。
    {E7FA37AC-CC35-49E3-9155-FFA2893B663E}.png

画面のスタイルシートがDebugTest.extra.cssで上書きできることの確認

一応文章からすると「グリッド設定がThemeプロパティに定義されているテーマエクストラスタイルシート」がDebugTest.extra.cssを指していることは間違いないと思うのですが、
公式の記載を見つけたわけではないので実際に上書きできるか確かめてみます。

  1. 画面のスタイルシートで定義されているクラス(ThemeGrid_Width25)をDebugTest.extra.cssで上書きしたときの表示の確認
    こちらがDebugTest.extra.cssで自動作成されたThemeGrid_Width25です。
    {C9B16D2B-B22D-4AA5-B57D-40AFF031E632}.png
    実装
    Style Sheet Editorで画面のスタイルシートにThemeGrid_Width25クラスを定義します
    {EC6023CC-B9D4-4955-92B0-1BB211D76192}.png
    ThemeGrid_Width25を適当にTextを表示するContainerに適用します。
    {BAA3DE49-A1EF-46DA-A04D-348A9A715C7B}.png
    ブラウザでどのように表示されるかを見てみます。
    cssの名前が省略されているのでわかりづらいですが、画面のスタイルシートで設定されたwidth:5%が打ち消されていますね。
    {BD3C6B35-C8E2-4C88-9A7B-8CF023670435}.png
    適用されているCSSをDevToolsのElementsタブから確認します。
    {786FD5CA-5B2F-4662-B6C5-3450E5E4FCB7}.png
    {4671AD1F-4F66-42FD-BA07-45088B9C3189}.png
  2. 画面のスタイルシートで定義されているクラス(ThemeGrid_Width25)の名前を変更したときの表示の確認 
    一応先ほど画面で設定したクラスの名前をDebugTest.extra.cssと異なるものに変えてみて表示を確認します。
    実装
    Style Sheet Editorで画面のスタイルシートにThemeGrid_Width25クラスの名前をThemeGrid_Width251に変更します。
    {2CA9C2DF-D1BB-47AB-A736-469E03CC3BE2}.png
    Containerに適用します。
    {F74465DD-69F2-4036-88AD-A6243C75FE96}.png
    ブラウザでどのように表示されるかを見てみます。
    {C90FB332-0408-4D0C-ACF0-921A40F86C4F}.png
    適用されているCSSをDevToolsのElementsタブから確認します。
    {2B9FA308-79C6-4DC4-80F6-AA948E377E9A}.png
    画面のスタイルシートで定義したwidth:5%が上書きされずに効いていることが分かりますね。

まとめ

今回はOutsystemsの自動生成されるスタイルシートについて調べてみました。
フロントエンドについて勉強している方の勉強の参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?