Hai mai visto un sito Web che mostra miniature di immagini che sono leggermente ruotate? È un effetto semplice che aggiunge uno strato di personalità visiva. Dicendo che, se non stai raggiungendo l'effetto di rotazione con i CSS, stai lavorando troppo! Impara come farlo bene!
Tutorial ripubblicatoOgni poche settimane, rivisitiamo alcuni dei post preferiti del nostro lettore da tutta la cronologia del sito. Questo tutorial è stato pubblicato per la prima volta nell'agosto del 2011.
Le gallerie di immagini con miniature ruotate sono piuttosto rari, ma è un semplice trucco per aggiungere stile alla tua pagina web. Tuttavia, se non viene fatto bene, il raggiungimento e il mantenimento di questo effetto a volte può rivelarsi un grosso problema!
Per ottenere correttamente questo effetto, le tue prime riflessioni potrebbero essere rivolte alla creazione di miniature ruotate in Photoshop. Tuttavia, questo può rivelarsi difficile a lungo termine. Gli svantaggi nella creazione di miniature ruotate in questo modo includono:
Non sarebbe bello se potessi eseguire questa piccola rotazione con una riga di codice? Bene, puoi! Impariamo come.
Una breve panoramica di ciò che stiamo cercando di realizzare rivela i seguenti passi:
img
etichettaPer assicurarci che la nostra galleria degrada con grazia, i passaggi da 1 a 3 saranno realizzati usando i CSS. Il passaggio 4 (l'effetto di rotazione) verrà realizzato utilizzando CSS3.
Prima di creare le nostre miniature, è necessario determinare la dimensione di ciascuna miniatura sullo schermo.
Se le nostre miniature sono troppo piccole e le ruotiamo troppo di un angolo, alcuni degli angoli ci daranno uno spazio vuoto. Come questo:
Quindi, per riempire adeguatamente l'area della maschera, possiamo concludere che quanto più la nostra miniatura viene ruotata tanto più grande dovrà essere. In termini matematici, all'aumentare dell'angolo di rotazione della miniatura, anche le dimensioni della miniatura (e viceversa).
I passaggi 3-6 descrivono come calcolare matematicamente il dimensionamento proporzionato per la maschera immagine e la miniatura. Capire che non è necessario essere in grado di ruotare le immagini con il CSS trasformare
proprietà. Piuttosto, il suo scopo è quello di aiutarti a capire come determinare correttamente il dimensionamento dei tuoi elementi per consentire una rotazione completa a 360 °. Questo garantisce che non rimarrai con brutti angoli vuoti.
Per evitare di mostrare uno spazio vuoto nella nostra maschera, dobbiamo determinare UNO dei seguenti:
Poiché la miniatura e la maschera immagine sono proporzionalmente di dimensioni uguali, se impostiamo la dimensione di uno possiamo calcolare la dimensione dell'altro.
In questo esempio, imposteremo prima la dimensione della maschera dell'immagine. Impostando la dimensione della nostra maschera immagine possiamo usare un po 'di matematica per calcolare la dimensione della miniatura:
La lunghezza diagonale è un numero importante. Per consentire alla nostra anteprima di girare a 360 °, il suo lato più corto deve essere uguale al lato più lungo della maschera dell'immagine. (Anche se potresti non averne bisogno, il provisioning per la rotazione di 360 ° consentirà di apportare modifiche future all'angolo di rotazione senza dover ridimensionare le miniature).
Come puoi vedere, il lato più corto della nostra miniatura deve essere uguale al lato più lungo della nostra maschera. Se non lo è, resteremo con lo spazio vuoto. Ricorda: la dimensione della miniatura è proporzionalmente maggiore della dimensione della maschera dell'immagine.
Calcolare le dimensioni della miniatura in modo che si adatti correttamente è facile una volta che conosciamo le dimensioni della maschera immagine. Semplicemente prendiamo il lato più grande della maschera (la diagonale) e lo lasciamo uguale al lato più corto della nostra miniatura.
Abbiamo ora determinato la nostra maschera e le dimensioni delle miniature. Sappiamo se la nostra maschera immagine è 180x240px, che la miniatura dell'immagine all'interno di quella maschera deve essere 300x400px per consentire la rotazione di 360 °.
Una nota felice: Poiché la maschera di immagine e le dimensioni delle miniature sono proporzionalmente uguali, questa matematica funzionerebbe anche se prima impostiamo la dimensione della miniatura! Useremo lo stesso teorema di Pitagora e le relazioni proporzionali per determinare le dimensioni corrette.
Ora che conosciamo tutte le nostre dimensioni, creiamo le miniature ruotate iniziando con un codice HTML di base.
Miniature ruotate con CSS3 Miniature ruotate con CSS3
Solo valori numerici
Questo markup HTML di base inserisce quanto segue:
- Ciò consentirà all'utente di cambiare l'angolo di rotazione. Inoltre, abbiamo impostato il nostro valore
attributo uguale alla stessa quantità che verrà inizialmente impostata nel nostro CSS (15 in questo caso).
- Questo messaggio di errore verrà nascosto alla vista. Usando jQuery, lo mostreremo se l'utente inserisce qualcosa oltre a un numero nella casella di input.
- Queste sono le nostre miniature che possono essere collegate a qualsiasi cosa tu voglia.clear: both
- Cancella le nostre miniature fluttuanticlass = "maschera"
- La classe per la nostra maschera immagineApplichiamo uno stile di base alla nostra pagina per dargli struttura e semplicità.
body margin: 0; padding: 0; sfondo: #eee; famiglia di font: Ginevra, Lucida Sans, Lucida Grande, Lucida Sans Unicode, Verdana, sans-serif; #wrapper width: 840px; margine: 0 auto; sfondo: #fff; border: 1px solid #ccc; padding: 25px; border-top: none; #error_message color: red; display: none; font-size: .8em;
Nota qui che abbiamo nascosto il nostro messaggio di errore
per impostazione predefinita, la commutazione verrà attivata più tardi in jQuery.
Aggiungiamo qualche altro dettaglio per migliorare il nostro stile di base
# wrapper border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; box-shadow: 0 0 5px #ccc; -moz-box-shadow: 0 0 5px #ccc; -webkit-box-shadow: 0 0 5px #ccc;
Ora il nostro contenuto è centrato con una buona spaziatura e alcuni effetti CSS3 per uno stile di pagina ottimizzato.
Applichiamo la maschera immagine alle nostre miniature. Nel nostro HTML, abbiamo avvolto ogni miniatura in un tag di ancoraggio e gli abbiamo dato una classe di maschera
che useremo nel nostro CSS.
.maschera posizione: relativa; altezza: 180px; larghezza: 240px; float: sinistra; overflow: hidden; margin: 15px; border: 5px solid # f6f6f6; box-shadow: 0 0 1px # 000; -moz-box-shadow: 0 0 1px # 000; -webkit-box-shadow: 0 0 1px # 000;
Ecco una descrizione delle proprietà CSS che abbiamo usato (e del perché le abbiamo usate):
position: relative
- Nostro img
i tag saranno posizionati assolutamente all'interno della nostra maschera immaginealtezza
, larghezza
- In precedenza abbiamo determinato le dimensioni della nostra maschera di immagine. Questo è dove mettiamo quelle dimensioni.float: sinistra
- Galleggia le nostre immagini in modo che appaiano in una forma di galleria.overflow: hidden
- Come calcolato in precedenza, le nostre miniature saranno 300x400px. Tuttavia, mostreremo solo una porzione (180x240px) di essi. Questa proprietà agisce come maschera, nascondendo la porzione delle nostre miniature che si estende al di fuori delle dimensioni 180x240.margine
- Distanzia le nostre immaginiconfine
, box-ombra
- Questo ci dà un doppio bordo (nel supporto dei browser). Il confine
proprietà ci dà un bordo spesso, bianco sporco intorno all'immagine mentre il box-ombra
ci dà un bordo sottile e nero intorno al nostro bordo spesso bianco sporco.Imposta le dimensioni delle miniature in base alle dimensioni calcolate nel passaggio 5.
.mask img height: 300px; larghezza: 400px;
In questo momento, le nostre miniature sono posizionate relativamente (dall'angolo in alto a sinistra).
Vogliamo che la nostra miniatura sia centrata orizzontalmente e verticalmente all'interno della maschera.
Per fare ciò, usiamo le seguenti regole CSS:
.mask img position: absolute; margin-top: -150px; / * metà altezza * / margine-sinistra: -200px; / * metà larghezza * / superiore: 50%; a sinistra: 50%;
Ecco una descrizione di ciò che abbiamo fatto:
position: absolute
- Questo posiziona la miniatura assolutamente all'interno della maschera immaginemargine
- Impostiamo margini negativi che sono esattamente la metà dell'altezza e della larghezza dell'immagine (300x400), quindi impostiamo le nostre proprietà di posizionamento superiore
e sinistra
che riporta gli elementi nel centro perfetto.Useremo la proprietà CSS3 trasformare
ruotare i nostri elementi. Quindi, il nostro CSS includerà tutti i prefissi del browser
.mask img -webkit-transform: ruotare (15 gradi); -moz-transform: rotate (15deg); -o-transform: rotate (15deg); -ms-transform: ruotare (15deg); transform ruotare (15deg);
Il CSS qui è piuttosto semplice. Abbiamo appena posto il nostro angolo di rotazione tra parentesi seguito da "deg".
In questo esempio abbiamo usato 15 come valore di rotazione, ma potresti inserire un valore diverso lì. Poiché abbiamo calcolato correttamente le dimensioni della nostra maschera e miniatura, abbiamo predisposto lo spazio per una rotazione completa di 360 °! Un intero positivo ruota l'immagine verso destra, un numero intero negativo ruota l'immagine verso sinistra.
Come ulteriore effetto, aggiungeremo una semplice linea di CSS che cambia il nostro colore del bordo quando l'utente passa con il mouse sopra l'immagine.
.mask: hover border-color: #ddd;
Come bonus, consentiremo all'utente di inserire un valore nella nostra casella di input che modifica l'angolo di rotazione CSS. Quindi, per prima cosa, aggiungiamo jQuery alla fine della nostra pagina subito prima della chiusura corpo
tag con un link al nostro script personalizzato:
Ora configuriamo jQuery per quando il documento è pronto:
jQuery (document) .ready (function ($) // code here);
Creiamo una funzione ogni volta che il nostro pulsante "aggiorna" viene cliccato.
$ ('button'). click (function () // code here);
Vogliamo memorizzare il valore numerico CSS per l'angolo di rotazione corrente in una variabile.
var rotation_angle_value = $ ('# rotation_amount'). val ();
Questo codice trova il rotation_amount
id (che abbiamo assegnato al ingresso
) e ottiene il suo valore corrente. Se ricordi, impostiamo l'iniziale valore
attributo uguale a 15 (lo stesso del nostro codice CSS per l'angolo di rotazione).
Vogliamo rendere il valore di input dell'utente il nostro nuovo angolo di rotazione. Tuttavia, vogliamo assicurarci che l'utente non inserisca accidentalmente un valore non numerico. Ecco dove il isNaN ()
entra la funzione javascript. isNaN ()
sta per "non è un numero". Questa funzione fa esattamente ciò che implica il suo nome: controlla se il valore che gli passi "non è un numero".
Quindi, useremo il isNaN ()
funzione e passare ad esso il nostro valore dell'angolo di rotazione (come inserito dall'utente). Se non è un numero, verrà visualizzato il nostro messaggio di errore.
// controlla se il valore di input dell'utente è un numero o meno se (isNaN (rotation_angle_value)) // non un numero $ ('# error_message'). show (); // resto del codice qui
Se il valore immesso dall'utente non è un numero, abbiamo visualizzato un messaggio di errore. Ora useremo un altro
dichiarazione per quando loro avere inserito un valore numerico. Per prima cosa nascondiamo il messaggio di errore.
else $ ('# error_message'). hide ();
Poiché l'angolo di rotazione è memorizzato più volte nel nostro CSS (a causa dei vari prefissi del browser) dobbiamo aggiornare TUTTI questi valori con jQuery. Quindi, quello che faremo è memorizzare la sintassi del valore CSS in una variabile (con il nuovo valore di angolo). In sostanza, stiamo scrivendo rotate (15deg)
e sostituendo il valore di '15' con il valore inserito dall'utente.
var rotation_angle = 'rotate (' + rotation_angle_value + 'deg)';
Quindi creiamo un oggetto CSS con valori relazionali. Definiamo ciascuna delle nostre proprietà CSS (i prefissi del browser per la trasformazione), quindi inseriamo il valore come variabile appena definita.
var updated_css = '-webkit-transform': rotation_angle, '-moz-transform': rotation_angle, '-o-transform': rotation_angle, '-ms-transform': rotation_angle, 'transform': rotation_angle,
Ora passiamo semplicemente quella variabile memorizzando le proprietà e i valori CSS in jQuery per aggiornare il nostro CSS!
$ ('. mask img'). css (updated_css);
Questo è ciò che assomiglia a tutto il nostro jQuery:
jQuery (document) .ready (function ($) $ ('button'). click (function () // ottiene il valore dell'angolo di rotazione var rotation_angle_value = $ ('# rotation_amount'). val (); if (isNaN (rotation_angle_value)) // non è un numero $ ('# error_message'). show (); else // è un numero $ ('# error_message'). hide (); // memorizza la sintassi del valore CSS con il nuovo valore dell'angolo di rotazione var rotation_angle = 'ruotare (' + rotation_angle_value + 'deg)'; // memorizzare proprietà e valori CSS var updated_css = '-webkit-transform': rotation_angle, '-moz-transform': rotation_angle, ' -o-transform ': rotation_angle,' -ms-transform ': rotation_angle,' transform ': rotation_angle, // aggiorna il nostro CSS $ ('. mask img '). css (updated_css);););
Spero che tu abbia imparato qualcosa, soprattutto che affidarti a progetti non flessibili in Photoshop è spesso evitabile utilizzando le tecniche CSS3 direttamente nel browser. Grazie per il seguito!