0
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?

More than 3 years have passed since last update.

kintone cssを適用する方法

Posted at

動機

kintoneアプリを作成していて、画面の項目にcssを適用したいときがある。
個人的にjavascriptとcssを合わせて比較的シンプルに適用する方法ではないかと思うので備忘のため記録に残す。

注意

kintoneの仕様が変わったら使えなくなる可能性がある。

画面イメージ

2つのテキストボックスにスタイルを適用する例で示す。

image.png

その1 テキストボックスにスタイルを適用

デベロッパーツールでHTMLの入力項目を確認するとclass="input-text-cybozu"とある。
input-text-cybozu目掛けてスタイルを適用すれば良さそう。

image.png

やってみる

背景を黄色にしてみる。

.input-text-cybozu {
  background-color: yellow !important; // !importantを付けないと上書きできない
}

ファイルに保存して、アプリに登録する。

登録手順

1. JavaScript / CSSでカスタマイズを開く

image.png

2. PC用のCSSファイルの「アップロードして追加」で作成したCSSファイルを登録する。

image.png

3. 保存 & アプリの更新

4. 確認

image.png

その2 特定の項目にスタイルを適用

デベロッパーツールでHTMLの入力項目を確認する。
なにやらテキストボックスの要素に項目を一意に特定できそうな番号がある。
この番号目掛けてスタイルを適用すれば良さそう。

image.png

やってみる

# 31_5519913-:1d-text {
  background-color: yellow !important; // !importantを付けないと上書きできない
}

CSSの登録手順は、その1と同様のため、割愛

1. 確認

image.png

変わらず。。。

id属性が数値から始まる場合、属性セレクターで書く必要がある模様。

[id="31_5519913-:1d-text"] {
  background-color: yellow !important; // !importantを付けないと上書きできない
}

2. 再確認

[id="31_5519913-:1d-text"] {
background-color: yellow !important; // !importantを付けないと上書きできない
}

できた!

その3 javascriptと絡めてCSSを伝わりやすい定義で作る!

その2でkintoneでは1つの要素を特定する時、一意の番号が払い出されていることがわかった。

確認すると、同じ番号は、4箇所(field-xxxx, label-xxxx, value-xxxx, 31_xxxx:1d-text)登場している。

image.png

kintoneはcybozu.data.page.FORM_DATA.schema.table.fieldListで画面項目の一覧が取得できる。
image.png

上記を踏まえて、javascriptとcssでスタイルを適用する。

javascript

追加、更新、詳細画面を表示した時のイベントを定義する。

(() => {
  "use strict";
  kintone.events.on(
    [
      "app.record.detail.show",
      "app.record.create.show",
      "app.record.edit.show",
    ],
    (event) => {
      const fieldArray = Object.values(
        cybozu.data.page.FORM_DATA.schema.table.fieldList
      ).map((field) => ({ [field.var]: field.id }));
      const fields = Object.assign({}, ...fieldArray.map((field) => field));
      const nameId = fields["名前"];
      const element = document.getElementsByClassName(`field-${nameId}`);
      element[0].classList.add("required");

      return event;
    }
  );
})();

css

.required {
  background-color: pink;
}
.required input {
  background-color: yellow !important;
}

1.CSSの登録手順は、その1と同様のため割愛
  javascriptの登録手順はCSSと同様。

2. 確認

image.png

できた。

htmlを確認すると、field-5519913rquiredが設定されている。

image.png

javascriptのコーディングが入るが、CSSで意味のわかるclass属性で定義ができるので、個人的にわかりやすくなったかな。

javascript lessでできるようにするには...

プラグインにすればいいのだろうか??

まだ知識が浅くてよくわからない。

0
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
0
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?