
Με το Tutorial “πως να δημιουργήσετε μενού με CSS Sprites” θα δείτε τη διαδικασία ανάπτυξης μενού με τη χρήση μόνο μιας εικόνας CSS Sprite. Είναι μια απλή αλά κομψή λύση για τις περισσότερες ιστοσελίδες. Τα CSS Sprites ήταν μια από τις στρατηγικές σχεδιασμού όπου αρχικέ με βοήθησε να χρησιμοποιώ ποιο έξυπνα την HTML. Για όσους από εσάς βλέπετε αυτή την τεχνική για πρώτη φορά σήμερα, ελπίζω να πετύχετε το ίδιο αποτέλεσμα με το δικό μου.
Ο τελικός στόχος είναι να δημιουργήσετε ένα μενού πλοήγησης το οποίο δεν παίρνει πολύ ώρα για να φορτωθεί, και δεν χρειάζεται καθόλου JavaScript για το εφέ στην ενέργεια hover. Αν ακόμα χρησιμοποιείτε ξεχωριστές εικόνες για κάθε στοιχείο του μενού, ήρε η ώρα να αλλάξετε επίπεδο.
Το CSS Sprite θα μειώσει τις HTTP αιτήσεις και θα αύξηση την ταχύτητα φορτώματος της σελίδας. Για περισσότερες λεπτομέρειες σχετικά με τα CSS Sprites ρίξτε μια ματιά στο άρθρο του Chris Coyier με θέμα CSS Tricks. Εξηγεί την ευρύτερη χρήση των CSS Sprites, αλλά σε αυτό το Tutorial θα εστιάσουμε στη δημιουργία του μενού με απλά βήματα.
Ξεφεύγοντας από τη συνηθισμένη ροή των Tutorials, θα πάμε πρώτα να ρίξουμε μια ματιά στο μέρος της σχεδίασης με το Photoshop πριν αρχίσουμε να ασχολούμαστε με τον κώδικα. Αυτό θα συμβεί για να σας παρουσιάσουμε ένα απλό τρόπο να χρησιμοποιείτε χάρακες και σημεία για τη δημιουργία και το σχεδιασμό του CSS Sprite.
Οι χάρακες και τα σημεία είναι οι καλύτεροι σας φίλοι όταν δουλεύεται με CSS Sprites. Για να έχετε το πλεονέκτημα των οδηγών στο Photoshop, ενεργοποιήστε τους από το μενού View > Rulers. Αφού έχετε ενεργοποιήσει τους χάρακες μπορείτε να δημιουργήσετε ένα νέο οδηγό κάνοντας Click στον χάρακα και μετά σέρνοντας προς το χώρο σχεδίασης. Οι οδηγοί μπορούν να χρησιμοποιηθούν για να στοιχίσετε το CSS Sprite. Διαφορετικά μπορείτε να ενεργοποιήσετε το πλέγμα σχεδίασης από το μενού View > Show > Grid.
Προκειμένου η τοποθέτηση να λειτουργήσει με το CSS, θα πρέπει να γνωρίζετε την ακριβή θέση κάθε στοιχείου μέσα στο Sprite. Εγώ έχω επιλέξει ένα σύστημα μέτρησης αντί να τοποθετώ τα στοιχεία στο Sprite σε αυθαίρετες θέσεις.
Για να το θέσω διαφορετικά, προτιμώ να θυμάμαι διαστάσεις όπως 100px, 200px, κλπ. αντί να θυμάμαι διαστάσεις όπως 101px, 342px, κλπ. Μοιράζοντας το Sprite σε ένα λογικό πλέγμα, κάνει τις μελλοντικές αλλαγές σημαντικά ποιο ανώδυνες και συχνά χρειάζεται λιγότερη προσαρμογή. Μπορείτε να βρείτε την εικόνα που χρησιμοποιώ για το Sprite στο τέλος του άρθρου.
Με τον κώδικα που ακολουθεί θα δημιουργήσουμε μια βασική δομή για μενού που θα λειτουργεί με CSS. Δημιουργήστε ένα νέο αρχείο ή βάλτε τον κώδικα σε ένα ήδη υπάρχον αρχείο.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="Nikos Merianos" />
<title>CSS Sprites Menu</title>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
<ul id="menu">
<li class="home">
<a href="#" class="selected">
Αρχική
</a>
</li>
<li class="blog">
<a href="#">
Blog
</a>
</li>
<li class="forum">
<a href="#">
Forum
</a>
</li>
</ul>
</body>
</html>
Το μενού πλοήγησης που δημιουργούμε θα δομηθεί ως λίστα για να είναι Semantic Code. Να θυμάστε πως τα στοιχεία της λίστας θα προβάλουν μόνο εικόνες. Οι ιδιότητες overflow και indent θα οριστούν σε hidden και σε μια αρνητική τιμή αντίστοιχα για να αποκρύψουν το κείμενο από το χρήστη. Δεν θέλουμε να τα αφήσουμε κενά γιατί έτσι θα δώσουμε στις μηχανές αναζήτησης λιγότερο περιεχόμενο για να διαβάσουν. Παρόλο που οι εικόνες μας θα έχουν κείμενο οι μηχανές αναζήτησης δεν είναι σε θέση να το αναγνωρίσουν.
Προσέχετε ! : όσο τα σχέδια είναι όλο και ποιο πολύ βασισμένα σε γραφικά, είναι ωραίο να χρησιμοποιούμε εικόνες (με μέτρο) στη θέση του κειμένου για στοιχεία όπως το μενού, τα Benners, τα κουμπιά, κλπ. Αν επιλέξετε να κάνετε κάτι τέτοιο θα πρέπει οπωσδήποτε να έχετε κατά νου της μηχανές αναζήτησης.
Αντιγράψτε τον κώδικα που ακολουθεί στο αρχείο του CSS για το έργο. Η επεξήγηση ακολουθεί.
#menu
{
list-style: none;
margin: 0px;
padding: 0px;
clear: both;
}
#menu li
{
overflow: hidden;
text-indent: -9999px;
display: inline;
float: left;
margin-right: 10px;
}
#menu li a
{
background: url('images/sprite.jpg') no-repeat;
width: 100%;
height: 100%;
display: block;
}
/* Home Button */
#menu li.home
{
width: 115px;
height: 70px;
}
#menu li.home a
{
background-position: -5px -5px;
}
#menu li.home a:hover
{
background-position: -5px -65px;
}
#menu li.home a.selected
{
background-position: -5px -135px;
}
/* Blog Button */
#menu li.blog
{
width: 120px;
height: 70px;
}
#menu li.blog a
{
background-position: -125px -5px;
}
#menu li.blog a:hover
{
background-position: -125px -65px;
}
#menu li.blog a.selected
{
background-position: -125px -135px;
}
/* Forum Button */
#menu li.forum
{
width: 160px;
height: 70px;
}
#menu li.forum a
{
background-position: -250px -5px;
}
#menu li.forum a:hover
{
background-position: -250px -65px;
}
#menu li.forum a.selected
{
background-position: -250px -135px;
}
Η ιδιότητα background-position στο CSS σας επιτρέπει να ορίσετε ένα ζευγάρι συντεταγμένων για την εικόνα του background. Το πλεονέκτημα αυτής της ιδιότητας είναι πως μπορείτε να χρησιμοποιήσετε μόνο μια εικόνα για το background και ορίσετε ποιο τμήμα της θα είναι ορατό κάθε φορά σε διαφορετικά στοιχεία της HTML. Αυτή η ιδιότητα είναι η ραχοκοκαλιά των CSS Sprites.
Θα θυμάστε πως σε κάθε αντικείμενο της λίστας ορίσαμε μια διαφορετική κλάση. Αυτό μας επιτρέπει να επεξεργαστούμε της ρυθμίσεις της ιδιότητας background-position για κάθε στοιχείο του μενού ξεχωριστά. Η εικόνα έχει ήδη οριστεί στην ετικέτα της HTML για τους συνδέσμους (a), έτσι η ρυθμίσεις που πρέπει να συμβούν είναι μόνο για της συντεταγμένες κάθε στοιχείου του μενού ξεχωριστά. Ειδικά σε πολύ μεγάλα έργα, αν διατηρείτε χαμηλό των αριθμό των περιττών στιλ είναι εφικτό να έχετε μια λογική και καθαρό κώδικα.
Χρησιμοποιώντας αυτή τη μέθοδο δημιουργήσαμε τρις διαφορετικές καταστάσεις για το μενού:
Αν δεν σχεδιάζετε κάτι ασυνήθιστο (πχ μενού πολλαπλών επιπέδων) με την τεχνική αυτή θα εξοικονομήσετε αρκετό χρόνο.
Αυτή τη στιγμή θα πρέπει να έχετε ένα μενού που βασίζετε μόνο σε μια εικόνα. Όπως μας εξηγεί και ο Chris Coyier αυτή η τεχνική μειώνει τις HTTP αιτήσεις, επιτρέποντας ένα ποιο ομαλό φόρτωμα της σελίδας, αντί να φορτώνει για κάθε αντικείμενο ξεχωριστά αρχεία.
Έχω ενσωματώσει σε ένα ZIP αρχείο τον πηγαίο κώδικα και το demo για επιπλέον βοήθεια. Το παράδειγμα στο αρχείο είναι λίγο ποιο περιεκτικό, αλλά εξακολουθεί να χρησιμοποιεί την τεχνική του Tutorial. Αν υπάρχει κάποιο σφάλμα ή κάτι δεν το καταλαβαίνετε παρακαλώ αφήστε το σχόλιο σας και επιλύσω το θέμα.
Έχω ένα blog, υπάρχει κάποια περίπτωση να με βοηθήσεις να το βάλω σε αυτό γιατί έχω κολλήσει με το μενού, είναι απλά απίστευτο, αν ναι στείλε μου email!!!
Ευχαριστώ για το χρόνο σου.
Odys!
Ωραίο άρθρο. Μία ερώτηση έχω. Γιατί τα Home, Blog, Forum τα έκανες class?
Μοναδικά στοιχεία είναι άρα καλό θα ήταν να είναι Id ώστε να μπορεί να τα χειριστεί και η javascript.