Durante questo tutorial creeremo una tabella dei prezzi elegante con alcuni effetti hover sorprendenti. Useremo lo script Prefixfree di Lea Verou per mantenere pulito il nostro CSS, inoltre renderemo tutto reattivo, spostando il layout in un paio di punti di interruzione.
L'immagine sotto mostra uno scheletro visivo del markup che creeremo. Come puoi vedere, non è costruito usando le tabelle; stiamo usando liste non ordinate per la massima flessibilità e reattività.
Prima di ogni altra cosa, dobbiamo iniziare con un documento vuoto. Molto importante qui è il meta tag viewport che consentirà a tutti i dispositivi di interpretare correttamente il nostro layout reattivo.
Ora possiamo iniziare con la carne del nostro markup al tavolo (o meglio elenco markup):
In fondo abbiamo incluso prefisso libero (prima della chiusura
tag), che ci consente di usare ovunque proprietà CSS non prefissate. Funziona dietro le quinte, aggiungendo il prefisso del browser corrente a qualsiasi codice CSS, solo quando è necessario.
Dopo aver risolto il nostro markup, diamo un'occhiata ad aggiungere alcuni stili. Lo farò dentro i tag nell'intestazione del documento, ma puoi usare un foglio di stile separato se preferisci.
@import url (http://fonts.googleapis.com/css?family=Ubuntu); * margine: 0; padding: 0; body font-family: Ubuntu, arial, verdana;
Per cominciare, applichiamo un reset CSS di base e usiamo un font personalizzato 'Ubuntu' che viene inserito da Google Fonts.
.pricing_table line-height: 150%; font-size: 12px; margine: 0 auto; larghezza: 75%; larghezza massima: 800 px; padding-top: 10px; margin-top: 100px; .price_block width: 100%; colore: #fff; fluttuare: a sinistra; list-style-type: none; transizione: tutti gli 0.25; posizione: relativa; dimensionamento della scatola: border-box; margin-bottom: 10px; border-bottom: 1px trasparente solido;
Il .pricing_table è mantenuto al 75% di larghezza, ma limitato a 800px in modo che non occupi un'enorme quantità di spazio su schermi di grandi dimensioni.
Per prima cosa ci stiamo avvicinando alle cose mobili .price_block è largo al 100% per impostazione predefinita per coprire l'intera larghezza disponibile. In seguito useremo le media query per adattarci in più blocchi orizzontalmente su schermi più ampi.
Il margine inferiore 10px dato a .pricing_block entra in gioco quando gli utenti visualizzano la tabella dei prezzi su schermi più piccoli, in particolare quando alcuni dei blocchi di prezzi cadono e si sommano uno sotto l'altro. Va a compensare un margine superiore di 10px negativo applicato a .price_title dei blocchi di prezzi impilati di seguito. Leggerai di più sul margine negativo di 10px nella prossima sezione.
Il bordo trasparente 1px per .pricing_block crea una grondaia che aiuta nella separazione dei diversi blocchi di contenuto.
.price_block è anche impostato per avere posizione: relativa;
in modo che quando vengono applicate ombre di casella per gli effetti al passaggio del mouse, è possibile utilizzare z-index sul blocco puntato per far apparire la sua ombra sopra gli elementi vicini.
.pricing_table h3 text-transform: uppercase; imbottitura: 5px 0; sfondo: # 333; margine: -10px 0 1px 0;
I prezzi hanno un margine superiore di -10 px. Ciò causa il contenuto del .price_block per spostarsi verso l'alto in modo che vengano visualizzati sopra l'ombra, dando una sensazione di luce superiore.
Ora per le sezioni che effettivamente mostrano i dettagli del prezzo.
.prezzo display: tabella; sfondo: # 444; larghezza: 100%; altezza: 70 px; .price_figure font-size: 24px; text-transform: maiuscolo; allineamento verticale: medio; display: table-cell; .price_number font-weight: bold; blocco di visualizzazione; .price_tenure font-size: 11px;
Un punto che vale la pena notare è che i cartellini dei prezzi sono allineati verticalmente al centro. Questo è richiesto per i prezzi che potrebbero non avere un mandato (es. GRATIS).
.prezzo è impostato per avere display: tabella;
e il suo bambino immediato .price_figure è impostato per avere display: table-cell;
e allineamento verticale: medio;
per ottenere l'effetto.
.price_figure funge da contenitore per .price_number e .price_tenure in modo che possano essere allineati verticalmente al centro come una singola unità.
.caratteristiche background: # DEF0F4; colore: # 000; .features li padding: 8px 15px; border-bottom: 1px solid #ccc; font-size: 11px; list-style-type: none;
.footer padding: 15px; sfondo: # DEF0F4; .action_button text-decoration: none; colore: #fff; font-weight: bold; border-radius: 5px; sfondo: gradiente lineare (# 666, # 333); imbottitura: 5px 20px; font-size: 11px; text-transform: maiuscolo;
.price_block: hover box-shadow: 0 0 0px 5px rgba (0, 0, 0, 0.5); transform: scale (1.04) translateY (-5px); z-index: 1; border-bottom: 0 nessuno; .price_block: hover .price background: linear-gradient (# DB7224, # F9B84A); box-shadow: inset 0 0 45px 1px # DB7224; .price_block: hover h3 background: # 222; .price_block: hover .action_button background: linear-gradient (# F9B84A, # DB7224);
Ci saranno tre aspetti dell'effetto hover:
.price_table ha già applicato transizioni CSS3 che rendono il passaggio del mouse su un'animazione fluida.
È inoltre possibile utilizzare questi effetti al passaggio del mouse come stato attivo se si desidera evidenziare uno dei prezzi per impostazione predefinita. Tutto ciò che devi fare è aggiungere una classe attiva a uno dei blocchi di prezzo e spostare / copiare gli stili di passaggio del mouse su di esso.
Seguiremo un approccio semplice per rendere reattiva la tabella dei prezzi. Le sezioni sono già fluide poiché utilizzano larghezze basate su%, quindi tutto ciò che dobbiamo fare è controllare il numero di blocchi orizzontali visibili su diverse dimensioni dello schermo.
Questi breakpoint sono definiti esclusivamente su ciò che funziona visivamente con questo design. Aggiungiamo le nostre domande sui media sotto gli altri nostri stili.
@media solo schermo e (min-width: 480px) e (max-width: 768px) .price_block width: 50%; prezzo_block: nth-child (dispari) border-right: 1px solid transparent;. price_block: nth-child (3) clear: both; .price_block: nth-child (dispari): hover border: 0 none; @media solo schermo e (min-width: 768px) .price_block width : 25%; prezzo_block border-right: 1px solido trasparente; border-bottom: 0 none; .price_block: last-child border-right: 0 none; prezzo_block: hover border: 0 none;
Per la gamma viewport di 480px - 768px, ciascun blocco dei prezzi viene ingrandito del 50%. Questo li impilerà efficacemente in file di due. Il .price_block: nth-child (3) clear: both;
assicura che il terzo blocco cancelli i due blocchi superiori, anche quando gli stati di hover cambiano le dimensioni di tutto. Stiamo anche impostando un bordo destro di 1 px .price_block(strani) per creare una grondaia verticale tra i blocchi di prezzo sui lati sinistro e destro.
Per 768px e oltre, impostiamo la larghezza di ogni blocco al 25% dandoci file di quattro. Stiamo anche impostando i bordi sul lato destro di tutti i blocchi di prezzo, tranne l'ultimo, per creare la stessa grondaia verticale come sopra.
Con un layout fluido, uno stile semplice e un paio di punti di interruzione, abbiamo creato una tabella dei prezzi CSS3 accurata. Spero che tu lo trovi utile!