ロブ・オリアリー著✏️
HTML 要素は開示ウィジェットと総称されますが、スタイルを設定するのは簡単ではありません。制限があるため、カスタム コンポーネントを使用して独自のバージョンを作成することがよくあります。ただし、CSS が進化するにつれて、これらの要素はカスタマイズしやすくなりました。この記事では、開示ウィジェットの外観と動作をカスタマイズする方法について説明します。
の方法一緒に仕事しますか?
は、追加情報が非表示になる開示ウィジェットを作成する HTML 要素です。開示ウィジェットは通常、何らかのテキストを伴う三角形のマーカーとして表示されます。
ユーザーがウィジェットをクリックするか、ウィジェットに焦点を当ててスペースバーを押すと、ウィジェットが開き、追加情報が表示されます。三角形のマーカーは下向きで、開いた状態であることを示します:
開示ウィジェットには常に表示されるラベルがあり、
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
スタイリング<詳細>
要素は、デフォルトのスタイルに display: list-item が含まれているため、[
開示ウィジェットには、その構成部分をスタイルするための 2 つの疑似要素があります。
- ::mark 擬似要素:
の先頭にある三角形のマーカーを表します。このスタイリングの話は少し複雑です。 CSS プロパティの少数のセットに制限されています。ブラウザのサポートは ::marker には適していますが、Safari は現在、プロパティの完全なセットをサポートしていません。これについては、この記事の「概要マーカーのスタイル設定」セクションで詳しく説明します - ::details-content 擬似要素: の「追加情報」を表します。これは最近追加されたものであるため、ブラウザのサポートは現在 Chrome に限定されています
次のセクションでは、公開ウィジェットをカスタマイズするための、あまり知られていない新しい方法をいくつか紹介します。
開くアクションと閉じるアクションをアニメーション化する
開示ウィジェットを開くと、即座に開きます。瞬きすると見逃してしまいますよ!
ユーザーのアクションの影響を示すために、より段階的な方法で 1 つの状態から別の状態に移行することが望ましいです。開示ウィジェットの開閉アクションに遷移アニメーションを追加できますか?要するに、そうです!
これをアニメーション化するには、非表示のコンテンツの高さを 0 から最終的な高さに遷移させる必要があります。 height プロパティのデフォルト値は auto で、コンテンツに基づいて高さを計算するのはブラウザーに任せられます。 [interpolate-size](https://nerdy.dev/interpolate-size) プロパティが追加されるまで、CSS では auto の値にアニメーション化することはできませんでした。ブラウザーのサポートは、使用する必要がある新しい CSS 機能 (主に interpolate-size と ::details-content) に対して少し制限されていますが、これは漸進的な機能強化の好例です。現在は Chrome で動作します。
これは CodePen のアニメーションの例です。
開示アニメーションはどのように機能しますか?
まず、interpolate-size を追加して、auto の高さに移行できるようにします。
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
次に、クローズドスタイルについて説明します。 「追加情報」コンテンツの高さをゼロにし、コンテンツが表示されないようにしたい、つまり、オーバーフローを防ぎたいと考えています。
::details-content 擬似要素を使用して、非表示のコンテンツをターゲットにします。論理プロパティを使用するのが良い習慣であるため、高さではなくブロック サイズ プロパティを使用します。ブラウザはコンテンツが閉じた状態にあるときに content-visibility: hidden を設定するため、トランジションに content-visibility を含める必要があります。これを含めないと閉じるアニメーションは機能しません:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
content-visibility プロパティは個別のアニメーション プロパティであるため、アニメーションは依然として期待どおりに機能しません。これは、補間がないことを意味します。ブラウザは 2 つの値の間で切り替わり、アニメーションの継続時間全体にわたって遷移されたコンテンツが表示されます。こんなことは望んでいません。
transition-behavior:allow-discrete; を含めると、アニメーションの最後で値が反転するため、段階的な遷移が得られます。
また、開示ウィジェットが中間状態にあるときにブロックサイズを 0 に設定すると、コンテンツのオーバーフローが発生します。コンテンツのほとんどは、開くときに表示されます。これを防ぐために、overflow: hidden を追加します。
最後に、開いた状態のスタイルを追加します。最終状態のサイズを auto:
にしたいとします。
details { interpolate-size: allow-keywords; }
これらは大まかに説明します。より詳細なビデオ説明をご希望の場合は、Kevin Powell によるアニメーション化の方法に関するチュートリアルをご覧ください。
開示ウィジェットをアニメーション化するときに他に考慮すべき点はありますか?
「追加情報」の内容が
他のアニメーションと同様、動きに敏感なユーザーを考慮する必要があります。そのシナリオに対応するには、prefers-reduced-motion メディア クエリを使用できます。
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
排他的な の実装グループ(専用アコーディオン)
一般的な UI パターンはアコーディオン コンポーネントです。これは、展開してコンテンツを表示できる開示ウィジェットのスタックで構成されています。このパターンを実装するには、複数の連続する
/* open state */ details[open]::details-content { block-size: auto; }
デフォルトのスタイルは非常にシンプルです:
それぞれの独自の行を占有します。これらは互いに近接して配置され (マージンやパディングなし)、近接しているためグループとして認識されます。グループ化されていることを強調したい場合は、以下の例に示すように、境界線を追加して同じ背景スタイルを与えることができます。
このパターンのバリエーションは、アコーディオンを排他的にして、一度に 1 つの開示ウィジェットだけを開くことができるようにすることです。一方が開かれるとすぐに、ブラウザはもう一方を閉じます。
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
専用アコーディオンを使用する前に、それがユーザーにとって役立つかどうかを検討してください。ユーザーがより多くの情報を利用したいと考えている場合、アイテムを頻繁に開く必要があり、イライラする可能性があります。
この機能は現在すべての最新ブラウザでサポートされているため、すぐに使用できます。
サマリーマーカーのスタイル設定
開示ウィジェットは通常、横に小さな三角形のマーカーとともに表示されます。このセクションでは、このマーカーのスタイルを設定するプロセスについて説明します。
マーカーは
- すべてのフォントのプロパティ
- カラー
- ホワイトスペース
- text-combine-upright、[unicode-bidi](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi)、および方向プロパティ
- コンテンツ
- すべてのアニメーションとトランジションのプロパティ
前述したように、 [
例に入る前に、ブラウザのサポートについて簡単に説明します。この記事の執筆時点では、Safari はマーカーのスタイル設定を完全にはサポートしていない唯一の主要ブラウザです:
- Safari のサポートは現在、::marker 疑似要素の色とフォント サイズのプロパティのスタイル設定に限定されています。 Safari は非標準の疑似要素 ::-webkit-details-marker をサポートしています
- Safari はリスト スタイル プロパティのスタイル設定をまったくサポートしていません。参考として「CanIUse」を参照してください
マーカーの色とサイズを変更する
三角形のマーカーの色を赤に変更し、50% 大きくしたいとします。次のことができます:
details { interpolate-size: allow-keywords; }
これはすべてのブラウザで機能するはずです。これが CodePen の例です。
マーカーの間隔を調整する
デフォルトでは、マーカーは
list-style-position を外側に設定すると、マーカーは
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
これは、上のスクリーンショットの 2 番目のインスタンスで確認できます。
この例の CodePen は次のとおりです:
マーカーのテキスト/画像を変更する
マーカーの内容を変更したい場合は、::mark 疑似要素の content プロパティを使用できます。好みに応じて、テキストに設定できます。私の例では、閉じた状態にはジッパーの口の絵文字を、開いた状態には開いた口の絵文字を使用しました。
details { interpolate-size: allow-keywords; }
マーカーに画像を使用するには、::marker 疑似要素の content プロパティ、または
の list-style-image プロパティを使用できます。
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
次の例では、マテリアル シンボルの 2 つの矢印アイコンをマーカーに使用しています。右向きの矢印は閉じた状態を表し、下向きの矢印は開いた状態を表します:
これらの例は Chrome と Firefox では期待どおりに動作しますが、Safari ではスタイルが無視されます。これを段階的な機能強化としてアプローチして、これで終わりにすることもできます。ただし、すべてのブラウザーで同じ外観にしたい場合は、マーカーを非表示にして、独自の画像を代用として追加できます。これにより、より自由度が高まります:
/* open state */ details[open]::details-content { block-size: auto; }
インライン画像や擬似要素などの新しいマーカー アイコンを使用して、状態を視覚的に示すことができます。 すでに(ほとんど)展開/折りたたみ状態を示しています。したがって、インライン グラフィックを使用する場合は、装飾として扱う必要があります。空の alt 属性はこれを行います:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
必要に応じて、マーカーを
details { interpolate-size: allow-keywords; }
ただし、マーカーを非表示にすると、スクリーン リーダーでのアクセシビリティの問題が発生することに注意することが重要です。 Firefox、VoiceOver、JAWS、NVDA にはすべて、マーカーが削除された場合に開示ウィジェットの切り替え状態を一貫して通知するという問題があります。残念ながら、スタイルは州と結びついています。これを行わないことをお勧めします。
の「追加情報」セクションのスタイルを設定します。
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
私のおすすめは、
/* open state */ details[open]::details-content { block-size: auto; }
あるいは、セクション全体を対象とする ::details-content 疑似要素を使用することもできます。これが、開始および終了の状態遷移をアニメーション化するためにこれを使用する理由です:
>@media (prefers-reduced-motion) { /* styles to apply if a user's device settings are set to reduced motion */ details::details-content { transition-duration: 0.8s; /* slower speed */ } }
違いに気づきましたか?セクションの先頭にはマージンが 1 つだけあります。
開示ウィジェットのスタイルを設定する際のよくある間違い
- これまで、の表示タイプを変更することはできませんでした。要素。この制限は Chrome では緩和されました
-
の表示タイプを変更する場合は注意してください。デフォルトは、display: list-item;; です。これを display: block; に変更すると、一部のブラウザではマーカーが非表示になる可能性があります。これは Firefox の問題でした。
<details> <summary>Payment Options</summary> <p>...</p> </details> <details> <summary>Personalise your PIN</summary> <p>...</p> </details> <details> <summary>How can I add an additional cardholder to my Platinum Mastercard</summary> <p>...</p> </details>
- をネストすることはできません。
-
要素にはデフォルトの ARIA ロールであるボタンがあり、子要素からすべてのロールが削除されます。したがって、
のような見出しを付けたい場合は、
では、スクリーン リーダーなどの支援技術は見出しとして認識しません。このパターンは避けてください:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
マーカーを非表示にすると、一部のスクリーン リーダーでアクセシビリティの問題が発生します。 Firefox、VoiceOver、JAWS、NVDA にはすべて、マーカーが削除された場合に開示ウィジェットの切り替え状態を一貫して通知するという問題があります
今後さらに変化が起こるのでしょうか?
最近、の作成を支援する大きな提案がありました。よりカスタマイズ可能で、ブラウザ間での相互運用性が向上します。フェーズ 1 には、この記事で説明した内容の一部が含まれています。
- CSS 表示プロパティ制限を削除して、フレックスやグリッドなどの他の表示タイプを使用できるようにします
- シャドウツリーの構造をより明確に指定します。これは、Flexbox および CSS グリッドとの相互運用性に役立ちます。
- ::details-content 疑似要素を追加して 2 番目のスロットをアドレス指定します。これにより、内の「追加情報」のコンテナーが作成されます。要素はスタイル設定可能
嬉しいニュースは、上記のリストの項目 1 と 3 が Chrome 131 (2024 年 11 月現在) で出荷されたことです。次の段階では、マーカーのスタイルの改善に取り組む必要があります。さらに、これらの要素をアニメーション化する機能の向上に役立つ一連の関連変更があります。
結論
HTML 要素は CSS でカスタマイズするのがはるかに簡単になりました。ブラウザーを完全にサポートする排他的なグループを作成し、段階的な拡張機能として開閉状態の遷移をアニメーション化し、マーカーの簡単なスタイルを実行できるようになりました。
のアキレス腱マーカーのスタイルです。良いニュースは、この点や他のいくつかの問題点に対処する積極的な提案があることです。これにより、
フロントエンドがユーザーの CPU を占有していませんか?
Web フロントエンドがますます複雑になるにつれて、リソースを貪欲な機能がブラウザーに要求します。本番環境のすべてのユーザーのクライアント側の CPU 使用率、メモリ使用量などを監視および追跡することに興味がある場合は、LogRocket を試してください。
LogRocket は Web アプリやモバイル アプリ用の DVR のようなもので、Web アプリ、モバイル アプリ、または Web サイトで発生するすべてを記録します。問題が発生する理由を推測する代わりに、主要なフロントエンド パフォーマンス メトリクスを集計してレポートし、アプリケーションの状態とともにユーザー セッションを再生し、ネットワーク リクエストをログに記録し、すべてのエラーを自動的に明らかにすることができます。
Web アプリやモバイル アプリのデバッグ方法を最新化します。無料で監視を始めましょう。
以上が最新の CSS を使用した HTML のスタイル設定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

CSS Box-Shadowおよびアウトラインプロパティは、WordPress 6.1でTheme.jsonサポートを獲得しました。実際のテーマでどのように機能するか、そしてこれらのスタイルをWordPressブロックと要素に適用するために必要なオプションのいくつかの例を見てみましょう。

これは、フォームアクセシビリティについて行った小さなシリーズの3番目の投稿です。 2番目の投稿を逃した場合は、「ユーザーフォーカスの管理:Focus-Visible」をご覧ください。で

このチュートリアルでは、Smart Formsフレームワークを使用して、プロフェッショナルなJavaScriptフォームの作成を示しています(注:使用できなくなりました)。 フレームワーク自体は利用できませんが、原則とテクニックは他のフォームビルダーに関連しています。

インラインテキストエディターの構築は些細なものではありません。 このプロセスは、ターゲット要素を編集可能にすることから始まり、その過程で潜在的なSyntaxerrorの例外を処理します。 エディターの作成 このエディターを構築するには、コンテンツを動的に変更する必要があります

Svelte Transition APIは、コンポーネントがカスタムSVELTE遷移を含むドキュメントを入力または離れるときにアニメーション化する方法を提供します。

最近GraphQLの作業を開始した場合、またはその長所と短所をレビューした場合、「GraphQLがキャッシュをサポートしていない」または

この記事では、Envato Marketで入手可能なPHPフォームのビルダースクリプトを説明し、機能、柔軟性、デザインを比較します。 特定のオプションに飛び込む前に、PHPフォームのビルダーが何であるか、そしてそれを使用する理由を理解しましょう。 PHPフォーム

このチュートリアルは、node.js、Express、およびMulterを使用してファイルアップロードシステムを構築することをガイドします。 単一および複数のファイルのアップロードをカバーし、後で検索するためにMongoDBデータベースに画像を保存することさえ示します。 まず、プロジェックをセットアップします


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
