亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
方法1:様式可能なテキスト範(fàn)囲
方法2:カスタムハイライトシステム
CSSカスタムハイライトAPI
テキスト範(fàn)囲を作成します
ハイライトを作成します
ハイライトを登録します
スタイルの強(qiáng)調(diào)表示
強(qiáng)調(diào)表示を更新します
ブラウザのサポート
デモ
要約します
ホームページ ウェブフロントエンド CSSチュートリアル CSSカスタムハイライトAPI:最初の外観

CSSカスタムハイライトAPI:最初の外観

Mar 14, 2025 am 11:05 AM

CSSカスタムハイライトAPI:最初の外観

Webテキストのスタイリングは、常に開発者の焦點でした。予想されるのは、CSSカスタムハイライトAPIの出現(xiàn)であり、Webテキストスコープスタイリングに革命をもたらします。

たとえば、Google Docs、Word、Dropboxの紙などのテキスト編集ソフトウェアは、スペルと文法のエラーを検出し、以下の波狀の行を表示してユーザーに促します。 VSコードなどのコードエディターは、コードエラーに同様の方法も使用します。

テキストのハイライトのもう1つの一般的なユースケースは、検索とハイライト機(jī)能です。ユーザーが入力ボックスにテキストを入力すると、ページは一致した結(jié)果を検索して強(qiáng)調(diào)表示します。これで、ブラウザでCtrl/?Fを押して、この記事のテキストの一部を入力してみてください。

ブラウザは通常、これらのスタイルを自動的に処理します。編集可能なエリア(例)誤った波狀の線が自動的に表示されます。 Findコマンドは、見つかったテキストを自動的に強(qiáng)調(diào)表示します。

しかし、自分でスタイリングをしたい場合はどうなりますか?これをWebページに実裝する方法は長い間一般的な問題であり、多くの人々にとって多くの時間を無駄にすることができます。

これは単純なパズルではありません。クラスを使用するだけではありません<span></span>タグをラップし、いくつかのCSSを適用します。実際、これには、複雑なDOMツリー全體および場合によってはDOM要素の境界を越えて複數(shù)のテキスト範(fàn)囲を正しく強(qiáng)調(diào)する機(jī)能が必要です。

この問題を解決するには、2つの一般的な方法があります。

  1. スタイルのテキスト範(fàn)囲の擬似要素、および
  2. 獨自のテキストハイライトシステムを作成します。

まず両方のアプローチをレビューし、次に今後のCSSカスタムハイライトAPIがこのすべてをどのように変更するかを見てみましょう。

方法1:様式可能なテキスト範(fàn)囲

最も有名な様式の様式なテキストは、ユーザーが選択する場合があります。デバイスを指すことを使用してWebページでテキストを選択すると、選択オブジェクトが自動的に作成されます。実際、このページでテキストを選択してから、DevToolsコンソールでdocument.getSelection()を?qū)g行してみてください。選択したテキストの位置情報が表示されます。

また、JavaScriptを介してプログラムでテキスト選択を作成できることがわかります。これが例です:

 //最初に、範(fàn)囲オブジェクトを作成します。
const range = new range();

//開始位置と終了位置を設(shè)定します。
range.setstart(parentNode、startOffset);
range.setend(parentNode、endoffset);

//次に、現(xiàn)在の選択をこの範(fàn)囲に設(shè)定します。
document.getSelection()。removeallranges();
document.getSelection()。アドレンジ(範(fàn)囲);

パズルの最後のピースは、この範(fàn)囲をスタイリングすることです。 CSSには、これを行う::selectionと呼ばれる擬似要素があり、すべてのブラウザーでサポートされています。

 :: selection {
  バックグラウンドカラー:#F06;
  色:白;
}

この手法を使用して、ページ內(nèi)のすべての単語を強(qiáng)調(diào)表示する例は次のとおりです。

::selection擬似要素に加えて、他にも多くの擬似要素があります。

  • ::target-textブラウザ內(nèi)にスクロールされたテキスト(テキストへのスクロールをサポートするブラウザ)を選択します。 (MDN)
  • ::spelling-errorタイプミスを含むブラウザでマークされたテキストを選択します。 (MDN)
  • ::grammar-error構(gòu)文エラーを含むブラウザによってマークされたテキストを選択します。 (MDN)

殘念ながら、ここでのブラウザのサポートはあまり良くありません。これらのスコープ自體は便利ですが、カスタムテキストスニペットのスタイルを使用することはできません。ブラウザからの事前定義されたテキストスニペットのみです。

したがって、ユーザーテキストの選択は、実裝が比較的簡単で、ページのDOMを変更しないため、優(yōu)れています。実際、範(fàn)囲オブジェクトは、存在するために作成する必要があるHTML要素ではなく、本質(zhì)的にページ內(nèi)の段落の座標(biāo)です。

ただし、1つの大きな欠點は、ユーザーが手動で選択したものを何でもリセットすることです。これをテストするために、上記のデモでテキストを選択してみてください。コードが選択を別の場所に移動すると、それが消えることがわかります。

方法2:カスタムハイライトシステム

ニーズに合わせて選択オブジェクトを使用していない場合は、2番目のソリューションがほぼ唯一のオプションです。このソリューションは、JavaScriptを使用してハイライトを表示したい新しいHTML要素を挿入することを自分で行うことを中心に展開します。

殘念ながら、これはより多くのJavaScriptコードを書き込み、維持する必要があることを意味します。言うまでもなく、ハイライトの変更が行われるたびにブラウザにページのレイアウトを再現(xiàn)させることは言うまでもありません。さらに、複數(shù)のDOM要素にまたがるテキストの斷片を強(qiáng)調(diào)表示したい場合など、複雑なエッジケースがいくつかあります。

興味深いことに、CodemirrorとMonaco(VSコードをサポートするJavaScriptテキストエディターライブラリ)には、獨自のハイライトロジックがあります。彼らは、ハイライトがDOMツリーの別の部分に含まれる、わずかに異なるアプローチを使用します。テキスト行と強(qiáng)調(diào)表示された段落は、DOMの2つの異なる場所でレンダリングされ、互いに配置されます。テキストを含むDOMサブツリーを確認(rèn)すると、強(qiáng)調(diào)表示されません。このようにして、テキスト行に影響を與えることなくハイライトを再レンダリングすることができ、新しい要素をテキスト行に導(dǎo)入する必要はありません。

全體として、ブラウザがサポートしているハイライト機(jī)能が欠落しているように感じます。一部の機(jī)能は、これらすべての欠點を解決するのに役立ちます(ユーザーテキストの選択、複數(shù)の選択のサポート、シンプルコードを妨げることはありません)、カスタムソリューションよりも高速です。

幸いなことに、それがここで議論しようとしていることです!

CSSカスタムハイライトAPI

CSSカスタムハイライトAPIは、任意のテキスト範(fàn)囲をJavaScriptからスタイリングできる新しいW3C仕様(現(xiàn)在作業(yè)ドラフト狀態(tài))です。ここでの方法は、以前にレビューしたユーザーテキスト選択手法に非常に似ています。開発者に(JavaScriptから)任意のスコープを作成し、CSSを使用してスタイルを整える方法を提供します。

テキスト範(fàn)囲を作成します

最初のステップは、ハイライトするテキスト範(fàn)囲を作成することです。これは、JavaScriptの範(fàn)囲を使用して実行できます。だから、現(xiàn)在の選択を設(shè)定するときにそうするように:

 const range = new range();
range.setstart(parentNode、startOffset);
range.setend(parentNode、endoffset);

最初のパラメーターとしてノードが渡された場合、テキストノードではない場合、 setStartsetEndメソッドは異なる動作をすることに注意してください。テキストノードの場合、オフセットはノード內(nèi)の文字の數(shù)に対応します。他のノードの場合、オフセットは親ノードの子供の數(shù)に対応します。

また、 setStartsetEnd範(fàn)囲の開始位置と終了位置を説明する唯一の方法ではないことに注意する価値があります。レンジクラスで利用可能な他の方法をチェックして、他のオプションを確認(rèn)してください。

ハイライトを作成します

2番目のステップは、前のステップで作成されたスコープのハイライトオブジェクトを作成することです。ハイライトオブジェクトは、1つ以上の範(fàn)囲を受信できます。したがって、まったく同じ方法で多くのテキストスニペットを強(qiáng)調(diào)表示したい場合は、おそらくハイライトオブジェクトを作成し、テキストスニペットに対応するすべての範(fàn)囲で初期化する必要があります。

 const highlight = new Highlight(range1、range2、...、rangen);

ただし、必要なだけハイライトオブジェクトを作成することもできます。たとえば、各ユーザーが異なるテキストカラーを取得するコラボレーションテキストエディターを構(gòu)築する場合、各ユーザーのハイライトオブジェクトを作成できます。次に表示されるように、各オブジェクトは異なる方法でスタイリングできます。

ハイライトを登録します

今、ハイライトオブジェクト自體は何もしません。最初に、いわゆるハイライトレジストリに登録する必要があります。これは、CSSハイライトAPIを使用して行われます。レジストリは、ハイライトの名前を指定してハイライトを削除する(またはレジストリ全體をクリアする)ことで新しいハイライトを登録できるマップのようなものです。

1つのハイライトを登録する方法は次のとおりです。

 css.highlights.set( 'My-Custom-Highlight'、ハイライト);

my-custom-highlightは、選択した名前とhighlight前のステップで作成されたハイライトオブジェクトです。

スタイルの強(qiáng)調(diào)表示

最後のステップは、登録されたハイライトを?qū)g際にスタイリングすることです。これは、ハイライトオブジェクトを登録するときに選択した名前を使用して、新しいcss ::highlight() pseudo-elementで行われます(例ではmy-custom-highlight )。

 :: highlight(私のカスタムハイライト){
  背景色:黃色。
  色:黒;
}

::selectionように、CSS屬性の一部のみが::highlight() pseudo-elementで使用できることは注目に値します。

  • background-color
  • caret-color
  • color
  • cursor
  • fill
  • stroke
  • stroke-width
  • text-decoration (これは、仕様のバージョン2でのみサポートされる場合があります)
  • text-shadow

強(qiáng)調(diào)表示を更新します

ページ上の強(qiáng)調(diào)表示されたテキストを更新する方法はいくつかあります。

たとえば、 CSS.highlights.clear()を使用して、ハイライトレジストリを完全にクリアしてゼロから開始できます。または、オブジェクトを再作成せずに、基礎(chǔ)となるスコープを更新することもできます。これを行うには、 range.setStartrange.setEndメソッド(またはその他の範(fàn)囲メソッド)を再度使用すると、ブラウザがハイライトを塗り直します。

ただし、ハイライトオブジェクトはJavaScriptセットと同様に機(jī)能します。つまり、 highlight.add(newRange)を使用して既存のハイライトに新しい範(fàn)囲オブジェクトを追加するか、 highlight.delete(existingRange)を使用して範(fàn)囲を削除することもできます。

第三に、特定のハイライトオブジェクトをCSS.highlightsレジストリに追加または削除することもできます。このAPIはJavaScriptマップと同様に機(jī)能するため、 setdeleteを使用して、現(xiàn)在登録されているハイライトを更新できます。

ブラウザのサポート

CSSカスタムハイライトAPIの仕様は比較的新しいものであり、ブラウザでの実裝はまだ不完全です。したがって、これはWebプラットフォームに非常に便利な追加になりますが、生産環(huán)境にはまだ適していません。

Microsoft Edgeチームは現(xiàn)在、ChromiumのCSSカスタムハイライトAPIを?qū)g裝しています。実際、この機(jī)能は、実験的なWebプラットフォーム機(jī)能フラグを有効にすることにより、Canaryバージョンで利用できるようになりました(About:Flags)。この機(jī)能がChrome、Edge、その他のクロムベースのブラウザでいつリリースされるかについての明確な計畫はありませんが、すでに非常に近いです。

Safari 99はこのAPIもサポートしていますが、実験フラグの後(開発→実験的特徴→APIのハイライト)、範(fàn)囲オブジェクトの代わりに靜的レンジオブジェクトを使用するため、インターフェイスはわずかに異なります。

FirefoxはまだこのAPIをサポートしていませんが、詳細(xì)についてはこのAPIでのMozillaの位置を読むことができます。

デモ

Microsoft Edgeといえば、CSSカスタムハイライトAPIを試すことができるデモを設(shè)定しました。ただし、デモを試す前に、About:Flagsページで有効になっている実験的なWebプラットフォーム機(jī)能フラグを使用して、ChromeまたはEdge Canaryを使用していることを確認(rèn)してください。

/ボタンデモを表示します

このデモンストレーションでは、カスタムハイライトAPIを使用して、ページの上部にある検索フィールドに入力するものに基づいて、ページのテキスト範(fàn)囲を強(qiáng)調(diào)表示します。

ページがロードされると、JavaScriptコードはページ內(nèi)のすべてのテキストノード(TreeWalkerを使用)を取得し、ユーザーが検索フィールドに何かを入力すると、一致するまでコードがこれらのノードを反復(fù)します。次に、これらの一致を使用して範(fàn)囲オブジェクトを作成し、カスタムハイライトAPIを使用して強(qiáng)調(diào)表示します。

要約します

それで、この新しいブラウザによって提供されるハイライトAPIは本當(dāng)に価値がありますか?間違いなく価値があります!

まず、CSSカスタムハイライトAPIが最初に少し複雑に見える場合でも(たとえば、スコープを作成してから強(qiáng)調(diào)表示してから登録し、最後にスタイルする必要があります)、新しいDOM要素を作成して適切な場所に挿入するよりもはるかに簡単です。

さらに重要なことは、ブラウザエンジンがこれらの範(fàn)囲を非常に迅速にスタイリングできることです。

::highlight() pseudo-elementでCSS屬性の一部を使用できるようにする理由は、屬性のこの部分にページのレイアウトを再現(xiàn)せずに非常に効果的に適用できるプロパティのみが含まれているためです。エンジンは、テキストの範(fàn)囲を強(qiáng)調(diào)するためにページの周りに新しいDOM要素を挿入することにより、より多くの作業(yè)を行う必要があります。

しかし、私を信じないでください。 Fernando FioriはAPIの開発に関與し、この素晴らしいパフォーマンス比較デモを作成しました。私のコンピューターでは、CSSカスタムハイライトAPIのパフォーマンスは、DOMベースのハイライトよりも平均5倍高速です。

ChromiumとSafariはすでに実験的なサポートを提供しているため、生産環(huán)境で使用できるものに近づいています。ブラウザが一貫してカスタムハイライトAPIをサポートし、これがロックを解除する機(jī)能を確認(rèn)するのが待ちきれません!

以上がCSSカスタムハイライトAPI:最初の外観の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ロードスピナーとアニメーションを作成するためのCSSチュートリアル ロードスピナーとアニメーションを作成するためのCSSチュートリアル Jul 07, 2025 am 12:07 AM

CSSロード回転子を作成するには3つの方法があります。1。境界の基本回転子を使用して、HTMLとCSSを介してシンプルなアニメーションを?qū)g現(xiàn)します。 2。複數(shù)のポイントのカスタム回転子を使用して、異なる遅延時間を経てジャンプ効果を?qū)g現(xiàn)します。 3.ボタンに回転子を追加し、JavaScriptを介してクラスを切り替えて、読み込みステータスを表示します。各アプローチは、ユーザーエクスペリエンスを向上させるために、色、サイズ、アクセシビリティ、パフォーマンスの最適化などのデザインの詳細(xì)の重要性を強(qiáng)調(diào)しています。

CSSブラウザの互換性の問題とプレフィックスに対処します CSSブラウザの互換性の問題とプレフィックスに対処します Jul 07, 2025 am 01:44 AM

CSSブラウザの互換性とプレフィックスの問題に対処するには、ブラウザサポートの違いを理解し、ベンダーのプレフィックスを合理的に使用する必要があります。 1. FlexBoxやグリッドのサポート、位置:粘著性の無効、アニメーションのパフォーマンスなどの一般的な問題を理解することは異なります。 2. CANIUSE確認(rèn)機(jī)能サポートステータスを確認(rèn)します。 3. -webkit-、-moz-、-ms-、-o-およびその他のメーカーのプレフィックスを正しく使用します。 4.自動的にプレフィックスを追加するためにAutoprefixerを使用することをお勧めします。 5. PostCSSをインストールし、ターゲットブラウザを指定するようにBrowserSlistを構(gòu)成します。 6.建設(shè)中の互換性を自動的に処理します。 7. Modernizr検出機(jī)能は、古いプロジェクトに使用できます。 8.すべてのブラウザの一貫性を追求する必要はありません、

ディスプレイの違いは何ですか:インライン、ディスプレイ:ブロック、ディスプレイ:インラインブロック? ディスプレイの違いは何ですか:インライン、ディスプレイ:ブロック、ディスプレイ:インラインブロック? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:インライン、ブロック、およびinline-blockinhtml/cssarelayoutbehavior、spaceusage、andstylingcontrol.1.inlineelementsflowwithtext、notstartonnewlines、nagrorewidth/height、height、andonlyhorizo??ntalpadddddddddddddddding

CSSクリップパスでカスタムシェイプを作成します CSSクリップパスでカスタムシェイプを作成します Jul 09, 2025 am 01:29 AM

CSSのクリップパス屬性を作物要素に使用して、寫真やSVGに依存することなく、三角形、円形ノッチ、ポリゴンなどのカスタム形狀になります。その利點には、次のものが含まれます。1。円、楕円、ポリゴンなどのさまざまな基本的な形狀をサポートします。 2。レスポンシブ調(diào)整とモバイル端子に適応可能。 3.アニメーションが簡単で、HoverまたはJavaScriptと組み合わせて動的効果を?qū)g現(xiàn)できます。 4.レイアウトフローには影響せず、ディスプレイエリアのみを収穫します。一般的な使用法は、円形のクリップパス:円(50pxatcenter)および三角クリップパス:ポリゴン(50%0%、100 0%、0 0%)などです。知らせ

スタイリングは、CSSとは異なるリンクを訪問しました スタイリングは、CSSとは異なるリンクを訪問しました Jul 11, 2025 am 03:26 AM

アクセスしたリンクのスタイルを設(shè)定すると、特にコンテンツ集約型のWebサイトでユーザーエクスペリエンスを向上させることができ、ユーザーがより良いナビゲートを支援します。 1。CSSを使用してください:訪問した擬似クラスは、色の変化などの訪問されたリンクのスタイルを定義します。 2。ブラウザは、プライバシーの制限により、いくつかの屬性の変更のみを許可することに注意してください。 3.突然の狀態(tài)を避けるために、色の選択は全體的なスタイルと調(diào)整する必要があります。 4.モバイル端子はこの効果を表示しない場合があり、アイコン補助ロゴなどの他の視覚的なプロンプトと組み合わせることをお勧めします。

CSSペイントAPIとは何ですか? CSSペイントAPIとは何ですか? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdynamicimagegeneration incssusingjavascript.1.developerscreateapaintclasswithapaint()method.2.they registeritviaregisterpaint()

CSSを使用して応答性のある畫像を作成する方法は? CSSを使用して応答性のある畫像を作成する方法は? Jul 15, 2025 am 01:10 AM

CSSを使用してレスポンシブ畫像を作成するには、主に次の方法で達(dá)成できます。1。最大幅を使用してください:100%と高さ:自動化して、割合を維持しながら畫像がコンテナ幅に適応できるようにします。 2。HTMLのSRCSETおよびサイズの屬性を使用して、異なる畫面に適合した畫像ソースをインテリジェントにロードします。 3.オブジェクトフィットとオブジェクトポジションを使用して、畫像のトリミングとフォーカスディスプレイを制御します。一緒に、これらの方法により、畫像がさまざまなデバイスで明確かつ美しく表示されるようになります。

一般的なCSSブラウザの矛盾とは何ですか? 一般的なCSSブラウザの矛盾とは何ですか? Jul 26, 2025 am 07:04 AM

さまざまなブラウザのCSS解析に違いがあるため、主にデフォルトのスタイルの違い、ボックスモデルの計算方法、フレックスボックスおよびグリッドレイアウトサポートレベル、および特定のCSS屬性の一貫性のない動作を含む一貫性のないディスプレイ効果が得られます。 1.デフォルトのスタイル処理は一貫性がありません。解決策は、cssresetまたはremormize.cssを使用して初期スタイルを統(tǒng)合することです。 2。IEの古いバージョンのボックスモデル計算方法は異なります。 Box-Sizing:Border-Boxを統(tǒng)一された方法で使用することをお勧めします。 3. FlexBoxとグリッドは、エッジの場合や古いバージョンでは異なる機(jī)能を示します。より多くのテストを行い、Autoprefixerを使用します。 4.一部のCSS屬性の動作は一貫性がありません。 Caniuseは相談して格下げする必要があります。

See all articles