Heim Web-Frontend CSS-Tutorial Sternebewertungskomponente für ein einzelnes HTML-Element

Sternebewertungskomponente für ein einzelnes HTML-Element

Jan 24, 2025 am 12:12 AM

In der Vergangenheit erforderte die Erstellung benutzerdefinierter Komponenten komplexe Kombinationen aus HTML, CSS und JavaScript. Die Weiterentwicklung von CSS in den letzten Jahren ermöglicht es uns jedoch, viele Komponenten nur mit HTML und CSS zu erstellen und dabei die bereits in den Browsern integrierte Logik zu nutzen. Warum das Rad neu erfinden, wenn wir das meiste davon wiederverwenden können?

Einfache Komponenten wie Kontrollkästchen, Optionsfelder und Kippschalter können mit HTML und CSS erstellt werden, wobei die Funktionalität auf den Browser angewiesen ist. Aber wir beschränken uns nicht auf einfache Komponenten. Auch komplexere Bauteile können so realisiert werden.

In diesem Artikel erfahren Sie, wie Sie mit einem einzigen HTML- und nur einem JavaScript-Befehl ein Sternebewertungssystem erstellen.

Der HTML

Eine Sternebewertungskomponente ist im Wesentlichen ein Wertebereich, aus dem Benutzer einen auswählen können. Variationen können 5 Werte (einen pro Stern) oder 10 Werte (Halbsterne zulassen) umfassen, aber die Idee bleibt die gleiche - Benutzer können einen Wert auswählen, und zwar nur einen.

HTML bietet einen Eingabetyp für Bereiche, den wir als Basis für unsere Komponente verwenden können:

<input type="range">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

So wie es aussieht, ist diese Eingabe nicht sehr nützlich. Wir müssen einige Attribute basierend auf unseren Designspezifikationen definieren:

  1. Halbe Sternbewertungen zulassen.
  2. Im Bereich von 0,5 bis 5 Sternen.
  3. Die Standardauswahl beträgt 2,5 Sterne.

Basierend auf den oben genannten Spezifikationen sieht der HTML-Code wie folgt aus:

<input type="range" min="0.5" max="5" step="0.5" value="2.5">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Komponente ist eine Bereichseingabe (), die es Benutzern ermöglicht, einen Wert zwischen 0,5 (min="0.5") und 5 Sternen (max="5") in Schritten von auszuwählen 0,5 (Schritt="0,5"). Der Anfangswert ist auf 2,5 Sterne eingestellt (value="2.5").

Das Festlegen des Mindestwerts von 0,5 statt 0 mag ungewöhnlich erscheinen, aber es gibt einen praktischen Grund dafür. Wenn Sie eine Bewertung mit 0 Sternen zulassen, würden 11 potenzielle Werte entstehen, der Bereich stellt jedoch visuell 10 Werte (10 halbe Sterne) dar, was zu einer Diskrepanz zwischen den anklickbaren Bereichen und den Sternen im Bereich führt. Diese Designwahl sorgt für eine bessere Benutzerfreundlichkeit und vereinfacht die spätere Implementierung.

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

Die Einstellung von mindestens 0,5 ermöglicht natürlichere Klickbereiche

Dieses Problem könnte teilweise gelöst werden, indem die Komponente mit 11 Optionsfeldern erstellt würde. Dies würde jedoch neue Probleme im Hinblick auf das Design (wie wählen wir den Wert 0 mit der Maus aus?), die Benutzerfreundlichkeit (sollten wir das native Verhalten einer Bereichseingabe oder das native Verhalten der Optionsfelder nachahmen?) und die Zugänglichkeit (wie können wir das tun) aufwerfen Wir verwalten den Fokus für die Komponente als Ganzes?) 

Das sind tolle Fragen für ein weiteres Tutorial zum Erstellen einer Bewertungskomponente mithilfe von Optionsfeldern. Für dieses Tutorial zum Erstellen der Komponente mithilfe eines einzelnen HTML-Elements habe ich mich für einen Mindestwert von 0,5 entschieden, um diese Komplexität zu vermeiden.

Wir werden später einige Optimierungen hinzufügen, aber dieser Code dient als solider Ausgangspunkt. Ohne CSS ähnelt es optisch einer Standardbereichseingabe:

Screenshot of an input range half selected.

Als nächstes fügen wir ein paar weitere Attribute hinzu. Auch wenn sie im Moment vielleicht nicht bedeutsam erscheinen, werden sie später wichtig sein:

  • Klassenname: Hilft bei der Identifizierung der Bereichseingabe in CSS.
  • Inline-Stile: mit einer benutzerdefinierten Eigenschaft zum Speichern des Eingabewerts.
  • Inline-JavaScript: ein einzelner Befehl zum Aktualisieren der benutzerdefinierten Eigenschaft im oben genannten Inline-Stil.

Der endgültige Code sieht folgendermaßen aus (zur besseren Lesbarkeit formatiert):

<input type="range">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im nächsten Abschnitt werden wir diese Regel etwas verfeinern. Wir müssen Stile für Chrome/Safari und Firefox definieren, und das wird einige Wiederholungen mit sich bringen. Wir können den Prozess optimieren, indem wir benutzerdefinierte Eigenschaften verwenden, um Werte zu speichern und sie auf beide Stile anzuwenden.

Den Track gestalten

Die Spur nimmt die gesamte Größe des Elements ein, und dann verwenden wir einen Farbverlauf, um die benötigten Teile einzufärben.

Über die Breite müssen wir uns keine Gedanken machen – sie nimmt die gesamte Breite des Elements ein –, aber bei der Höhe ist das eine andere Sache. Während Chrome und Firefox die Höhe der Spur an den Container anpassen, ist dies bei Safari nicht der Fall. Daher müssen wir explizit eine Höhe von 100 % angeben.

Als nächstes wollen wir den farbigen Bereich definieren. Wir werden die zuvor erstellten benutzerdefinierten Eigenschaften --val und --size nutzen. Wir legen einen linearen Farbverlauf von links nach rechts fest, der die Farben an dem durch die Eigenschaft --val angegebenen Punkt ändert:

<input type="range" min="0.5" max="5" step="0.5" value="2.5">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir verschieben diesen Farbverlauf in eine andere benutzerdefinierte Eigenschaft im übergeordneten Element. Dadurch können wir den Wert für Chrome/Safari und Firefox wiederverwenden – wie ich bereits erwähnt habe … und wahrscheinlich später erwähnen werde.

Damit haben wir ein Rechteck mit einem dunkleren Bereich, der den ausgewählten Wert darstellt. Der schwarze Bereich ändert sich, wenn wir auf das Rechteck klicken oder darüber streichen. Dies entspricht zwar der gewünschten Funktionalität, es fehlen jedoch die visuellen Elemente. Wir brauchen CSS-Masken.

black and gray rectangle

Ich werde es nicht leugnen, der folgende Teil ist hässlich. Ich habe mich dafür entschieden, ganz auf CSS zu setzen, ohne mich auf externe Bilder oder Inline-SVGs zu verlassen. Sie können den Code vereinfachen, indem Sie eine dieser Optionen verwenden.

Der folgende Code gilt für eine sternförmige Bewertungskomponente, aber wir könnten die Form leicht ändern (z. B. in Kreise), indem wir die Maske ändern.

Wir verwenden eine Reihe konischer Verläufe, um mithilfe von CSS-Masken einen fünfzackigen Stern auszuschneiden. Dabei wird die Größe des eingegebenen Bereichs berücksichtigt, sodass wir nach horizontaler Wiederholung der Maske fünf Sterne erhalten:

<input type="range">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie beim linearen Farbverlauf oben wenden wir diese Maske in den Stilen für Chrome/Safari und Firefox an. Um Codewiederholungen zu vermeiden, definieren wir ihn in einer benutzerdefinierten Eigenschaft innerhalb des übergeordneten Elements.

Der endgültige Code sieht folgendermaßen aus:

<input type="range" min="0.5" max="5" step="0.5" value="2.5">
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass der Code für Webkit und Firefox nahezu identisch ist. Eine Funktion wie Mixins in CSS wäre in solchen Situationen unglaublich hilfreich – obwohl es noch besser wäre, einen einzigen unterstützten Standard zu haben.

Wir haben auch einige Stile hinzugefügt (Print-Color-Adjust: Exact), um sicherzustellen, dass die Komponente genau so gedruckt wird, wie sie auf dem Bildschirm erscheint. Dies ist nützlich, wenn Sie mit Hintergründen arbeiten, da diese normalerweise nicht standardmäßig gedruckt werden.

Den Daumen stylen

Bei diesem Sternebewertungssystem ist der Daumen nicht besonders wichtig. Der visuelle Effekt wird durch die Schiene selbst erreicht. Also verstecken wir den Daumen aus der Sicht.

Wir können dies tun, indem wir die Deckkraft auf Null setzen:

<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>

Nach dem Login kopieren
  • 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;
}
Nach dem Login kopieren

Vielleicht ist Ihnen aufgefallen, dass ich in den Codeausschnitten oben keine CSS-Verschachtelung verwendet habe (während ich sie in den Demos unten verwendet habe). Dies liegt daran, dass die Verschachtelung relativ neu ist und mit einigen Einschränkungen verbunden ist: Viele ältere Browser unterstützen sie nicht und auch einige moderne Browser haben Probleme mit nicht standardmäßigen Pseudoelementen – ich habe einen Fehler in WebKit bezüglich dieses Verhaltens in Safari gemeldet.

Beispiele

Man sagt, ein Bild sagt mehr als tausend Worte. Hier sind einige Beispiele für Eingabebereiche, die mit einem einzelnen HTML-Element codiert werden können.

Beginnen wir mit der in diesem Artikel beschriebenen Sternebewertungskomponente:

Als nächstes ein farbenfrohes Beispiel. Es hat eine untypische Form und erfordert die Gestaltung aller Teile einer Bereichseingabe: des Bereichs selbst, der Spur und des Daumens:

Abschließend noch ein Favorit von mir: eine animierte Komponente zur Benutzerzufriedenheit mit nur einem Element. Wählen Sie eines der verschiedenen Gesichter aus und sie bewegen sich je nach Auswahl:

Abschluss

Es gibt viele verschiedene Möglichkeiten, diese Komponente zu codieren. Ich habe es nur mit HTML und CSS gemacht (mit einem Inline-JavaScript-Befehl), aber Sie könnten auch Bilder oder mehr JavaScript verwenden, um dieses hässliche Inlining zu verhindern. 

Der Kerngedanke ist, dass Sie mit minimalen HTML- und CSS-Änderungen die Spezifikationen anpassen können und Ihr Sternebewertungssystem sich etwas anders verhält oder ganz anders aussieht.

Die Komponente kann auch mit mehreren Optionsfeldern neu erstellt werden, wodurch die JavaScript-Zeile und etwas CSS überflüssig werden. Es ist ein gültiger Ansatz. Es wäre zusätzlicher Code erforderlich, um die Zugänglichkeit sicherzustellen und das Standardverhalten zu reproduzieren, das standardmäßig mit einem Eingabebereich ausgestattet ist. Manche finden diesen Ansatz vielleicht einfacher, und er ist auf jeden Fall machbar.

Das ist eines der Dinge, die ich an der Softwareentwicklung am meisten liebe: Es gibt viele verschiedene Ansätze und Optionen, jede mit ihren Vor- und Nachteilen, und alle sind wunderbar umsetzbar.

Ich hoffe, Ihnen hat der Artikel gefallen. Codieren Sie weiter!

Das obige ist der detaillierte Inhalt vonSternebewertungskomponente für ein einzelnes HTML-Element. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1666
14
PHP-Tutorial
1273
29
C#-Tutorial
1253
24
Ein Vergleich statischer Formanbieter Ein Vergleich statischer Formanbieter Apr 16, 2025 am 11:20 AM

Versuchen wir, hier einen Begriff zu prägen: "Statischer Formanbieter". Sie bringen Ihre HTML

Ein Beweis für das Konzept, um Sass schneller zu machen Ein Beweis für das Konzept, um Sass schneller zu machen Apr 16, 2025 am 10:38 AM

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

Wöchentliche Plattformnachrichten: HTML -Ladeattribut, die Haupt -ARIA -Spezifikationen und Wechsel von Iframe zu Shadow Dom Wöchentliche Plattformnachrichten: HTML -Ladeattribut, die Haupt -ARIA -Spezifikationen und Wechsel von Iframe zu Shadow Dom Apr 17, 2025 am 10:55 AM

In der Zusammenfassung der Plattformnachrichten in dieser Woche stellt Chrome ein neues Attribut für das Laden, Zugänglichkeitspezifikationen für Webentwickler und die BBC -Bewegungen ein

Einige praktisch mit dem HTML-Dialogelement Einige praktisch mit dem HTML-Dialogelement Apr 16, 2025 am 11:33 AM

Ich schaue mir das HTML -Element zum ersten Mal an. Ich habe es für eine Weile dessen bewusst, aber Haven &#039; Es wurde es noch nicht für einen Dreh genommen. Es hat einige ziemlich cool und

Papierform Papierform Apr 16, 2025 am 11:24 AM

Buy or Build ist eine klassische Technologiedebatte. Das Aufbau von Dingen selbst ist vielleicht billiger, weil Ihre Kreditkartenrechnung keine Werbebuchung gibt, aber

Wohin sollte 'Podcast' -Link abonnieren? Wohin sollte 'Podcast' -Link abonnieren? Apr 16, 2025 pm 12:04 PM

Für eine Weile war iTunes der große Hund im Podcasting. Wenn Sie also "Abonnieren Sie Podcast" verlinkt haben, um zu mögen:

Es ist alles in der Kopf Es ist alles in der Kopf Apr 15, 2025 am 11:01 AM

Der Dokumentkopf ist vielleicht nicht der glamouröseste Teil einer Website, aber was darauf einfließt

Optionen zum Hosting Ihrer eigenen nicht-javaScript-basierten Analysen Optionen zum Hosting Ihrer eigenen nicht-javaScript-basierten Analysen Apr 15, 2025 am 11:09 AM

Es gibt eine Menge Analyseplattformen, mit denen Sie Besucher- und Nutzungsdaten auf Ihren Websites verfolgen können. Vielleicht vor allem Google Analytics, das weit verbreitet ist

See all articles