国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
方法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テキストのスタイリングは、常に開(kāi)発者の焦點(diǎn)でした。予想されるのは、CSSカスタムハイライトAPIの出現(xiàn)であり、Webテキストスコープスタイリングに革命をもたらします。

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

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

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

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

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

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

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

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

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

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

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

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

//開(kāi)始位置と終了位置を設(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)のすべての単語(yǔ)を強(qiáng)調(diào)表示する例は次のとおりです。

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

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

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

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

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

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

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

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

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

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

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

CSSカスタムハイライトAPI

CSSカスタムハイライトAPIは、任意のテキスト範(fàn)囲をJavaScriptからスタイリングできる新しいW3C仕様(現(xiàn)在作業(yè)ドラフト狀態(tài))です。ここでの方法は、以前にレビューしたユーザーテキスト選択手法に非常に似ています。開(kā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);

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

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

ハイライトを作成します

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

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

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

ハイライトを登録します

今、ハイライトオブジェクト自體は何もしません。最初に、いわゆるハイライトレジストリに登録する必要があります。これは、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でのみサポートされる場(chǎng)合があります)
  • text-shadow

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

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

たとえば、 CSS.highlights.clear()を使用して、ハイライトレジストリを完全にクリアしてゼロから開(kāi)始できます。または、オブジェクトを再作成せずに、基礎(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、その他のクロムベースのブラウザでいつリリースされるかについての明確な計(jì)畫(huà)はありませんが、すでに非常に近いです。

Safari 99はこのAPIもサポートしていますが、実験フラグの後(開(kāi)発→実験的特徴→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が最初に少し複雑に見(jiàn)える場(chǎng)合でも(たとえば、スコープを作成してから強(qiáng)調(diào)表示してから登録し、最後にスタイルする必要があります)、新しいDOM要素を作成して適切な場(chǎng)所に挿入するよりもはるかに簡(jiǎn)単です。

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

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

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

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

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

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

「レンダリングブロッキングCSS」とは何ですか? 「レンダリングブロッキングCSS」とは何ですか? Jun 24, 2025 am 12:42 AM

ブラウザは、特にインポートされたスタイルシート、ヘッダーのインラインCSS、および最適化されていないメディアクエリスタイルを使用して、ブラウザがインラインおよび外部CSSをデフォルトで主要なリソースとして表示するため、ページレンダリングをブロックします。 1.重要なCSSを抽出し、HTMLに埋め込みます。 2。JavaScriptを介して非クリティカルなCSSの読み込みを遅らせる。 3.メディア屬性を使用して、印刷スタイルなどのロードを最適化します。 4.リクエストを減らすためにCSSを圧縮およびマージします。ツールを使用してキーCSSを抽出し、REL = "Preload"非同期負(fù)荷を組み合わせ、過(guò)度の分割と複雑なスクリプト制御を避けるためにメディア遅延荷重を合理的に使用することをお?jiǎng)幛幛筏蓼埂?/p>

外部対內(nèi)部CSS:最良のアプローチは何ですか? 外部対內(nèi)部CSS:最良のアプローチは何ですか? Jun 20, 2025 am 12:45 AM

TheBestAppRoachforCSDependsonTheProject'sSpecificNeeds.forLargerProjects、externalCssissisbetterduetoMaintainasiladability; forsmallerProjectsOrsingLe-PageApplications、internalcsSmightBemoresuitable.it

私のCSSは小文字でなければなりませんか? 私のCSSは小文字でなければなりませんか? Jun 19, 2025 am 12:29 AM

いいえ、CSSDOESNOTHAVETOBEINLOWERCASE。

CSSケース感度:重要なことを理解する CSSケース感度:重要なことを理解する Jun 20, 2025 am 12:09 AM

cssismostlycase-inssensitive、buturlsandfontfamilynamesarecase-sensitive.1)propertiesandvalueslikecolor:red; areotcase-sensitive.2)urlsmustmatchtheserver'scase、例えば、/畫(huà)像/logo.png.3)

Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Jul 02, 2025 am 01:15 AM

Autoprefixerは、ターゲットブラウザスコープに基づいてCSS屬性にベンダープレフィックスを自動(dòng)的に追加するツールです。 1.エラーで接頭辭を手動(dòng)で維持する問(wèn)題を解決します。 2. PostCSSプラグインフォーム、CSSを解析し、プレフィックスする必要がある屬性を分析し、構(gòu)成に従ってコードを生成する屬性を分析します。 3.使用手順には、プラグインのインストール、ブラウザーリストの設(shè)定、ビルドプロセスでそれらを有効にすることが含まれます。 4。メモには、接頭辭を手動(dòng)で追加しない、構(gòu)成の更新を保持すること、すべての屬性ではなくプレフィックスを維持することが含まれ、プリ??プロセッサでそれらを使用することをお?jiǎng)幛幛筏蓼埂?/p>

CSSカウンターとは何ですか? CSSカウンターとは何ですか? Jun 19, 2025 am 12:34 AM

csScountersCantAnationally-bersectionSandLists.1)usecounter-resettoinitialize、counter-incrementtoincrease、andcounter()orcounters()todisplayvalues.2)を組み合わせたjavascriptfordynamiccontenttoensureaCurateupdatesと組み合わせます。

CSS:ケースはいつ重要ですか(いつそうではありませんか)? CSS:ケースはいつ重要ですか(いつそうではありませんか)? Jun 19, 2025 am 12:27 AM

CSSでは、セレクターと屬性名はケースに敏感ですが、値、名前の色、URL、およびカスタム屬性はケースに敏感です。 1.バックグラウンドカラーや背景色など、セレクターと屬性名はケース非感受性です。 2。値の16進(jìn)數(shù)色は大文字と小文字を區(qū)別しますが、赤と赤などの名前の色は無(wú)効です。 3. URLは癥例に敏感であり、ファイルロードの問(wèn)題を引き起こす可能性があります。 4.カスタムプロパティ(変數(shù))はケースに敏感であり、使用する場(chǎng)合はケースの一貫性に注意を払う必要があります。

conic-gradient()関數(shù)とは何ですか? conic-gradient()関數(shù)とは何ですか? Jul 01, 2025 am 01:16 AM

TheConic-Gradient()functionsscreateScular勾配の勾配は、測(cè)定されていることを確認(rèn)してください

See all articles