In questo breve tutorial, descriveremo un metodo semplice ma utile per il riempimento delle valutazioni a stelle usando HTML, CSS e JavaScript. Ecco cosa stiamo andando a costruire:
Per il nostro esempio, avremo bisogno delle seguenti icone a due stelle:
Con questo in mente, includiamo innanzitutto la famosa libreria Font Awesome nel nostro progetto:
Per quanto riguarda il markup, abbiamo bisogno di un tavolo con sei righe. La prima riga contiene le intestazioni della tabella esimo
, mentre le altre cinque file riportano i dettagli dell'hotel. Ovviamente, nei tuoi progetti, queste righe potrebbero rappresentare qualcosa di diverso.
Ecco l'HTML richiesto:
Hotel | Valutazione |
---|---|
Hotel A | |
Hotel B | |
Ancora più importante, nota il markup che è incluso nel secondo TD
di ogni riga:
Questo è il markup che dobbiamo stilare per visualizzare le valutazioni a stelle dei nostri hotel.
Finora, il nostro progetto si presenta così:
A questo punto, aggiungiamo alcuni CSS di base alla tabella, in questo modo:
table margin: 0 auto; allineamento del testo: centro; border-collapse: collapse; border: 1px solid # d4d4d4; font-size: 20px; sfondo: #fff; table th, table tr: nth-child (2n + 2) background: # e7e7e7; tabella th, table td padding: 20px 50px; table th border-bottom: 1px solid # d4d4d4;
Il prossimo e più importante passo è definire gli stili per il .stelle-esterno
e .stelle-interni
elementi. Ecco il CSS necessario:
.stars-outer display: inline-block; posizione: relativa; font-family: FontAwesome; .stars-outer :: before content: "\ f006 \ f006 \ f006 \ f006 \ f006"; .stars-inner position: absolute; inizio: 0; a sinistra: 0; white-space: nowrap; overflow: nascosto; larghezza: 0; .stars-inner :: before content: "\ f005 \ f005 \ f005 \ f005 \ f005"; colore: # f8ce0b;
Andiamo su alcune cose a questo punto.
Carichiamo le icone desiderate Font Awesome tramite CSS. Questo è un processo in due fasi. In primo luogo, applichiamo font-family: FontAwesome
all'elemento superiore genitore (es. .stelle-esterno
). Successivamente, aggiungiamo le icone agli pseudo-elementi di destinazione impostando i loro caratteri unicode.
Ecco l'unicode per la prima icona:
Ed ecco l'unicode per il secondo:
Un'altra cosa da notare è che ciascuna delle nostre icone dovrebbe apparire cinque volte all'interno di una riga della tabella. Per questo motivo, li disponiamo in questo modo:
.stars-outer :: before content: "\ f006 \ f006 \ f006 \ f006 \ f006"; .stars-inner :: before content: "\ f005 \ f005 \ f005 \ f005 \ f005";
Con il CSS in atto, il progetto si presenta come segue:
Avrai notato che viene visualizzata solo la prima icona. Ma perché? È perché in precedenza abbiamo definito questa regola CSS:
.stars-inner width: 0;
Rimuovendo questa regola, la seconda icona apparirà in cima alla prima, in questo modo:
E se dovessimo fare il .stelle-interni
elementi del 50%, ne riveleremmo la metà:
Comunque, inizialmente il larghezza
del .stelle-interni
l'elemento dovrebbe essere 0
e lo aggiorneremo dinamicamente in base al valore di valutazione dell'hotel in questione. Vediamo come succede nella prossima sezione.
Supponiamo che i nostri hotel abbiano i seguenti valori di valutazione:
const ratings = hotel_a: 2.8, hotel_b: 3.3, hotel_c: 1.9, hotel_d: 4.3, hotel_e: 4.74;
Tieni presente che, per semplicità, vengono specificati i valori hard-coded summenzionati (tra 0 e 5). In un progetto reale, tuttavia, questi potrebbero essere recuperati tramite una richiesta AJAX. Inoltre, nel mondo reale, dovremmo fare alcuni controlli per garantire che i valori derivati siano compresi nell'intervallo 0 - 5.
Quindi ora che abbiamo le valutazioni, eseguiamo le seguenti azioni:
giudizi
oggetto. Si noti che il nome di ciascuna chiave dell'oggetto corrisponde al nome della classe di una riga della tabella. In questo modo, possiamo collegare una chiave oggetto ad un hotel.larghezza
del bersaglio .stelle-interni
elemento uguale al valore arrotondato.In base a ciò che abbiamo descritto sopra, ecco il codice associato:
const starTotal = 5; for (const rating in ratings) // 2 const starPercentage = (ratings [rating] / starTotal) * 100; // 3 const starPercentageRounded = '$ (Math.round (starPercentage / 10) * 10)%'; // 4 document.querySelector ('. $ Rating .stars-inner'). Style.width = starPercentageRounded;
La versione finale del nostro progetto è la seguente:
Questa demo è stata testata su vari dispositivi e funziona bene. Tuttavia, se riscontri problemi, fammelo sapere nei commenti qui sotto. Inoltre, come forse avrai notato, usiamo Babel per compilare il nostro codice ES6 fino a ES5.
In questo breve tutorial, abbiamo trattato un metodo per il riempimento delle valutazioni a stelle. Speriamo che ti sia piaciuto lavorare sul risultato finale: potresti persino trarre vantaggio da questa tecnica in un prossimo progetto, o migliorarlo per le tue esigenze.
Come sempre, se avete domande, condividetele con noi nei commenti qui sotto!