Air Datepickerライブラリを活用し、任意のカレンダーアイコンをinput日付入力欄に設定する
はじめに
任意のカレンダーアイコンを日付表示用のinputに設定したい、とクライアントからの依頼がありました。最初はCSSのみで対応していたのですが、type="date"のデフォルト表示はブラウザによって差異があるため、少し手こずってしまいました。
そこで、日付表示用のライブラリを使うことにしました。Air Datepickerというライブラリを使えば、カレンダーアイコン画像の設定や言語設定など様々なカスタマイズが簡単に行えます。
Air Datepickerライブラリを適用
インストールできたら、モジュールとCSSをインポートしてください。
//Air Datepickerをインストール
yarn add air-datepicker
//Air Datepickerモジュール & cssをインポート
import AirDatepicker from 'air-datepicker';
import 'air-datepicker/air-datepicker.css';
次に、input要素を指定したAir Datepickerのインスタンスを作成します。
const config = {
// オプションを指定する
};
new AirDatepicker("#input-calendar-date", config);
表示が変わるのが確認できました。
Chrome(Version 124.0.6367.91 )
⇩
カレンダー画像を設定
その際、疑似要素を適用するためにinputをdivで囲ってください。
<div class="wrapper">
<input
id="input-calendar-date"
type="text"
class="border border-gray-400 p-2"
placeholder="カレンダーを表示"
/>
</div>
疑似要素で画像を設置すると、その部分がクリックできなくなります。それを防ぐため、inputエリアの背景色を透明にし、カレンダー画像のz-indexレベルを下げます。
.wrapper {
position: relative;
}
.wrapper:after {
content: "";
width: 2rem;
height: 2rem;
display: inline-block;
background-image: url(/src/files/calendar.png);
background-size: contain;
background-repeat: no-repeat;
position: absolute;
right: 4%;
top: 7%;
z-index: -10;
}
input[type="text"] {
width: 100%;
background-color: transparent;
cursor: pointer;
}
カレンダー画像を設定することができました。カレンダー画像の部分もクリック可能です。
Air Datepickerのオプション設定を試す
import localeJa from "air-datepicker/locale/ja";
const config = {
locale: localeJa, // 日本語に変更
isMobile: true, // モーダル表示
// 5日、15日、25日に絵文字を表示
onRenderCell({ date, cellType }: { date: Date; cellType: string }) {
const dates = [5,15,25],
emoji = ["👍"],
isDay = cellType === "day",
customDate = date.getDate(),
shouldChangeContent = isDay && dates.includes(customDate),
randomEmoji = emoji[Math.floor(Math.random() * emoji.length)];
return {
html: shouldChangeContent ? randomEmoji : undefined,
classes: shouldChangeContent ? "-emoji-cell-" : undefined,
attrs: {
title: shouldChangeContent ? randomEmoji : "",
},
};
},
}
new AirDatepicker("#input-calendar-date", config);
- 日本語表記
- モーダル表示
- 指定した日付を絵文字に変換
最後に
様々なオプションが用意されているため、色々と試してみたいと思います。