Playgrounds
インタラクティブなWeb技術のデモ集。最新のWeb API、CSS機能、React技術を実際に体験できます。
テキストのコピー・ペースト
クリップボードの読み取り: 読み込めませんでした
クリップボードの書き込み: 読み込めませんでした
画像のコピー・ペースト
ペーストされた画像
権限があれば、外部でコピーした画像も貼り付けられます

キャレット位置取得
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
↑ テキストの好きな位置をクリック
クリックするとキャレット情報が表示されます。
ドラッグ&ドロップ
吾輩は猫である。名前はまだ無い。
↑ 上のワードをドラッグしてここにドロップ
Selectionオブジェクトのプロパティ
サンプルテキスト
あさ、眼をさますときの気持は、面白い。かくれんぼのとき、押入れの真っ暗い中に、じっと、しゃがんで隠れていて、突然、でこちゃんに、がらっと襖をあけられ、日の光がどっと来て、でこちゃんに、「見つけた!」と大声で言われて、まぶしさ、それから、へんな間の悪さ、それから、胸がどきどきして、着物のまえを合せたりして、ちょっと、てれくさく、押入れから出て来て、急にむかむか腹立たしく、あの感じ、いや、ちがう、あの感じでもない、なんだか、もっとやりきれない。
選択中のテキスト(selection.toString())
選択要素の開始位置の要素
(selection.anchorNode.textContent, selection.anchorOffset)
選択要素の終了位置の要素
(selection.focusNode.textContent, selection.focusOffset)
選択の種類(selection.type)
Selectionオブジェクトのメソッド
サンプルテキスト
あさ、眼をさますときの気持は、面白い。かくれんぼのとき、押入れの真っ暗い中に、じっと、しゃがんで隠れていて、突然、でこちゃんに、がらっと襖をあけられ、日の光がどっと来て、でこちゃんに、「見つけた!」と大声で言われて、まぶしさ、それから、へんな間の悪さ、それから、胸がどきどきして、着物のまえを合せたりして、ちょっと、てれくさく、押入れから出て来て、急にむかむか腹立たしく、あの感じ、いや、ちがう、あの感じでもない、なんだか、もっとやりきれない。
選択範囲の追加
(selection.addRange(Range))
選択範囲の削除
(selection.removeAllRanges(), selection.empty())
要素の子を全て選択する
(selection.selectAllChildren(Node))
範囲の変更
(selection.extend(Node, ?offset))
Baseline2025で追加されたgetComposedRangesメソッド
サンプルテキスト(テキスト全体が閉じたShadow Tree)
あさ、眼をさますときの気持は、面白い。かくれんぼのとき 、押入れの真っ暗い中に、じっと、しゃがんで隠れていて、突然、でこちゃんに、がらっと襖をあけられ、日の光がどっと来て、でこちゃんに、「見つけた!」と大声で言われて、まぶしさ、それから、へんな間の悪さ、それから、胸がどきどきして、着物のまえを合せたりして、ちょっと、てれくさく、押入れから出て来て、急にむかむか腹立たしく、あの感じ、いや、ちがう、あの感じでもない、なんだか、もっとやりきれない。
SafariやIOSのChrome等ではoptionsを含んだgetComposedRangesメソッドが正しく動作しない場合があります。
hiddenとautoの違い
content-visibility: hidden
content-visibility: auto
サンプルコンテンツ
このコンテンツはcontent-visibility: autoによって制御されています。ビューポート外の要素のレンダリング処理を必要なタイミングまでスキップできます。
スタイリング例
detailsの子要素全てにスタイルを割り当て
p要素1
p要素2
p要素3
::details-contentを用いてslot要素に割り当て
p要素1
p要素2
p要素3
アニメーション実装パターン
::details-contentによるアニメーション
想定した通りにアニメーションが適用されます
例として実装したアニメーションは@prefers-reduced-motionに対応していません。注意してご利用ください。
イベントタイミング計測
ボタンをクリックすると、Event Timing APIを使ってイベントの処理時間を計測します。 約50msの処理を意図的に行うため、処理時間が可視化されます。
font-family: mathプロパティ
ピタゴラスの定理(上付き文字)
x² + y² = z²
等差数列(上付き・下付き文字)
aₙ = a₁ + (n−1)d
数の集合(Blackboard bold)
ℕ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ
積分記号
∫₀^∞ e⁻ˣ dx = 1
webkitRelativePathの例
Dialogの操作
Popoverの操作
Invoker Commands API
Popover API
Popoverの内容
どちらのボタンでも同じPopoverを操作できます。
カスタムコマンド

カスタムコマンド(--zoom-in、--zoom-out、--reset)で操作しています。
LCP計測
LCPエントリを待機中...ページを再読み込みすると計測されます。
ページ読み込み時のLCP(Largest Contentful Paint)を計測しています。ページを再読み込みすると新しい計測結果が表示されます。
基本的なポップオーバー
このポップオーバーはPopover APIによって表示されました。 ESCキーやこのコンテンツの外側のクリック、toggleまたはhideボタンで閉じられます。
ツールチップ・ドロップダウン
Tooltip
Dropdown Menu
このUIの実装はPopover APIを使っていません。
ダイアログの閉じる動作検知
印刷時の色調整デモ
色調整の設定(print-color-adjust)
ブラウザの印刷設定で色調整を正確にするか、ブラウザにお任せするかを選択できます。
現在の設定: ブラウザにお任せ(economy)
単位の比較
幅を測る単位(rch, ric)
高さを測る単位(rcap, rex)
文字と単位バーをそれぞれ4倍にしたものを表示しています。
1ricは「水」の幅、1rch は「0」の幅、1rcap は大文字Hの高さ、1rexは小文字xの高さです。
通常版とルート版の違い
font-sizeの値を変更してみてください。chは親要素のfont-sizeに連動してサイズが変わりますが、rchは常にルート要素(16px)を基準にするため同じサイズです。
ブラウザの文字サイズ設定を変更している場合、正しく動作しないことがあります。
ドーナツスコープ
ドーナツスコープ
.article内の画像(スタイル適用対象)
.nested-content内の画像(除外される)
@scope (.article) to (.nested-content) {
img {
border: 3px solid var(--cyan-500);
border-radius: var(--radius-md);
}
}:scopeを使ったスコープリミット
:scopeを使ったスコープリミット
.article(スコープルート)
.nested-content(直接の子 → 常に除外)
ラッパー要素
.nested-content(孫要素 → :scope >の時は適用される)
@scope (.article) to (:scope > .nested-content) {
/* .nested-contentがスコープルートの直接の子の場合のみ除外 */
img {
border: 3px solid var(--cyan-500);
}
}スコープの近接性
スコープの近接性
@scopeがONの場合、最も内側の<p>は近接性により.info-boxのスタイルが適用されます@scopeがOFFの場合、通常のカスケードで.warning-boxのスタイルが優先されます(後に定義されているため)
@scope (.info-box) {
.message { color: var(--color-fg-info); background: var(--color-bg-info); }
}
@scope (.warning-box) {
.message { color: var(--color-fg-warning); background: var(--color-bg-warning); }
}スクリーンスリープ防止
scrollbar-colorプロパティ
アイテム 1
スクロールバーの色が変わっていることを確認してください
アイテム 2
スクロールバーの色が変わっていることを確認してください
アイテム 3
スクロールバーの色が変わっていることを確認してください
アイテム 4
スクロールバーの色が変わっていることを確認してください
アイテム 5
スクロールバーの色が変わっていることを確認してください
アイテム 6
スクロールバーの色が変わっていることを確認してください
アイテム 7
スクロールバーの色が変わっていることを確認してください
アイテム 8
スクロールバーの色が変わっていることを確認してください
アイテム 9
スクロールバーの色が変わっていることを確認してください
アイテム 10
スクロールバーの色が変わっていることを確認してください
アイテム 11
スクロールバーの色が変わっていることを確認してください
アイテム 12
スクロールバーの色が変わっていることを確認してください
アイテム 13
スクロールバーの色が変わっていることを確認してください
アイテム 14
スクロールバーの色が変わっていることを確認してください
アイテム 15
スクロールバーの色が変わっていることを確認してください
アイテム 16
スクロールバーの色が変わっていることを確認してください
アイテム 17
スクロールバーの色が変わっていることを確認してください
アイテム 18
スクロールバーの色が変わっていることを確認してください
アイテム 19
スクロールバーの色が変わっていることを確認してください
アイテム 20
スクロールバーの色が変わっていることを確認してください
scrollbar-color: #6366f1 #e2e8f0;
scrollendイベント
アイテム 1
スクロールしてscrollendイベントの発火を確認してください
アイテム 2
スクロールしてscrollendイベントの発火を確認してください
アイテム 3
スクロールしてscrollendイベントの発火を確認してください
アイテム 4
スクロールしてscrollendイベントの発火を確認してください
アイテム 5
スクロールしてscrollendイベントの発火を確認してください
アイテム 6
スクロールしてscrollendイベントの発火を確認してください
アイテム 7
スクロールしてscrollendイベントの発火を確認してください
アイテム 8
スクロールしてscrollendイベントの発火を確認してください
アイテム 9
スクロールしてscrollendイベントの発火を確認してください
アイテム 10
スクロールしてscrollendイベントの発火を確認してください
アイテム 11
スクロールしてscrollendイベントの発火を確認してください
アイテム 12
スクロールしてscrollendイベントの発火を確認してください
アイテム 13
スクロールしてscrollendイベントの発火を確認してください
アイテム 14
スクロールしてscrollendイベントの発火を確認してください
アイテム 15
スクロールしてscrollendイベントの発火を確認してください
アイテム 16
スクロールしてscrollendイベントの発火を確認してください
アイテム 17
スクロールしてscrollendイベントの発火を確認してください
アイテム 18
スクロールしてscrollendイベントの発火を確認してください
アイテム 19
スクロールしてscrollendイベントの発火を確認してください
アイテム 20
スクロールしてscrollendイベントの発火を確認してください
上のエリアをスクロールすると、scroll イベントは連続して発火しますが、scrollend イベントはスクロールが完全に終了したときのみ発火します。
発火条件
scrollTo() API
scroll-snap
横にスクロールするとスナップします
SuspenseListによる読み込み制御
React v19.2、Nextjs v16で利用ができなくなったため、現在こちらの機能は利用できません。
<SuspenseList revealOrder="together">
CSS数学関数デモ
座標: (-50, 30)
座標の絶対値の和: 80
象限: 第二象限
※absを用いて、座標の絶対値の和が大きいほど要素のサイズを大きくしています。透明度も同じようにしています。
要素のサイズ: transform: scale(calc(1 + (abs(x) + abs(y)) / 200))
透明度: opacity: calc(0.5 + (abs(x) + abs(y)) / 200)
※signを用いて、座標の点の色を変えています。座標の和が正であればhsl(280, 70%, 50%)、負であればhsl(120, 70%, 50%)、0であればhsl(200, 70%, 50%)にしています。
座標の点の色: background-color: 'hsl(calc(sign(var(--x) + var(--y)) * 80 + 200), 70%, 50%)'
基本的なハイライト
知らざるを知らずとなす、これ知るなり
優先度ベースハイライト
Imagination is more important than knowledge
スペリング・文法エラーハイライト
食べれる
スペル・文法エラースタイリング
Check a speling error and an grammar error.
View Transition基本デモ
- アイテム 1
- アイテム 2
- アイテム 3
- アイテム 4
- View TransitionのON/OFFの切り替えは
view-transition-nameをnoneに指定することで行なっています。 - View TransitionがONの時は、アイテム番号ごとの
view-transition-nameを持ちます(例:item-1)。 - 各アイテムは、まとまったスタイルを付与するために
view-transition-class: item;を持ちます。
::view-transition-group(.item) {
border-radius: var(--radius-md);
}
::view-transition-group(item-1) {
background-color: var(--red-800);
}
::view-transition-image-pair(item-2) {
background-color: var(--pink-800);
}
::view-transition-old(item-3) {
background-color: var(--purple-800);
}
::view-transition-new(item-4) {
background-color: var(--cyan-800);
}