Colorモジュールと連携したカスタムテーマを作る

  •  
 
funada2019年12月4日 - 11:09 に投稿

Drupal8のコアテーマである"Bartik"は、テーマの設定画面(/admin/appearance/settings/bartik)で下図のようにカラーの設定変更ができる。
カスタムテーマで同様のことをする方法について説明する。

bartik_color_settings_0.png

 

必要なファイル構成

  • theme_name.info.yml
  • theme_name.libraries.yml
  • color/color.inc
  • css/colors.css
上記の4つが最低限必要なファイル。図にすると次の通り。
  • theme_name
    • theme_name.info.yml
    • theme_name.libraries.yml
    • color
      • color.inc
    • css
      • colors.css

テーマの設定画面でカラーを変更し「構成の保存」を押すと、変更内容に応じてcss/colors.cssを上書きしたcssファイルが、Colorモジュールによって/site/default/files/color/内に生成される。

ファイルの内容を記述

'custom_theme'という名前のカスタムテーマを作成する。

  • custom_theme.info.yml
    name: Custom Theme
    type: theme
    description: Custom Theme to show color module
    package: Other
    core: 8.x
    base theme: bartik
    libraries:
      - custom_theme/global-styling
  • custom_theme.libraries.yml
    global-styling:
      css:
        theme:
          css/colors.css: {}
  • color.inc
    <?php
    
    $info = [
      'fields' = [
        'content' => t('Content Background')
      ],
      'schemes' => [
        'default' => [
          'title' => t('Default'),
          'colors' => [
            'content' => '#decade'
          ]
        ]
      ]
    ];
    
    $info['css'] = ['css/colors.css'];

    ここでは'default'というカラーセットの中に、'content'というカラーを一つだけ定義している。
    一つのカラーセット内に複数のカラーを作ったり、カラーセットを複数定義したりすることもできる。ただし、'default'というカラーセットが必ず存在している必要がある。
    また、'default'内のカラーは全て異なる色を指定しなければならない。例えば「白」を二箇所で使いたい場合、一方を'#ffffff'、もう一方を'#fffffe'にするなどの工夫が必要となる。('default'以外のカラーセットで同じ色を使うのは問題ない)
    これはColorモジュールが、color.inc内の'default'カラーセットに設定されている色を基に、それと同じ色が(color:やbackground-color:として)設定されたセレクタをcolors.css内から探し、そのセレクタに対して色の変更を行うためである。不思議な仕様である。

  • colors.css
    .region-content {
      background-color: #decade;

    ここでは'region-content'というセレクタに対して背景色#decadeを指定している。これは'default'カラーセットで設定した色と完全に同じでなければならない。 また、別のセレクタで同じ色を使ってはいけない。同じ色を使うと、Colorモジュールがどちらのセレクタを書き換えれば良いのかわからないためである。
    (セレクタ名の選び方は、ベースにした'Bartik'のcss/colors.cssからコピーするか、サイト上の適当なページを開いてソースを見れば良い。)

画面の確認

custom_theme_color_settings.png

カラーセットは'default'のみ、カラー要素も'Content Background'一種類のみという簡素な設定画面だが、これで色の設定が行えるようになった。

'Content Background'に'#ee0000'を設定して保存してみると下のようになる。
content_bg_red.png

設定した通りコンテンツリージョンの背景が赤くなっている。(ベースの'Bartik'では'.region-content'にpaddingが設定されていないため、余白のない不格好なデザインになってしまった)
ヘッダーの青色などは、直前までデフォルトのテーマになっていた'Bartik'の設定が読み込まれていると思われる。

sites/default/files/color/を見ると、'#decade'が'#ee0000'に上書きされたcolors.cssファイルが生成されている。
.region-content {
  background-color: #ee0000;
}

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。