Reactで、2つの日付の間の日数を数える方法
2つの日付から、間の日数、「何か月何日」、土日を除いた日数を出す部品を React で作りました。Temporal.PlainDate の until() で数え、Temporal のないブラウザ向けの書き方や、月末をまたぐときの数え ...
Reactで、正規表現を試せる入力欄を作る方法
正規表現とフラグを入力すると、一致した部分の強調とキャプチャグループの一覧がその場で出る入力欄を、React で作りました。書き間違いのエラー表示、長さ 0 の一致の扱い、時間のかかるパターンで固まらないように Worker で止める ...
ReactでJSONを折りたたんで見やすく表示する方法
入れ子の深い JSON を、オブジェクトや配列ごとに開いたり閉じたりできる表示を、ライブラリなしの React で作りました。開いている場所をパスの Set で持つ方法、パスを「.」でつなぐと起きる取り違え、JSON.parse のエ ...
Reactで、押すと音が鳴る鍵盤を作る方法
マウスでもパソコンのキーでも弾ける1オクターブの鍵盤を、音声ファイルなしで React と Web Audio API で作ります。音の終わりで波形が途切れない止め方と、押しっぱなしや鍵盤の外で離したときに音が鳴りやまない原因も確かめ ...
CSSで、ダークモードに合わせて色を切り替える方法
OS のダークモードに合わせて色を変えるには、色をカスタムプロパティにまとめ、prefers-color-scheme のメディアクエリで値を入れ替えます。color-scheme、light-dark()、テーマを選ぶボタンも確かめ ...
CSSで、表の見出しを固定してスクロールする方法
縦に長い表をスクロールしても見出しの行が上に残るようにするには、表を高さの決まった枠に入れ、見出しのセルに position: sticky と top: 0 を付けます。左の列も固定する書き方と、線が消える・文字が重なるときの直し方 ...
CSSで、入力欄のラベルを上に浮かせる方法
入力欄に重ねたラベルを、フォーカスしたときと文字が入っているときに上へ小さく動かす方法です。placeholder に空白を1つ入れて :placeholder-shown で空かどうかを見分けます。placeholder がないと動 ...
CSSで、アコーディオンをなめらかに開閉する方法
details の中身を包む ::details-content の高さを、0 から auto へ transition で動かすと、アコーディオンがなめらかに開閉します。閉じるときの指定や、details を使わない書き方も Chr ...
CSSで、横スクロールのカードをぴたっと止める方法
横に並べたカードを、スクロールしたときにカードの左端でぴたっと止めるには、CSS の scroll-snap を使います。止まる位置をリストの余白に合わせる scroll-padding と、払っても1枚ずつ進ませる scroll-s ...
CSSで、画像の上に文字を読みやすく重ねる方法
画像の上の白い文字は、文字の下だけをグラデーションで暗くするか、半透明の箱を敷くと読みやすくなります。text-shadow だけでは明るい部分で足りないこと、画像全体を暗くした場合との違いをコントラスト比で、スマホの幅で文字がはみ出 ...
