033.4 Μάθημα 1
Πιστοποιητικό: |
Web Development Essentials |
---|---|
Έκδοση: |
1.0 |
Θέμα: |
033 Styling Περιεχομένου CSS |
Σκοπός: |
033.4 Box Model και Διάταξη CSS |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Κάθε ορατό element σε ένα έγγραφο HTML αποδίδεται ως ορθογώνιο κουτί. Έτσι, ο όρος box model περιγράφει την προσέγγιση που ακολουθεί το CSS για την τροποποίηση των οπτικών ιδιοτήτων των elements. Όπως κουτιά διαφορετικών μεγεθών, τα HTML elements μπορούν να τοποθετηθούν μέσα σε container elements — συνήθως το 'div' element — ώστε να μπορούν να διαχωριστούν σε ενότητες.
Μπορούμε να χρησιμοποιήσουμε το CSS για να τροποποιήσουμε τη θέση των κουτιών, από μικρές προσαρμογές έως δραστικές αλλαγές στη διάταξη των elements στη σελίδα. Εκτός από την κανονική ροή, η θέση για κάθε κουτί μπορεί να βασίζεται στα elements γύρω από αυτό, είτε τη σχέση του με το parent container είτε τη σχέση του με το viewport, που είναι η περιοχή της σελίδας που είναι ορατή στον χρήστη. Κανένας μηχανισμός δεν πληροί όλες τις πιθανές απαιτήσεις διάταξης, επομένως μπορεί να χρειαστείτε έναν συνδυασμό τους.
Κανονική Ροή
Ο προεπιλεγμένος τρόπος με τον οποίο το πρόγραμμα περιήγησης αποδίδει το έγγραφο ονομάζεται normal flow. Τα ορθογώνια που αντιστοιχούν στα elements τοποθετούνται λίγο πολύ με την ίδια σειρά που εμφανίζονται στο έγγραφο, σε σχέση με τα parent elements. Ωστόσο, ανάλογα με τον τύπο του element, το αντίστοιχο κουτί μπορεί να ακολουθεί διαφορετικούς κανόνες τοποθέτησης.
Ένας καλός τρόπος για να κατανοήσετε τη λογική της κανονικής ροής είναι να κάνετε ορατά τα κουτιά. Μπορούμε να ξεκινήσουμε με μια πολύ βασική σελίδα, που έχει μόνο τρία ξεχωριστά div
elements, το καθένα από τα οποία έχει μια παράγραφο με τυχαίο κείμενο:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CSS Box Model and Layout</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="first">
<h2>First div</h2>
<p><span>Sed</span> <span>eget</span> <span>velit</span>
<span>id</span> <span>ante</span> <span>tempus</span>
<span>porta</span> <span>pulvinar</span> <span>et</span>
<span>ex.</span></p>
</div><!-- #first -->
<div id="second">
<h2>Second div</h2>
<p><span>Fusce</span> <span>vitae</span> <span>vehicula</span>
<span>neque.</span> <span>Etiam</span> <span>maximus</span>
<span>vulputate</span> <span>neque</span> <span>eu</span>
<span>lobortis.</span> <span>Phasellus</span> <span>condimentum,</span>
<span>felis</span> <span>eget</span> <span>eleifend</span>
<span>aliquam,</span> <span>dui</span> <span>dolor</span>
<span>bibendum</span> <span>leo.</span></p>
</div><!-- #second -->
<div id="third">
<h2>Third div</h2>
<p><span>Pellentesque</span> <span>ornare</span> <span>ultricies</span>
<span>elementum.</span> <span>Morbi</span> <span>vulputate</span>
<span>pretium</span> <span>arcu,</span> <span>sed</span>
<span>faucibus.</span></p>
</div><!-- #third -->
</body>
</html>
Κάθε λέξη είναι μέσα σε ένα span
element, ώστε να μπορούμε να διαμορφώσουμε τις λέξεις και να δούμε πώς αντιμετωπίζονται επίσης ως κουτιά. Για να γίνουν ορατά τα κουτιά, πρέπει να επεξεργαστούμε το stylesheet αρχείο style.css
που αναφέρεται από το έγγραφο HTML. Οι παρακάτω κανόνες θα κάνουν αυτό που χρειαζόμαστε:
* {
font-family: sans;
font-size: 14pt;
}
div {
border: 2px solid #00000044;
}
#first {
background-color: #c4a000ff;
}
#second {
background-color: #4e9a06ff;
}
#third {
background-color: #5c3566da;
}
h2 {
background-color: #ffffff66;
}
p {
background-color: #ffffff66;
}
span {
background-color: #ffffffaa;
}
Το αποτέλεσμα εμφανίζεται στην Figure 1.
Η Figure 1 δείχνει ότι κάθε HTML tag έχει ένα αντίστοιχο κουτί στο layout. Τα elements div
, h2
και p
εκτείνονται στο πλάτος του parent element. Για παράδειγμα, το parent element των div
elements είναι το body
element, επομένως επεκτείνονται στο πλάτος του σώματος, ενώ το parent element κάθε h2
και p
element είναι το αντίστοιχο div
του. Τα κουτιά που εκτείνονται στο πλάτος του parent element ονομάζονται block elements. Μερικά από τα πιο κοινά HTML tags που αποδίδονται ως blocks είναι h1
, h2
, h3
, p
, ul
, ol
, table
, li
, div
, section
, form
και aside
. Sibling block elements — block elements που μοιράζονται το ίδιο άμεσο parent element — στοιβάζονται μέσα στο parent element από πάνω προς τα κάτω.
Note
|
Ορισμένα block elements δεν προορίζονται για χρήση ως containers για άλλα block elements. Είναι δυνατόν, για παράδειγμα, να εισαγάγετε ένα block element μέσα σε ένα |
Εκτός από το ίδιο το κείμενο, elements όπως h1
, p
και li
περιμένουν μόνο inline elements ως children. Όπως τα περισσότερα σενάρια Western, τα inline elements ακολουθούν τη ροή του κειμένου από αριστερά προς τα δεξιά. Όταν δεν υπάρχει χώρος στη δεξιά πλευρά, η ροή των inline elements συνεχίζεται στην επόμενη γραμμή, όπως και το κείμενο. Ορισμένα κοινά HTML tags που αντιμετωπίζονται ως ενσωματωμένα κουτιά είναι τα span
, a
, em
, strong
, img
, input
και label
.
Στο δείγμα της HTML σελίδας μας, κάθε λέξη μέσα στις παραγράφους περιβάλλεται από ένα span
tag, ώστε να μπορούν να επισημανθούν με έναν αντίστοιχο κανόνα CSS. Όπως φαίνεται στην εικόνα, κάθε span
element τοποθετείται οριζόντια, από αριστερά προς τα δεξιά, έως ότου δεν υπάρχει πλέον χώρος στο parent element.
Το ύψος του element εξαρτάται από το περιεχόμενό του, επομένως το πρόγραμμα περιήγησης προσαρμόζει το ύψος ενός container element για να χωρέσει τα nested block elements ή τις γραμμές των inline elements του. Ωστόσο, ορισμένες ιδιότητες CSS επηρεάζουν το σχήμα ενός κουτιού, τη θέση του και την τοποθέτηση των εσωτερικών του elements.
Οι ιδιότητες margin
και padding
επηρεάζουν όλους τους τύπους κουτιών. Εάν δεν ορίσετε αυτές τις ιδιότητες ρητά, το πρόγραμμα περιήγησης ορίζει ορισμένες από αυτές χρησιμοποιώντας τυπικές τιμές. Όπως φαίνεται στην Figure 1, τα h2
και p
elements αποδόθηκαν με ένα κενό μεταξύ τους. Αυτά τα κενά είναι τα επάνω και κάτω περιθώρια που προσθέτει το πρόγραμμα περιήγησης σε αυτά τα elements από προεπιλογή. Μπορούμε να τα αφαιρέσουμε τροποποιώντας τους κανόνες CSS για τους h2
και p
selectors:
h2 {
background-color: #ffffff66;
margin: 0;
}
p {
background-color: #ffffff66;
margin: 0;
}
Το αποτέλεσμα εμφανίζεται στην Figure 2.
margin
μπορεί να αλλάξει ή να αφαιρέσει τα περιθώρια από elements.Το body
element επίσης, από προεπιλογή, έχει ένα μικρό περιθώριο που δημιουργεί ένα κενό που το περιβάλλει. Αυτό το κενό μπορεί επίσης να αφαιρεθεί χρησιμοποιώντας την ιδιότητα margin
.
Ενώ η ιδιότητα margin
ορίζει το κενό μεταξύ του element και του περιβάλλοντός του, η ιδιότητα padding
του element ορίζει το εσωτερικό κενό μεταξύ των ορίων του container και των child elements του. Εξετάστε τα elements h2
και p
μέσα σε κάθε div
στο δείγμα κώδικα, για παράδειγμα. Θα μπορούσαμε να χρησιμοποιήσουμε την ιδιότητά τους margin, για να δημιουργήσουμε ένα κενό στα όρια του αντίστοιχου div
, αλλά είναι πιο απλό να αλλάξουμε την ιδιότητα padding
του container:
#second {
background-color: #4e9a06ff;
padding: 1em;
}
Μόνο ο κανόνας για το δεύτερο div
τροποποιήθηκε, επομένως τα αποτελέσματα (Figure 3) δείχνουν τη διαφορά μεταξύ του δεύτερου div
και των άλλων div
containers.
div
containers μπορεί να έχουν διαφορετικά paddings.Η ιδιότητα margin
είναι μια συντομογραφία για τέσσερις ιδιότητες που ελέγχουν τις τέσσερις πλευρές του κουτιού: margin-top
, margin-right
, margin-bottom
, και margin-left
. Όταν στο margin
εκχωρείται μία μόνο τιμή, όπως στα μέχρι τώρα παραδείγματα, και τα τέσσερα περιθώρια του πλαισίου τη χρησιμοποιούν. Όταν γράφονται δύο τιμές, η πρώτη ορίζει το επάνω και το κάτω περιθώριο, ενώ η δεύτερη το δεξιό και το αριστερό περιθώριο. Χρησιμοποιώντας το margin: 1em 2em
, για παράδειγμα, ορίζει ένα κενό 1 em για το επάνω και κάτω περιθώριο και ένα κενό 2 em για το δεξιό και το αριστερό περιθώριο. Η εγγραφή τεσσάρων τιμών ορίζει τα περιθώρια για τις τέσσερις πλευρές κατά τη φορά των δεικτών του ρολογιού, ξεκινώντας από την κορυφή. Οι διάφορες τιμές σε αυτή τη συντομογραφημένη ιδιότητα, δεν απαιτείται να κάνουν χρήση των ίδιων μονάδων.
Η ιδιότητα padding
είναι επίσης μια συντομογραφία, ακολουθώντας τις ίδιες αρχές με την ιδιότητα margin
.
Στην προεπιλεγμένη συμπεριφορά τους, τα block elements τεντώνονται ώστε να χωρούν στο διαθέσιμο πλάτος. Αυτό όμως δεν είναι υποχρεωτικό. Η ιδιότητα width
μπορεί να ορίσει ένα σταθερό οριζόντιο μέγεθος στο κουτί:
#first {
background-color: #c4a000ff;
width: 6em;
}
Η προσθήκη του width: 6em
στον κανόνα CSS συρρικνώνει το πρώτο div
οριζόντια, αφήνοντας ένα κενό χώρο στη δεξιά πλευρά του (Figure 4).
width
αλλάζει το οριζόντιο πλάτος του πρώτου div
.Αντί να αφήσουμε το πρώτο div
ευθυγραμμισμένο προς τα αριστερά, ίσως θέλουμε να το κεντράρουμε. Το κεντράρισμα ενός κουτιού ισοδυναμεί με τον ορισμό περιθωρίων ίδιου μεγέθους και στις δύο πλευρές, επομένως μπορούμε να χρησιμοποιήσουμε την ιδιότητα margin για να το κεντράρουμε. Το μέγεθος του διαθέσιμου χώρου μπορεί να διαφέρει, επομένως χρησιμοποιούμε την τιμή auto
στο αριστερό και το δεξί περιθώριο:
#first {
background-color: #c4a000ff;
width: 6em;
margin: 0 auto;
}
Το αριστερό και το δεξί περιθώριο υπολογίζονται αυτόματα από το πρόγραμμα περιήγησης και το πλαίσιο θα κεντραριστεί (Figure 5).
margin
χρησιμοποιείται για να κεντράρει το πρώτο div
.Όπως φάνηκε, κάνοντας ένα block element στενότερο δεν καθιστά τον υπόλοιπο χώρο διαθέσιμο στο επόμενο element. Η φυσική ροή εξακολουθεί να διατηρείται, λες και το στενότερο element εξακολουθεί να καταλαμβάνει όλο το διαθέσιμο πλάτος.
Προσαρμoγή Κανονικής Ροής
Η κανονική ροή είναι απλή και διαδοχική. Το CSS σάς επιτρέπει επίσης να διακόψετε την κανονική ροή και να τοποθετήσετε elements με πολύ συγκεκριμένους τρόπους, παρακάμπτοντας ακόμη και την κύλιση της σελίδας εάν θέλετε. Θα εξετάσουμε αρκετούς τρόπους ελέγχου της θέσης των elements σε αυτήν την ενότητα.
Αιωρούμενα Elements
Είναι δυνατό να κάνετε τα sibling block elements να μοιράζονται τον ίδιο οριζόντιο χώρο. Ένας τρόπος για να γίνει αυτό είναι μέσω της ιδιότητας float
, η οποία αφαιρεί το element από την κανονική ροή. Όπως υποδηλώνει το όνομά της, η ιδιότητα float
κάνει το κουτί να αιωρείται πάνω από τα block elements που ακολουθούν, έτσι θα αποδοθούν σαν να ήταν κάτω από το αιωρούμενο κουτί. Για να κάνετε το πρώτο div
αιωρούμενο προς τα δεξιά, προσθέστε το float: right
στον αντίστοιχο κανόνα CSS:
#first {
background-color: #c4a000ff;
width: 6em;
float: right;
}
Τα αυτόματα περιθώρια αγνοούνται σε ένα αιωρούμενο κουτί, επομένως η ιδιότητα margin
μπορεί να αφαιρεθεί. Η Figure 6 δείχνει το αποτέλεσμα της αιώρησης του πρώτου div
προς τα δεξιά.
div
είναι αιωρούμενο και δεν αποτελεί μέρος της κανονικής ροής.Από προεπιλογή, όλα τα block elements που έρχονται μετά το αιωρούμενο element θα βρίσκονται κάτω από αυτό. Επομένως, δεδομένου του επαρκούς ύψους, το αιωρούμενο κουτί θα καλύπτει όλα τα εναπομείναντα block elements.
Αν και ένα αιωρούμενο element τοποθετείται πάνω από άλλα block elements, τα inline περιεχόμενα μέσα στο container του αιωρούμενου element, τυλίγονται γύρω από το αιωρούμενο element. Η έμπνευση για αυτό προέρχεται από layouts περιοδικών και εφημερίδων, οι οποίες συχνά τυλίγουν κείμενο γύρω από μια εικόνα, για παράδειγμα.
Η προηγούμενη εικόνα δείχνει πώς το πρώτο div
καλύπτει το δεύτερο div
και μέρος του τρίτου div
. Ας υποθέσουμε ότι θέλουμε το πρώτο div
να αιωρείται πάνω από το δεύτερο div
, αλλά όχι το τρίτο. Η λύση είναι να συμπεριλάβετε την ιδιότητα clear
στον κανόνα CSS που αντιστοιχεί στο τρίτο div
:
#third {
background-color: #5c3566da;
clear: right;
}
Ρυθμίζοντας την ιδιότητα clear
σε right
, κάνει το αντίστοιχο element να παρακάμψει τυχόν προηγούμενα elements που αιωρήθηκαν προς τα δεξιά, συνεχίζοντας την κανονική ροή (Figure 7).
clear
επιστρέφει στην κανονική ροή.Ομοίως, εάν ένα προηγούμενο element αιωρείται προς τα αριστερά, μπορείτε να χρησιμοποιήσετε το clear: left
για να συνεχίσετε την κανονική ροή. Όταν πρέπει να παρακάμψετε αιωρούμενα elements τόσο στα αριστερά όσο και στα δεξιά, χρησιμοποιήστε clear: both
.
Τοποθέτηση Κουτιών
Στην κανονική ροή, κάθε κουτί ακολουθεί τα κουτιά που έρχονται πριν από αυτό στο έγγραφο. Τα προηγούμενα sibling elements “σπρώχνουν” τα elements που έρχονται μετά από αυτά, μετακινώντας τα προς τα δεξιά και προς τα κάτω μέσα στο parent element τους. Το parent element μπορεί να έχει τα δικά του siblings που του κάνουν το ίδιο πράγμα. Είναι σαν να τοποθετείτε πλακάκια δίπλα-δίπλα σε έναν τοίχο, ξεκινώντας από την κορυφή.
Αυτή η μέθοδος τοποθέτησης των κουτιών ονομάζεται στατική και είναι η προεπιλεγμένη τιμή για την CSS ιδιότητα position
. Εκτός από τον καθορισμό περιθωρίων και padding, δεν υπάρχει τρόπος να επανατοποθετήσετε ένα στατικό κουτί στη σελίδα.
Όπως τα πλακάκια στην αναλογία του τοίχου, η στατική τοποθέτηση δεν είναι υποχρεωτική. Όπως και με τα πλακάκια, μπορείτε να τοποθετήσετε τα κουτιά όπου θέλετε, ακόμη και να καλύψετε άλλα κουτιά. Για να το κάνετε αυτό, αντιστοιχίστε την ιδιότητα position
σε μία από τις ακόλουθες τιμές:
relative
-
Το element ακολουθεί την κανονική ροή του εγγράφου, αλλά μπορεί να χρησιμοποιήσει τις ιδιότητες
top
,right
,bottom
, καιleft
για να ορίσει μετατοπίσεις σε σχέση με την αρχική στατική θέση του. Οι μετατοπίσεις μπορεί επίσης να είναι αρνητικές. Τα άλλα elements παραμένουν στην αρχική τους θέση, σαν το σχετικό element να είναι ακόμα στατικό. absolute
-
Το element αγνοεί την κανονική ροή των άλλων elements και τοποθετείται στη σελίδα από τις ιδιότητες
top
,right
,bottom
, καιleft
. Οι τιμές τους είναι σχετικές με το σώμα του εγγράφου ή με ένα μη στατικό parent container. fixed
-
Το element αγνοεί την κανονική ροή των άλλων elements και τοποθετείται από τις ιδιότητες
top
,right
,bottom
, καιleft
. Οι τιμές τους είναι σχετικές με το viewport (δηλαδή, την περιοχή της οθόνης όπου εμφανίζεται το έγγραφο). Τα σταθερά elements δεν μετακινούνται καθώς ο επισκέπτης περιηγείται στο έγγραφο, αλλά μοιάζουν με αυτοκόλλητο κολλημένο στην οθόνη. sticky
-
Το element ακολουθεί την κανονική ροή του εγγράφου. Ωστόσο, αντί να βγαίνει από το viewport όταν το έγγραφο κάνει κύλιση, θα σταματήσει στη θέση που ορίζεται από τις ιδιότητες
top
,right
,bottom
, καιleft
. Εάν η τιμήtop
είναι10px
, για παράδειγμα, το element θα σταματήσει την κύλιση κάτω από το επάνω μέρος του viewport όταν φτάσει τα 10 pixel από το επάνω όριο του viewport. Όταν συμβεί αυτό, η υπόλοιπη σελίδα συνεχίζει να κάνει κύλιση, αλλά το sticky element συμπεριφέρεται σαν ένα σταθερό element σε αυτήν τη θέση. Θα επιστρέψει στην αρχική του θέση όταν το έγγραφο μετακινηθεί πίσω στη θέση του στο viewport. Τα sticky elements χρησιμοποιούνται συνήθως στις μέρες μας για τη δημιουργία top menus που είναι πάντα ορατά.
Οι θέσεις που μπορούν να χρησιμοποιούν τις ιδιότητες top
, right
, bottom
, και left
, δεν απαιτείται να τις χρησιμοποιήσουν όλες. Εάν ορίσετε και τις δύο ιδιότητες top
και height
ενός absolute element, για παράδειγμα, το πρόγραμμα περιήγησης υπολογίζει σιωπηρά την bottom
ιδιότητά του (top + height = bottom).
Η Ιδιότητα display
Εάν η σειρά που δίνεται από την κανονική ροή δεν αποτελεί πρόβλημα στη σχεδίασή σας, αλλά θέλετε να αλλάξετε τον τρόπο ευθυγράμμισης των κουτιών στη σελίδα, τροποποιήστε την ιδιότητα display
του element. Η ιδιότητα display
μπορεί ακόμη και να εξαφανίσει εντελώς το element από το αποδοθέν έγγραφο, ορίζοντας display: none
. Αυτό είναι χρήσιμο όταν θέλετε να εμφανίσετε το element αργότερα χρησιμοποιώντας JavaScript.
Η ιδιότητα display
μπορεί επίσης, για παράδειγμα, να κάνει ένα block element να συμπεριφέρεται σαν ένα inline element (display: inline
). Ωστόσο, κάτι τέτοιο δεν θεωρείται καλή πρακτική. Υπάρχουν καλύτερες μέθοδοι για την τοποθέτηση container elements δίπλα-δίπλα, όπως το flexbox model.
Το μοντέλο flexbox επινοήθηκε για να ξεπεράσει τους περιορισμούς των floats και να εξαλείψει την ακατάλληλη χρήση πινάκων για τη δομή της διάταξης της σελίδας. Όταν ορίζετε την ιδιότητα display
ενός container element σε flex
για να το μετατρέψετε σε flexbox container, τα άμεσα children του θα συμπεριφέρονται λίγο πολύ σαν κελιά σε μια γραμμή πίνακα.
Tip
|
Εάν θέλετε ακόμη περισσότερο έλεγχο σχετικά με την τοποθέτηση των elements στη σελίδα, ρίξτε μια ματιά στο CSS grid. Το πλέγμα είναι ένα ισχυρό σύστημα που βασίζεται σε γραμμές και στήλες για τη δημιουργία περίπλοκων διατάξεων. |
Για να δοκιμάσετε το flex display, προσθέστε ένα νέο div
element στη σελίδα του παραδείγματος και κάντε το container για τα τρία υπάρχοντα div
elements:
<div id="container">
<div id="first">
<h2>First div</h2>
<p><span>Sed</span> <span>eget</span> <span>velit</span>
<span>id</span> <span>ante</span> <span>tempus</span>
<span>porta</span> <span>pulvinar</span> <span>et</span>
<span>ex.</span></p>
</div><!-- #first -->
<div id="second">
<h2>Second div</h2>
<p><span>Fusce</span> <span>vitae</span> <span>vehicula</span>
<span>neque.</span> <span>Etiam</span> <span>maximus</span>
<span>vulputate</span> <span>neque</span> <span>eu</span>
<span>lobortis.</span> <span>Phasellus</span> <span>condimentum,</span>
<span>felis</span> <span>eget</span> <span>eleifend</span>
<span>aliquam,</span> <span>dui</span> <span>dolor</span>
<span>bibendum</span> <span>leo.</span></p>
</div><!-- #second -->
<div id="third">
<h2>Third div</h2>
<p><span>Pellentesque</span> <span>ornare</span> <span>ultricies</span>
<span>elementum.</span> <span>Morbi</span> <span>vulputate</span>
<span>pretium</span> <span>arcu,</span> <span>sed</span>
<span>faucibus.</span></p>
</div><!-- #third -->
</div><!-- #container -->
Προσθέστε τον ακόλουθο κανόνα CSS στο stylesheet για να μετατρέψετε το div
container, σε flexbox container:
#container {
display: flex;
}
Το αποτέλεσμα είναι τα τρία εσωτερικά div
elements που αποδίδονται το ένα δίπλα στο άλλο (Figure 8).
Η χρήση της τιμής inline-flex
αντί για flex
έχει βασικά το ίδιο αποτέλεσμα, αλλά κάνει τα children να συμπεριφέρονται περισσότερο σαν inline elements.
Responsive Σχεδίαση
Γνωρίζουμε ότι το CSS παρέχει ιδιότητες που προσαρμόζουν τα μεγέθη των elements και των γραμματοσειρών σε σχέση με τη διαθέσιμη περιοχή οθόνης. Ωστόσο, μπορεί να θέλετε να προχωρήσετε περισσότερο και να χρησιμοποιήσετε διαφορετικό σχεδιασμό για διαφορετικές συσκευές: για παράδειγμα, συστήματα desktop έναντι συσκευών με διαστάσεις οθόνης κάτω από ένα συγκεκριμένο μέγεθος. Αυτή η προσέγγιση ονομάζεται responsive web design και το CSS παρέχει μεθόδους που ονομάζονται mediaqueries για να το καταστήσει δυνατό.
Στο προηγούμενο παράδειγμα, τροποποιήσαμε τη διάταξη της σελίδας για να τοποθετήσουμε τα div
elements δίπλα-δίπλα σε στήλες. Αυτή η διάταξη είναι κατάλληλη για μεγαλύτερες οθόνες, αλλά θα είναι πολύ πηγμένη σε μικρότερες οθόνες. Για να λύσουμε αυτό το πρόβλημα, μπορούμε να προσθέσουμε ένα media query στο stylesheet που ταιριάζοντας μόνο οθόνες με τουλάχιστον 600px
σε πλάτος:
@media (min-width: 600px){
#container {
display: flex;
}
}
Οι κανόνες CSS εντός της οδηγίας @media
θα χρησιμοποιηθούν μόνο εάν πληρούνται τα κριτήρια στην παρένθεση. Σε αυτό το παράδειγμα, εάν το πλάτος του viewport είναι μικρότερο από 600 px
, ο κανόνας δεν θα εφαρμοστεί στο div
container και τα children του θα αποδοθούν ως συμβατικά div
elements. Το πρόγραμμα περιήγησης αξιολογεί εκ νέου τα media queries κάθε φορά που αλλάζει η διάσταση του viewport, έτσι ώστε η διάταξη να μπορεί να αλλάξει σε πραγματικό χρόνο κατά την αλλαγή του μεγέθους του παραθύρου του προγράμματος περιήγησης ή την περιστροφή του smartphone.
Καθοδηγούμενες Ασκήσεις
-
Εάν η ιδιότητα
position
δεν τροποποιηθεί, ποια μέθοδος τοποθέτησης θα χρησιμοποιηθεί από το πρόγραμμα περιήγησης; -
Πώς μπορείτε να βεβαιωθείτε ότι το κουτί ενός element θα αποδοθεί μετά από οποιαδήποτε προηγουμένως αιωρούμενα elements;
-
Πώς μπορείτε να χρησιμοποιήσετε την ιδιότητα
margin
για να ορίσετε τα top/bottom περιθώρια σε4px
και τα right/left περιθώρια σε6em
; -
Πώς μπορείτε να κεντράρετε οριζόντια ένα στατικό container element με σταθερό πλάτος στη σελίδα;
Ασκήσεις Εξερεύνησης
-
Γράψτε έναν κανόνα CSS που να ταιριάζει το element
<div class="picture">
έτσι ώστε το κείμενο μέσα στα ακόλουθα block elements του να διευθετηθεί προς τη δεξιά πλευρά του. -
Πώς επηρεάζει η ιδιότητα
top
ένα στατικό element σε σχέση με το parent element; -
Πώς επηρεάζει η αλλαγή της ιδιότητας
display
ενός element σεflex
την τοποθέτησή του στην κανονική ροή; -
Ποιά χαρακτηριστική δυνατότητα του CSS σάς επιτρέπει να χρησιμοποιείτε ένα ξεχωριστό σύνολο κανόνων ανάλογα με τις διαστάσεις της οθόνης;
Σύνοψη
Αυτό το μάθημα καλύπτει το CSS box model και πώς μπορούμε να το προσαρμόσουμε. Εκτός από την κανονική ροή του εγγράφου, ο σχεδιαστής μπορεί να χρησιμοποιήσει διαφορετικούς μηχανισμούς τοποθέτησης για να εφαρμόσει μια προσαρμοσμένη διάταξη. Το μάθημα περιλαμβάνει τις ακόλουθες έννοιες και διαδικασίες:
-
Την κανονική ροή του εγγράφου.
-
Προσαρμογές στο margin και το padding του κουτιού ενός element.
-
Χρησιμοποίηση των ιδιοτήτων float και clear.
-
Μηχανισμοί τοποθέτησης: static, relative, absolute, fixed και sticky.
-
Εναλλακτικές τιμές για την ιδιότητα
display
. -
Βασικά στοιχεία responsive design.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Εάν η ιδιότητα
position
δεν τροποποιηθεί, ποια μέθοδος τοποθέτησης θα χρησιμοποιηθεί από το πρόγραμμα περιήγησης;Η μέθοδος
static
. -
Πώς μπορείτε να βεβαιωθείτε ότι το κουτί ενός element θα αποδοθεί μετά από οποιαδήποτε προηγουμένως αιωρούμενα elements;
Η ιδιότητα
clear
του element θα πρέπει να οριστεί σεboth
. -
Πώς μπορείτε να χρησιμοποιήσετε την ιδιότητα
margin
για να ορίσετε τα top/bottom περιθώρια σε4px
και τα right/left περιθώρια σε6em
;Μπορεί να είναι είτε
margin: 4px 6em
ήmargin: 4px 6em 4px 6em
. -
Πώς μπορείτε να κεντράρετε οριζόντια ένα στατικό container element με σταθερό πλάτος στη σελίδα;
Χρησιμοποιώντας την τιμή
auto
στις ιδιότητές τουmargin-left
καιmargin-right
.
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Γράψτε έναν κανόνα CSS που να ταιριάζει το element
<div class="picture">
έτσι ώστε το κείμενο μέσα στα ακόλουθα block elements του να διευθετηθεί προς τη δεξιά πλευρά του..picture { float: left; }
-
Πώς επηρεάζει η ιδιότητα
top
ένα στατικό element σε σχέση με το parent element;Η ιδιότητα
top
δεν ισχύει για στατικά elements. -
Πώς επηρεάζει η αλλαγή της ιδιότητας
display
ενός element σεflex
την τοποθέτησή του στην κανονική ροή;Η τοποθέτηση του ίδιου του element δεν αλλάζει, αλλά τα άμεσα child elements θα αποδοθούν το ένα δίπλα στο άλλο οριζόντια.
-
Ποιά χαρακτηριστική δυνατότητα του CSS σάς επιτρέπει να χρησιμοποιείτε ένα ξεχωριστό σύνολο κανόνων ανάλογα με τις διαστάσεις της οθόνης;
Τα media queries επιτρέπουν στο πρόγραμμα περιήγησης να επαληθεύσει τις διαστάσεις του viewport πριν εφαρμόσει έναν κανόνα CSS.