Ελληνικά

Εξερευνήστε τον κανόνα CSS @when, ένα ισχυρό χαρακτηριστικό που επιτρέπει την εφαρμογή στυλ υπό συνθήκες, βάσει υποστήριξης προγράμματος περιήγησης, μεγέθους viewport και άλλων. Μάθετε με πρακτικά παραδείγματα.

Κανόνας CSS @when: Κατακτώντας την Εφαρμογή Στυλ υπό Συνθήκες

Ο κόσμος της CSS εξελίσσεται συνεχώς, προσφέροντας στους προγραμματιστές πιο ισχυρούς και ευέλικτους τρόπους για το στυλ των ιστοσελίδων. Ένα τέτοιο χαρακτηριστικό που κερδίζει έδαφος είναι ο κανόνας @when, γνωστός και ως CSS Conditional Rules Module Level 1. Αυτός ο κανόνας σας επιτρέπει να εφαρμόζετε στυλ CSS υπό συνθήκες, με βάση την εκπλήρωση συγκεκριμένων συνθηκών. Είναι ένα ισχυρό εργαλείο για τον responsive σχεδιασμό, την ανίχνευση χαρακτηριστικών και τη δημιουργία πιο στιβαρών και προσαρμόσιμων stylesheets.

Τι είναι ο κανόνας CSS @when;

Ο κανόνας @when είναι ένας κανόνας at-rule υπό συνθήκες στην CSS που σας επιτρέπει να ορίσετε στυλ που εφαρμόζονται μόνο εάν ισχύουν ορισμένες συνθήκες. Σκεφτείτε το σαν μια δήλωση if για την CSS σας. Αντίθετα με τα media queries, τα οποία εστιάζουν κυρίως στα χαρακτηριστικά του viewport (μέγεθος οθόνης, προσανατολισμός κ.λπ.), το @when παρέχει έναν πιο γενικό και επεκτάσιμο τρόπο για το χειρισμό του στυλ υπό συνθήκες. Επεκτείνει τους υπάρχοντες κανόνες at-rules υπό συνθήκες όπως το @supports και το @media.

Βασικά Πλεονεκτήματα της Χρήσης του @when

Σύνταξη του Κανόνα @when

Η βασική σύνταξη του κανόνα @when είναι η εξής:
@when <condition> {
  /* Κανόνες CSS που θα εφαρμοστούν όταν η συνθήκη είναι αληθής */
}

Η <condition> μπορεί να είναι οποιαδήποτε έγκυρη boolean έκφραση που αξιολογείται σε true ή false. Αυτή η έκφραση συχνά περιλαμβάνει:

Πρακτικά Παραδείγματα του @when σε Δράση

Ας εξερευνήσουμε μερικά πρακτικά παραδείγματα για να απεικονίσουμε τη δύναμη και την ευελιξία του κανόνα @when.

1. Responsive Design με @when και Media Queries

Η πιο συνηθισμένη περίπτωση χρήσης του @when είναι ο responsive σχεδιασμός, όπου προσαρμόζετε τα στυλ με βάση το μέγεθος της οθόνης. Ενώ τα media queries μπορούν να το επιτύχουν από μόνα τους, το @when παρέχει μια πιο δομημένη και ευανάγνωστη προσέγγιση, ειδικά όταν αντιμετωπίζετε σύνθετες συνθήκες.

@when (min-width: 768px) and (max-width: 1023px) {
  body {
    font-size: 18px;
    line-height: 1.6;
  }
  .container {
    width: 720px;
    margin: 0 auto;
  }
}

Σε αυτό το παράδειγμα, τα στυλ εντός του μπλοκ @when εφαρμόζονται μόνο όταν το πλάτος της οθόνης είναι μεταξύ 768px και 1023px (τυπικό μέγεθος tablet). Αυτό παρέχει έναν σαφή και συνοπτικό τρόπο για τον ορισμό στυλ για συγκεκριμένες περιοχές του viewport.

Σημείωση Διεθνοποίησης: Ο responsive σχεδιασμός είναι κρίσιμος για ένα παγκόσμιο κοινό. Λάβετε υπόψη τα διαφορετικά μεγέθη οθόνης σε διάφορες περιοχές. Για παράδειγμα, η χρήση κινητών είναι υψηλότερη σε ορισμένες χώρες, καθιστώντας τον σχεδιασμό mobile-first ακόμη πιο κρίσιμο.

2. Ανίχνευση Χαρακτηριστικών με @when και @supports

Το @when μπορεί να συνδυαστεί με το @supports για την εφαρμογή στυλ μόνο όταν ένα συγκεκριμένο χαρακτηριστικό CSS υποστηρίζεται από το πρόγραμμα περιήγησης. Αυτό σας επιτρέπει να βελτιώνετε προοδευτικά τον ιστότοπό σας, παρέχοντας μια καλύτερη εμπειρία στους χρήστες με σύγχρονα προγράμματα περιήγησης, διατηρώντας ταυτόχρονα τη συμβατότητα με τα παλαιότερα.

@when supports(display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    grid-gap: 20px;
  }
}

@when not supports(display: grid) {
  .container {
    /* Εναλλακτικά στυλ για προγράμματα περιήγησης που δεν υποστηρίζουν grid */
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
  }
  .item {
    width: calc(50% - 10px); /* Προσαρμογή πλάτους για παλαιότερα προγράμματα περιήγησης */
  }
}

Εδώ, χρησιμοποιούμε το @supports για να ελέγξουμε αν το πρόγραμμα περιήγησης υποστηρίζει CSS Grid Layout. Αν ναι, εφαρμόζουμε στυλ βασισμένα στο grid στο .container. Αν όχι, παρέχουμε εναλλακτικά στυλ χρησιμοποιώντας flexbox για να διασφαλίσουμε ότι επιτυγχάνεται μια παρόμοια διάταξη σε παλαιότερα προγράμματα περιήγησης.

Παγκόσμια Σημείωση Προσβασιμότητας: Η ανίχνευση χαρακτηριστικών είναι σημαντική για την προσβασιμότητα. Τα παλαιότερα προγράμματα περιήγησης ενδέχεται να μην υποστηρίζουν νεότερα χαρακτηριστικά ARIA ή σημασιολογικά στοιχεία HTML5. Παρέχετε κατάλληλες εναλλακτικές λύσεις για να διασφαλίσετε ότι το περιεχόμενο παραμένει προσβάσιμο.

3. Συνδυασμός Media Queries και Feature Queries

Η πραγματική δύναμη του @when προέρχεται από την ικανότητά του να συνδυάζει media queries και feature queries για τη δημιουργία πιο σύνθετων και λεπτομερών κανόνων στυλ υπό συνθήκες.

@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
  .modal {
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(10px);
  }
}

Σε αυτό το παράδειγμα, το στοιχείο .modal θα έχει θολό φόντο μόνο όταν το πλάτος της οθόνης είναι τουλάχιστον 768px και το πρόγραμμα περιήγησης υποστηρίζει την ιδιότητα backdrop-filter. Αυτό σας επιτρέπει να δημιουργείτε οπτικά ελκυστικά εφέ σε σύγχρονα προγράμματα περιήγησης, αποφεύγοντας ταυτόχρονα πιθανά προβλήματα απόδοσης ή δυσλειτουργίες απόδοσης σε παλαιότερα.

4. Στυλ Βασισμένο σε Custom Properties (Μεταβλητές CSS)

Το @when μπορεί επίσης να χρησιμοποιηθεί σε συνδυασμό με τις CSS Custom Properties (γνωστές και ως μεταβλητές CSS) για τη δημιουργία δυναμικού στυλ που καθοδηγείται από την κατάσταση. Μπορείτε να χρησιμοποιήσετε JavaScript για να ενημερώσετε την τιμή μιας custom property και στη συνέχεια να χρησιμοποιήσετε το @when για να εφαρμόσετε διαφορετικά στυλ με βάση αυτή την τιμή.

Πρώτα, ορίστε μια custom property:

:root {
  --theme-color: #007bff; /* Προεπιλεγμένο χρώμα θέματος */
  --is-dark-mode: false;
}

Στη συνέχεια, χρησιμοποιήστε το @when για να εφαρμόσετε στυλ με βάση την τιμή της custom property:

@when var(--is-dark-mode) = true {
  body {
    background-color: #333;
    color: #fff;
  }
  a {
    color: #ccc;
  }
}

Τέλος, χρησιμοποιήστε JavaScript για να αλλάξετε την τιμή της custom property --is-dark-mode:

document.getElementById('darkModeToggle').addEventListener('click', function() {
  document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});

Αυτό επιτρέπει στους χρήστες να αλλάζουν μεταξύ світλών και σκούρων θεμάτων, με την CSS να ενημερώνεται δυναμικά με βάση την τιμή της custom property. Σημειώστε ότι η άμεση σύγκριση των μεταβλητών CSS στο `@when` ενδέχεται να μην υποστηρίζεται καθολικά σε όλα τα προγράμματα περιήγησης. Αντ' αυτού, μπορεί να χρειαστεί να χρησιμοποιήσετε μια λύση με ένα media query που ελέγχει για μια μη μηδενική τιμή:

@when ( --is-dark-mode > 0 ) { ... }

Ωστόσο, βεβαιωθείτε ότι η custom property έχει αριθμητική τιμή για να λειτουργήσει αυτό σωστά.

Σημείωση Προσβασιμότητας: Η παροχή εναλλακτικών θεμάτων (π.χ. dark mode) είναι κρίσιμη για την προσβασιμότητα. Οι χρήστες με προβλήματα όρασης μπορεί να επωφεληθούν από θέματα υψηλής αντίθεσης. Βεβαιωθείτε ότι ο διακόπτης θέματος είναι προσβάσιμος μέσω πληκτρολογίου και screen readers.

5. Στυλ Βασισμένο σε Data Attributes

Μπορείτε επίσης να χρησιμοποιήσετε το @when με data attributes για να δώσετε στυλ σε στοιχεία με βάση τις τιμές των δεδομένων τους. Αυτό μπορεί να είναι χρήσιμο για τη δημιουργία δυναμικών διεπαφών όπου τα στοιχεία αλλάζουν εμφάνιση με βάση την αλληλεπίδραση του χρήστη ή τις ενημερώσεις δεδομένων.

Για παράδειγμα, ας πούμε ότι έχετε μια λίστα με εργασίες και κάθε εργασία έχει ένα χαρακτηριστικό data-status που υποδεικνύει την κατάστασή της (π.χ. "todo", "in-progress", "completed"). Μπορείτε να χρησιμοποιήσετε το @when για να δώσετε διαφορετικό στυλ σε κάθε εργασία με βάση την κατάστασή της.

[data-status="todo"] {
  /* Προεπιλεγμένα στυλ για εργασίες todo */
  color: #333;
}

@when attribute(data-status string equals "in-progress") {
  [data-status="in-progress"] {
    color: orange;
    font-style: italic;
  }
}

@when attribute(data-status string equals "completed") {
  [data-status="completed"] {
    color: green;
    text-decoration: line-through;
  }
}

Σημείωση: η υποστήριξη για τη συνθήκη ελέγχου attribute() μπορεί να είναι περιορισμένη ή να μην έχει υλοποιηθεί πλήρως σε όλα τα προγράμματα περιήγησης προς το παρόν. Πάντα να δοκιμάζετε διεξοδικά.

Συμβατότητα Προγράμματος Περιήγησης και Polyfills

Στα τέλη του 2024, η υποστήριξη του κανόνα @when από τα προγράμματα περιήγησης εξακολουθεί να εξελίσσεται. Ενώ πολλά σύγχρονα προγράμματα περιήγησης υποστηρίζουν τη βασική λειτουργικότητα, ορισμένα παλαιότερα ενδέχεται να μην το κάνουν. Επομένως, είναι κρίσιμο να ελέγχετε τους πίνακες συμβατότητας και να χρησιμοποιείτε κατάλληλες εναλλακτικές λύσεις ή polyfills όπου είναι απαραίτητο.

Πάντα να συμβουλεύεστε πηγές όπως το Can I use... για να ελέγχετε την τρέχουσα κατάσταση υποστήριξης του @when και των σχετικών χαρακτηριστικών από τα προγράμματα περιήγησης.

Βέλτιστες Πρακτικές για τη Χρήση του @when

Συμπέρασμα

Ο κανόνας @when είναι μια ισχυρή προσθήκη στην εργαλειοθήκη της CSS, προσφέροντας στους προγραμματιστές έναν πιο ευέλικτο και εκφραστικό τρόπο για την εφαρμογή στυλ υπό συνθήκες. Συνδυάζοντάς τον με media queries, feature queries και CSS Custom Properties, μπορείτε να δημιουργήσετε πιο στιβαρά, προσαρμόσιμα και συντηρήσιμα stylesheets. Ενώ η υποστήριξη από τα προγράμματα περιήγησης εξακολουθεί να εξελίσσεται, το @when είναι ένα χαρακτηριστικό που αξίζει να εξερευνήσετε και να ενσωματώσετε στη σύγχρονη ροή εργασίας ανάπτυξης ιστού.

Καθώς ο ιστός συνεχίζει να εξελίσσεται, η κατάκτηση χαρακτηριστικών όπως το @when θα είναι απαραίτητη για τη δημιουργία ελκυστικών, προσβάσιμων και αποδοτικών εμπειριών για τους χρήστες σε όλο τον κόσμο. Αγκαλιάστε τη δύναμη του στυλ υπό συνθήκες και ξεκλειδώστε νέες δυνατότητες στην ανάπτυξη CSS σας.