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

ホームページ ウェブフロントエンド CSSチュートリアル 単一の HTML 要素の星評価コンポーネント

単一の HTML 要素の星評価コンポーネント

Jan 24, 2025 am 12:12 AM

これまで、カスタム コンポーネントを作成するには、HTML、CSS、JavaScript を複雑に組み合わせる必要がありました。しかし、近年の CSS の進歩により、ブラウザにすでに組み込まれているロジックを活用して、HTML と CSS だけを使用して多くのコンポーネントを構築できるようになりました。車輪のほとんどは再利用できるのに、なぜ車輪を再発明する必要があるのでしょうか?

チェックボックス、ラジオボタン、トグルスイッチなどの単純なコンポーネントは、機能をブラウザーに依存しながら、HTML と CSS を使用して作成できます。しかし、単純なコンポーネントに限定されるわけではありません。より複雑なコンポーネントもこの方法で実現(xiàn)できます。

この記事では、単一の HTML と 1 つの JavaScript コマンドを使用して星評価システムを構築する方法を説明します。

HTML

星評価コンポーネントは基本的に、ユーザーが選択できる値の範囲です。バリエーションには、5 つの値 (星ごとに 1 つ) または 10 の値 (半分の星も可能) が含まれる場合がありますが、考え方は同じです。ユーザーは 1 つの値を 1 つだけ選択できます。

HTML は、コンポーネントのベースとして使用できる範囲用に設計された入力タイプを提供します。

<input type="range">

現(xiàn)狀では、この入力はあまり役に立ちません。設計仕様に基づいていくつかの屬性を定義する必要があります:

  1. 星半分の評価を許可します。
  2. 星の範囲は 0.5 から 5 つです。
  3. デフォルトの選択は 2.5 つ星です。

上記の仕様に基づくと、HTML は次のようになります:

<input type="range" min="0.5" max="5" step="0.5" value="2.5">

このコンポーネントは範囲入力 () で、ユーザーは 0.5 (min="0.5") から 5 つ星 (max="5") までの値を増分で選択できます。 0.5 (ステップ = "0.5")。初期値は星2.5(value="2.5")に設定されています。

最小値を 0 ではなく 0.5 に設定するのは、珍しいのように思えるかもしれませんが、これには実際的な理由があります。星 0 個のレビューを許可すると 11 個の潛在的な値が作成されますが、範囲は視覚的に 10 個の値 (半分の星 10 個) を表すため、クリック可能な領域と範囲內(nèi)の星の間に不一致が生じます。この設計の選択により、使いやすさが向上し、後の実裝が簡素化されます。

comparison of star-rating systems with 10 and 11 clicking areas

最小値を 0.5 に設定すると、より自然なクリック領域が可能になります

この問題は、11 個のラジオ ボタンを使用してコンポーネントを作成することで部分的に解決されます。しかし、それはデザイン (マウスを使用して 0 の値を選択する方法)、使いやすさ (範囲入力のネイティブ動作またはラジオ ボタンのネイティブ動作を模倣する必要があるか)、およびアクセシビリティ (どのように操作するか) において新たな問題を引き起こすでしょう。コンポーネント全體のフォーカスを管理しますか?)

これらは、ラジオ ボタンを使用して評価コンポーネントを作成する方法に関する別のチュートリアルに適した質(zhì)問です。単一の HTML 要素を使用してコンポーネントを作成する方法に関するこのチュートリアルでは、これらの複雑さを避けるために最小値 0.5 を選択しました。

後でいくつかの調(diào)整を追加しますが、このコードは確実な出発點として機能します。 CSS を使用しない場合、視覚的には標準の範囲入力と似ています:

Screenshot of an input range half selected.

次に、さらにいくつかの屬性を追加します?,F(xiàn)時點では重要ではないように見えますが、後で重要になります:

  • クラス名: CSS での範囲入力を識別するのに役立ちます。
  • インライン スタイル: 入力の値を保存するカスタム プロパティを使用します。
  • インライン JavaScript: 上記のインライン スタイルでカスタム プロパティを更新する?yún)g一のコマンド。

最終的なコードは次のようになります (読みやすいようにフォーマットされています)。

<input type="range">

次のセクションでは、このルールを少し改良します。 Chrome/Safari と Firefox のスタイルを定義する必要があり、いくつかの繰り返しになります。カスタム プロパティを使用して値を保存し、両方のスタイルに適用することでプロセスを合理化できます。

トラックのスタイリング

トラックは要素のサイズ全體を占め、その後、グラデーションを使用して必要な部分に色を付けます。

幅については心配する必要はありません – 幅は要素の幅全體を占めます – ですが、高さについては別の話になります。 Chrome と Firefox はトラックの高さをコンテナに一致させますが、Safari はそうではありません。したがって、高さ 100% を明示的に指定する必要があります。

次に、色付きの領域を定義します。前に作成した --val および --size カスタム プロパティを利用します。 --val プロパティで示された點で色を変更する、左から右への線形グラデーションを設定します。

<input type="range" min="0.5" max="5" step="0.5" value="2.5">

このグラデーションを親要素內(nèi)の別のカスタム プロパティに移動します。これにより、前に述べたように、Chrome/Safari および Firefox の値を再利用できるようになります…そしておそらく後ほど説明します。

これにより、選択した値を表す暗い領域を持つ長方形が得られます。四角形をクリックまたはスライドすると黒い領域が変化します。これは望ましい機能ですが、ビジュアルが欠けています。 CSS マスクが必要です。

black and gray rectangle

それは否定しませんが、次の部分は醜いです。私は、外部畫像やインライン SVG に依存せず、CSS をすべて使用することにしました。これらのオプションのいずれかを使用すると、コードを簡素化できます。

次のコードは星型の評価コンポーネント用ですが、マスクを変更することで簡単に形狀を変更できます (たとえば、円に)。

CSS マスクを使用して、一連の円錐グラデーションを使用して 5 點の星をクリップします。範囲入力のサイズが考慮されるため、マスクが水平方向に繰り返された後、5 つの星が得られます:

<input type="range">

上記の線形グラデーションと同様に、このマスクを Chrome/Safari と Firefox の両方のスタイルに適用します。コードの繰り返しを避けるために、親要素內(nèi)のカスタム プロパティでコードを定義します。

最終的なコードは次のようになります:

<input type="range" min="0.5" max="5" step="0.5" value="2.5">

Webkit と Firefox のコードがほぼ同じであることに注目してください。 CSS のミックスインのような機能は、このような狀況では非常に役立ちますが、サポートされている標準が 1 つある方がさらに良いでしょう。

コンポーネントが畫面に表示されているとおりに正確に印刷されるようにするために、いくつかのスタイル (print-color-adjust:exact) も追加しました。通常、デフォルトでは背景が印刷されないため、これは背景を扱うときに便利です。

親指のスタイリング

この星評価システムの場合、親指は特に重要ではありません。視覚効果はトラック自體を使用して実現(xiàn)されます。そこで、親指を非表示にします。

不透明度をゼロに設定することでこれを行うことができます:

<input 
  type="range"
  min="0.5"
  max="5"
  step="0.5"
  value="2.5"
 >



<h2>
  
  
  The CSS
</h2>

<p>Styling range inputs can be tricky–but not excessively complex. Unfortunately, it requires a lot of repetition due to lack of support and standardization, so we must use vendor prefixes and browser-specific pseudo-classes for the different elements of the component:</p>

  • thumb: the element user can move to change the value. The pseudo-elements are?::-webkit-slider-thumb (Chrome and Safari) and?::-moz-range-thumb (Firefox)
  • track: the area or line along which the thumb slides. The pseudo-elements are?::-webkit-slider-runnable-track (Chrome and Safari) and?::-moz-range-track (Firefox)

And, of course, we'll need to apply some specific styles for each browser, as they don't style the component consistently. For example, we'll need to set up heights on Safari or remove a pesky border on Firefox.

From here, the next steps are as follows:

  1. Defined the size of the star-rating component.
  2. Mask the track to only keep the shapes of the stars visible.
  3. Define the background that only colors the selected stars.
  4. Hide the thumb.

Hiding the thumb is optional and it will depend on the type of component you are building. It makes sense to hide the thumb in this star-rating system. However, in a user-satisfaction component, the thumb may be useful. You can explore different demos at the end of this article.

Styling the range?element

The first step will be removing the default appearance of the range input. This can be done that by setting the the appearance:none property. All modern browsers support it, but we may want to add the vendor-prefixed versions, so it's compatible with older browsers too.

Since we have five stars, it makes sense to set the width to five times the height. aspect-ratio: 5/1 could handle this, but some browsers still have inconsistent support, so we'll "hard code" the size using a custom property.

Additionally, we want to remove the border. Firefox applies a default border to the ranges, and removing it ensures a more consistent styling across browsers.

.star-rating {
  --size: 2rem;
  height: var(--size);
  width: calc(5 * var(--size));
  appearance: none;
  border: 0;
}

お気づきかもしれませんが、上記のコード スニペットでは CSS ネストを使用していません (下のデモでは CSS ネストを使用しています)。これは、ネストが比較的新しいものであり、いくつかの制限があるためです。多くの古いブラウザーはネストをサポートしておらず、一部の最新のブラウザーは非標準の疑似要素に苦労しています。Safari でのこの動作については、WebKit でバグを報告しました。

百聞は一見に如かずと言います。そこで、単一の HTML 要素を使用してコーディングできる入力範囲の例をいくつか示します。

この記事で説明されている星評価コンポーネントから始めましょう:

次に、カラフルな例です。これは特殊な形狀をしており、範囲入力のすべての部分 (範囲自體、トラック、サム) をスタイル設定する必要があります:

最後に、私のお気に入りです。アニメーション化された単一要素のユーザー満足度コンポーネントです。さまざまな面のいずれかを選択すると、選択に基づいて移動します:

結論

このコンポーネントをコーディングするにはさまざまな方法があります。私は HTML と CSS のみを使用して (1 つのインライン JavaScript コマンドを使用して) これを?qū)g行しましたが、畫像や複數(shù)の JavaScript を使用して、醜いインライン化を防ぐこともできます。?

重要なアイデアは、HTML と CSS を最小限に変更するだけで仕様を調(diào)整でき、星評価システムの動作がわずかに異なったり、見た目がまったく異なったりするということです。

コンポーネントは複數(shù)のラジオ ボタンを使用して再作成することもできます。これにより、JavaScript 行と一部の CSS が不要になります。それは有効なアプローチです。アクセシビリティを確保し、入力範囲を備えたデフォルトの動作を再現(xiàn)するには、追加のコードが必要になります。このアプローチが簡単だと感じる人もいるでしょうし、確かに実行可能です。

これは、私がソフトウェア開発で最も気に入っている點の 1 つです。さまざまなアプローチとオプションがあり、それぞれに長所と短所があり、すべてが美しく達成可能です。

記事をお楽しみいただけたでしょうか。コーディングを続けてください!

以上が単一の HTML 要素の星評価コンポーネントの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホット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

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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"非同期負荷を組み合わせ、過度の分割と複雑なスクリプト制御を避けるためにメディア遅延荷重を合理的に使用することをお勧めします。

外部対內(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、例えば、/畫像/logo.png.3)

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

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

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進數(shù)色は大文字と小文字を區(qū)別しますが、赤と赤などの名前の色は無効です。 3. URLは癥例に敏感であり、ファイルロードの問題を引き起こす可能性があります。 4.カスタムプロパティ(変數(shù))はケースに敏感であり、使用する場合はケースの一貫性に注意を払う必要があります。

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

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

See all articles