ホームページ >ウェブフロントエンド >CSSチュートリアル >バルーンのポップ(オーバー)
HTMLとCSSの力は常に驚くべきものです。ポップオーバーAPIの新しいインタラクティブな機能は、両方の言語だけで達成できる驚くべき結果を再び証明します。
ポップオーバーAPIの機能を示す他のチュートリアルを見たことがあるかもしれませんが、この投稿では「完全な征服」に焦点を当てています。風船など、いくつかの追加の「楽しい」要素を追加します...文字通りの「ブラスト」効果。
HTMLとCSSのみ(もちろん)を使用してゲームを作成し、ポップオーバーAPIに依存しています。あなたの使命は、1分でできるだけ多くの風船を突くことです。しかし、注意してください!一部の風船(グルが言ったように)は「rawっている」ものであり、より多くの風船を引き起こします。
私はそれを巧妙に名前が付けましたポップ(上)風船そして、私たちはそれを段階的に一緒にします。完了すると、それは(まあ、まさにこのように)のようになります:
属性を使用して設計する限り、任意の要素はポップアップボックスとして使用できます。
popover
<div popover="">...</div>の値を提供する必要さえありません。デフォルトでは、
の初期値はpopover
であり、仕様で「軽量シャットダウン」と呼ばれるものを使用します。これは、ポップアップボックスの外側のどこにでもクリックしてポップアップボックスを閉じることができることを意味します。ポップアップボックスが開いていると、ページ上の他のポップアップボックスは、それらがネストされていない限り閉じます。 popover
ポップボックスは非常に依存しています。 auto
auto
別のオプションは、
値を設定することです。
popover
manual
これは、要素が手動でオン /オフになっていることを意味します。特定のボタンをクリックして、オンとオフにする必要があります。言い換えれば、
<div popover="manual">...</div>
manual
要素を開始点
要素が必要です。ポップアップボックスとは異なり、デフォルトで
要素を開くことができます:
details
このアプローチをとると、ボタン(風船)の束を表示し、最後のボタンをオフにすることで、すべての風船を「突く」ことができます。言い換えれば、ページがロードされたときに表示されるように、開始バルーンをOpen <code>details
要素に配置できます。
<details open=""></details>これは私が基本構造と呼んでいるものです:
<details></details>
この方法で、<details></details>
のバルーンをクリックして
(後で削除する方法に対処します)。
<dialog></dialog>
は私たちのゲームのよりセマンティックな方向だと思うかもしれません。あなたは正しいです。ただし、<dialog></dialog>
を使用することには2つの欠点があります。ここでは使用できません。
<dialog></dialog>
をオフにする方法はありません。 <dialog></dialog>
<dialog></dialog>
の外側の風船を突くようにする必要があります。 <dialog></dialog>
要素を使用し、通常の<details open=""></details>
をポップアップ自体、つまり<div>を使用します。とりあえず、これらのポップアップボックスとボタンがすべて接続されていることを確認するだけで、ボタンをクリックするとポップアップボックスが開きます。他のチュートリアルからこれを学んだかもしれませんが、どのボタンに応答する必要があるかをポップアップ要素に伝えてから、どのポップアップを開く必要があるかを指示する必要があります。これを行うには、ポップアップ要素に一意のIDを提供し(すべてのIDが必要です)、<code><div popover="">属性を使用してボタンに参照してください:<code>popovertarget
<div popover="">...</div>これはすべてが一緒に接続されているときのアイデアです:
ポップアップボックスを開閉して閉じます
ボタンに
属性を設定することで、開閉動作を分離できます(いいえ、HTML仕様著者は、シンプルさを気にしません)。プロパティ値をpopovertargetaction
またはshow
に設定すると、ボタンはその特定のポップアップで1つのアクションのみを実行します。 hide
<div popover="manual">...</div>
に新しいボタンを追加したことに注意してください。これは、上記の<div>プロパティを意図的に設定することでオンまたはオフになっている別の<code><div>をターゲットにするように設定されています。 (良い意味で)要素を「突く」ことがどれほど挑戦的であるかを見てください:<em>
</em>スタイルバルーン<code>popovertargetaction
ここで、プレイヤーがそれらを区別できないように、
。これは、クリックして開閉するコンテナの実際の要素であるためです。 <summary></summary>
<summary></summary>
作業のほとんどは標準的なCSS作業です。背景、塗りつぶし、マージン、サイズ、ボーダーなど。しかし、必ずしも直感的ではなく、含める必要があるいくつかの重要なことがあります。 <details></details>
<summary></summary>
属性をlist-style-type
要素に設定して、none
がオンかオフかを示す三角形マークを削除します。タグは非常に便利で、デフォルトでは非常に優れていますが、このようなゲームの場合、プロンプトを削除してより良い挑戦をすることをお勧めします。 <details></details>
<details></details>
をsummary::-webkit-details-marker
に設定する必要があります。 display: none;
マウスカーソルがバルーンがクリック可能であることを示している場合は素晴らしいことです。したがって、<summary></summary>
cursor: pointer
最後の詳細は、<summary></summary>
に設定して、バルーン(絵文字のテキストだけ)が選択されないようにすることです。これにより、ページ上のオブジェクトのようになります。 user-select
none
はい、今は2024年ですが、Safariサポートを検討するには、プレフィックス-webkit-user-select
このコードはすべて、ボタンとバルーンの問題の1つは、それらのいくつかが意図的に<summary></summary>
.balloon
であることです。これは、閉じたポップアップボックスが開いていないためです。プレイヤーは、特定のバルーンをクリック/クリックしていない、またはゲームが壊れていると思うかもしれません。そのため、バルーンがクリックの状態にあるときにズームを追加しましょう:
<div popover="">...</div>
ボーナス:カーソルは人差し指を指す手であるため、バルーンをクリックすることは、指で風船を突くようなものです。 ???:active
<div popover="manual">...</div>
クラスを使用して、CSSグリッドや複数の列とは異なる列や列の風船を見つけることになりましたが、物理的補間に基づいて架空の行と列を見つけました。それは少しグリッドのように見え、私が望むほど「ランダム」ではありませんが、バルーンが同じ2つのクラスを持っていない限り、それらは互いに重なりません。 8×8グリッドを使用することにしましたが、バルーンがブラウザの左端と上縁を不明瞭にしないように、最初の「行」と「列」が空白を残しました。
プレイヤーにおめでとうございます(祝福しないでください)
ゲームコンポーネントのほとんどは準備ができていますが、指定された時間内にすべてのバルーンを正常に突っ込んだことをプレイヤーに祝福するポップアップボックスを持っている方が良いでしょう。
すべてが<details open=""></details>
要素に戻ります。要素が開いていないと、ゲームは終了し、最後のステップは最後のバルーンを突くことです。したがって、要素にIDを与えると、例えば。
#root
ここでは、display: none;
要素の親要素を選択するために
<div popover="">...</div>
:has()
現時点でゲームをプレイすると、すべての風船を突き出さずに勝利メッセージを受信できます。繰り返しますが、正しいボタンがクリックされない限り、マニュアルポップアップボックスは閉じません。 #root
#root
ポップアップボックスがまだ開いているかどうかをCSSで知る方法はありますか?はい、#congrats
pseudoクラスを入力します。
<div popover="manual">...</div>
pseudo-classは、開いたポップアップボックスを選択します。これを以前の<details></details>
と併せて使用して、ページでポップアップボックスがまだ開いているときにメッセージが表示されないようにすることができます。これらを一緒にリンクして
:popover-open
になります。 :popover-open
対照的に、1分間のタイマーが期限切れになる前にプレイヤーがすべての風船を突くことができない場合、ゲームの終了のプレイヤーに通知する必要があります。 CSSに:has()
条件ステートメントはないため(少なくともまだ)、1分間のアニメーションを実行して、このメッセージがゲームを終了するようになります。 and
<details open=""></details>しかし、勝利画面が表示されたときに故障メッセージが発射されたくないので、
メッセージと同時に表示されるのを防ぐためにセレクターを書き込むことができます。
ゲームタイマーが必要です
if()
プレイヤーは、すべての風船をどれだけの時間ポップしているかを知っている必要があります。画面の全幅(100VW)を占有し、水平方向にスケーリングし、上記のアニメーションと一致する要素を備えた「シンプルな」タイマーを作成できます。
<details open=""><summary>?</summary>???</details>
1つの障害ポイントのみがゲームを簡単にする可能性があるため、2番目の#fail
要素を追加し、2番目の「ルート」ID #congrats
を使用してみましょう。同様に、
<details open=""><summary>?</summary>?</details><div popover="manual"> <h2>Level 1 Popup</h2> </div>要素と
#fail
<details open=""><summary>?</summary>??</details><div popover="manual"> <h2>Level 1 Popup</h2>? </div>
残っている唯一のことは、ゲームをプレイすることです! <details></details>
おかしいですよね?自発的なJavaScriptメソッドの制限なしに何か強力なものを構築できると確信していますが、アクセシビリティを真剣に受け止めているわけではありませんが、APIを制限に押し上げることは楽しくて教育的ですよね? 私は興味があります:ポップアップボックスを使用するために他にどんな奇妙なアイデアを考えることができますか?たぶん、別のゲーム、いくつかのかなりのUI効果、またはポップアップボックスをアンカーポジショニングなどの他の新興CSS機能と組み合わせる巧妙な方法を考えるかもしれません。それが何であれ、共有してください!
以上がバルーンのポップ(オーバー)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。