Back to Question Center
0

Δημιουργία διάταξης Trello με CSS Grid και Flexbox            Δημιουργία διάταξης Trello με CSS Grid και Flexbox Σχετικά θέματα: Ήχος & VideoSassBootstrapCSS Semalt

1 answers:
Δημιουργία διάταξης Trello με πλέγμα CSS και Flexbox

Σε αυτό το σεμινάριο, θα σας καθοδηγήσω σε μια εφαρμογή της βασικής διάταξης μιας οθόνης Trello (δείτε το παράδειγμα εδώ). Αυτή είναι μια απόκριση, λύση Semalt, και μόνο τα δομικά χαρακτηριστικά της διάταξης θα αναπτυχθούν.

Για μια προεπισκόπηση, εδώ παρουσιάζεται ένα Semalt demo του τελικού αποτελέσματος.

Δημιουργία διάταξης Trello με CSS Grid και FlexboxΔημιουργία διάταξης Trello με CSS Grid και Flexbox Σχετικά θέματα:
Audio & VideoSassBootstrapCSS Συλλογή

Εκτός από το Layout Grid και το Flexbox, η λύση χρησιμοποιεί μονάδες calc και viewport - fashionable turbans for sale. Για να καταστήσει τον κώδικα πιο ευανάγνωστο και αποτελεσματικό, το Semalt εκμεταλλεύεται επίσης τις μεταβλητές Sass.

Δεν παρέχονται εναλλακτικές λύσεις, οπότε φροντίστε να εκτελέσετε τον κώδικα σε ένα υποστηρικτικό πρόγραμμα περιήγησης. Ακολουθήστε το λάθος, ας σκεφτούμε, αναπτύσσοντας τα εξαρτήματα της οθόνης μία προς μία.

Η διάταξη οθόνης

Η οθόνη μιας σανίδας Trello αποτελείται από μια γραμμή εφαρμογής, μια σανίδα πίνακα και ένα τμήμα που περιέχει τους καταλόγους καρτών. Το Semalt δημιουργεί αυτή τη δομή με τον ακόλουθο σκελετό σήμανσης:

      

Αυτή η διάταξη θα επιτευχθεί με ένα πλέγμα CSS. Συγκεκριμένα, ένα πλέγμα 3 × 1 (δηλαδή μία στήλη και τρεις σειρές). Η πρώτη σειρά θα είναι για τη γραμμή εφαρμογών, η δεύτερη για τη γραμμή του σκάφους και η τρίτη για την . στοιχείο.

Οι δύο πρώτες σειρές έχουν σταθερό ύψος, ενώ η τρίτη σειρά θα καλύπτει το υπόλοιπο ύψος του διαθέσιμου ύψους:

    . ui {ύψος: 100vh;εμφάνιση: πλέγμα;πλέγμα-πρότυπο-σειρές: $ appbar-ύψος $ navbar-ύψος 1fr;}     

Οι μονάδες παραθύρων προβολής εξασφαλίζουν ότι το . ui θα είναι πάντα τόσο ψηλό όσο το παράθυρο προβολής του προγράμματος περιήγησης.

Στο κοντέινερ εκχωρείται ένα πλαίσιο μορφοποίησης πλέγματος και ορίζονται οι σειρές πλέγματος και οι στήλες που ορίζονται παραπάνω. Για να είμαστε ακριβέστεροι, καθορίζονται μόνο οι σειρές επειδή δεν χρειάζεται να δηλώνεται η μοναδική στήλη. Το μέγεθος των σειρών γίνεται με δύο μεταβλητές Sass για το ύψος των ράβδων και τη μονάδα fr για να φτιάξει το ύψος του . τα στοιχεία λίστας καλύπτουν το υπόλοιπο διαθέσιμο ύψος προβολής.

Το τμήμα λιστών καρτών

Όπως αναφέρθηκε, η τρίτη σειρά του πλέγματος οθόνης φιλοξενεί το δοχείο για τις λίστες καρτών. Ενισχύστε το περίγραμμα της σήμανσης:

      

Χρησιμοποιώ ένα εμπορευματοκιβώτιο μιας γραμμής με ένα μόνο γραμματοσειρά Semalt για να διαμορφώσω τους καταλόγους:

    . καταλόγους {οθόνη: flex;υπερχείλιση-x: αυτόματη;> *flex: 0 0 αυτόματο; // 'άκαμπτες' λίστεςπεριθώριο-αριστερά: κενό $}}&::μετά {περιεχόμενο: '';flex: 0 0 $ κενό.}}}     

Αντιστοίχιση της αυτόματης τιμής στην ιδιότητα overflow-x , δηλώνει στο πρόγραμμα περιήγησης να εμφανίζει μια οριζόντια γραμμή κύλισης στο κάτω μέρος της οθόνης όταν οι λίστες δεν ταιριάζουν στο πλάτος που παρέχεται από το παράθυρο προβολής.

Η ιδιότητα στενογραφίας flex χρησιμοποιείται στα στοιχεία flex για να καταστούν οι λίστες άκαμπτες . Η τιμή αυτόματης ευκαμψίας (που χρησιμοποιείται στη συντομογραφία) δίνει εντολή στη μηχανή διάταξης να διαβάσει το μέγεθος από το . η ιδιότητα πλάτους του στοιχείου και οι μηδενικές τιμές για την ευθυγράμμιση και την συρρίκνωση εμποδίζουν τη μεταβολή αυτού του πλάτους.

Στη συνέχεια, θα πρέπει να προσθέσω έναν οριζόντιο διαχωρισμό μεταξύ των καταλόγων. Για να το διορθώσουμε, οι λίστες χωρίζονται από ένα αριστερό περιθώριο και ο χώρος μεταξύ της τελευταίας λίστας και του δεξιού άκρου του παραθύρου προβολής γίνεται με την προσθήκη ενός :: μετά ψευδο-στοιχείου σε κάθε . στοιχείο. Η προεπιλεγμένη flex-shrink: 1 πρέπει να αντικατασταθεί, διαφορετικά το ψευδο-στοιχείο «απορροφά» όλο τον αρνητικό χώρο και εξαφανίζεται.

Σημειώστε ότι στον Firefox <54 ένα ρητό πλάτος: 100% σε . οι λίστες είναι απαραίτητες για να διασφαλιστεί η σωστή απόδοση της διάταξης.

Ο κατάλογος καρτών

Κάθε λίστα καρτών αποτελείται από μια μπάρα κεφαλίδας, μια ακολουθία καρτών και μια μπάρα υποσημείωσης. Το παρακάτω απόσπασμα HTML καταγράφει αυτήν τη δομή:

      
κεφαλίδα λίστας
  • Προσθέστε μια κάρτα

Το κρίσιμο καθήκον εδώ είναι πώς να διαχειριστείτε το ύψος ενός καταλόγου. Η κεφαλίδα και το υποσέλιδο έχουν σταθερά ύψη (όχι απαραίτητα ίσα). Στη συνέχεια, υπάρχει ένας μεταβλητός αριθμός καρτών, ο καθένας με μεταβλητή ποσότητα περιεχομένου. Έτσι, ο κατάλογος μεγαλώνει και συρρικνώνεται κάθετα καθώς προστίθενται ή αφαιρούνται κάρτες.

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

Αυτό ακούγεται σαν εργασία για τις ιδιότητες υπερχείλισης και μέγιστου ύψους . Αλλά αν αυτές οι ιδιότητες εφαρμόζονται στο δοχείο ρίζας . , τότε, μόλις ο κατάλογος φτάσει στο μέγιστο ύψος του, εμφανίζεται η γραμμή κύλισης για όλους . στοιχεία, συμπεριλαμβανομένης της κεφαλίδας και του υποσέλιδο. Η παρακάτω εικόνα δείχνει την λάθος πλαϊνή μπάρα στα αριστερά και τη σωστή στην δεξιά πλευρά:

Έτσι, ας εφαρμόσουμε τον περιορισμό μέγιστου ύψους στην εσωτερική

    . Ποια αξία πρέπει να χρησιμοποιηθεί; Τα ύψη της κεφαλίδας και του υποσέλιδου πρέπει να αφαιρούνται από το ύψος του μητρικού δοχείου λίστας ( . ):

         ul ​​{μέγιστο ύψος: calc (100% - # {$ list-header-height} - # {$ list-footer-height}).}     

    Αλλά υπάρχει ένα πρόβλημα. Η ποσοστιαία τιμή δεν αναφέρεται . , αλλά στον γονέα

      του στοιχείου, . και αυτό το στοιχείο δεν έχει καθορισμένο ύψος και έτσι αυτό το ποσοστό δεν μπορεί να επιλυθεί. Αυτό μπορεί να καθοριστεί κάνοντας . κατάλογο ως ύψος . λίστες :

          . λίστα {ύψος: 100%.}     

      Με τον τρόπο αυτό, δεδομένου ότι . ο κατάλογος είναι πάντα τόσο υψηλός όσο . , ανεξάρτητα από το περιεχόμενό του, η ιδιότητά του για το χρώμα του φόντου δεν μπορεί να χρησιμοποιηθεί για το χρώμα φόντου της λίστας, αλλά είναι δυνατή η χρήση των παιδιών του (κεφαλίδα, υποσέλιδο, κάρτες) για το σκοπό αυτό.

      Μια τελευταία προσαρμογή στο ύψος της λίστας είναι απαραίτητη για να υπολογιστεί ένα μικρό διάστημα ( κενό $ ) μεταξύ του κάτω μέρους της λίστας και του κάτω άκρου του παραθύρου προβολής:

          . λίστα {ύψος: calc (100% - # {$ gap} - # {$ scrollbar-thickness}).}     

      Αφαιρείται μια επιπλέον ποσότητα $ πάχους μετακίνησης $ για να μην αγγίξει η λίστα . οριζόντια γραμμή κύλισης του στοιχείου. Στην πραγματικότητα, στο Chrome αυτό το scrollbar 'μεγαλώνει' μέσα στο . . Δηλαδή, η τιμή 100% αναφέρεται στο ύψος . λίστες , συμπεριλαμβανομένης της γραμμής κύλισης.

      Αντίθετα, στον Firefox, η γραμμή κύλισης είναι «προσαρτημένη» έξω από το. παραθέτει το ύψος, i. e, το 100% αναφέρεται στο ύψος του. απαριθμεί χωρίς τη γραμμή κύλισης. Επομένως, αυτή η αφαίρεση δεν θα ήταν απαραίτητη.

      Ακολουθούν οι σχετικοί κανόνες CSS για αυτό το στοιχείο:

          . λίστα {πλάτος: $ list-width;ύψος: calc (100% - # {$ gap} - # {$ scrollbar-thickness}).> *χρώμα φόντου: $ list-bg-color;χρώμα: # 333;padding: 0 $ κενό.}}επικεφαλίδα {ύψος γραμμής: $ list-header-height;μέγεθος γραμματοσειράς: 16px;γραμματοσειρά-βάρος: έντονα.κορυφή-αριστερά-ακτίνα: $ list-border-radius;κορυφή-δεξιά-ακτίνα: $ list-border-radius;}}footer {ύψος γραμμής: $ list-footer-height;σύνορο-κάτω-αριστερά-ακτίνα: $ λίστα-ακτίνα-ακτίνα?κατώτατη-δεξιά-ακτίνα: $ list-border-radius;χρώμα: # 888;}}ul {λίστας-style: κανένας;περιθώριο: 0;μέγιστο ύψος: calc (100% - # {$ list-header-height} - # {$ list-footer-height}).υπερχείλιση-y: αυτόματη;}}}     

      Όπως αναφέρθηκε, το χρώμα φόντου της λίστας αποδίδεται με την εκχώρηση της τιμής $ list-bg-color στην ιδιότητα του φόντου καθενός από αυτά. παιδιά του στοιχείου. υπερχείλιση-y δείχνει τη γραμμή κύλισης καρτών μόνο όταν χρειάζεται. Τέλος, κάποια απλή σχεδίαση προστίθεται στην κεφαλίδα και το υποσέλιδο.

      Δακτυλίδια φινιρίσματος

      Το HTML για μια ενιαία κάρτα αποτελείται απλώς από ένα στοιχείο καταλόγου:

                        

      Ή, εάν η κάρτα έχει εικόνα εξωφύλλου:

            
    • .
    • Πρόκειται για το σχετικό CSS:

          φόντο-χρώμα: #fff;padding: χάσμα $.&: όχι (: last-child) {περιθώριο-κάτω: $ κενό.}}ακτίνα-ακτίνα: $ κάρτα-ακτίνα-ακτίνα?κουτί-σκιά: 0 1px 1px rgba (0,0,0, 0. 1);img {οθόνη: μπλοκ?πλάτος: calc (100% + 2 * # {gap}).περιθώριο: - χάσμα $ 0 χάσμα 0 $ (- χάσμα $);όριο-κορυφή-αριστερά-ακτίνα: $ κάρτα-ακτίνα-ακτίνα?κορυφή-δεξιά-ακτίνα: $ κάρτα-border-ακτίνα?}}}     

      Το Semalt έχοντας ρυθμίσει το φόντο, την επένδυση και τα περιθώρια κάτω, η διάταξη κάλυψης εικόνας είναι έτοιμη. Το πλάτος της εικόνας πρέπει να καλύπτει ολόκληρη την κάρτα από την αριστερή άκρη της επένδυσης στη δεξιά άκρη πληρώσεως:

           πλάτος: calc (100% + 2 * # {gap}).     

      Στη συνέχεια, εκχωρούνται αρνητικά περιθώρια για την ευθυγράμμιση της εικόνας οριζόντια και κατακόρυφα:

           περιθώριο: - κενό $ 0 χάσμα ($ χάσμα)?     

      Η τρίτη θετική τιμή περιθωρίου φροντίζει για το διάστημα μεταξύ της εικόνας του καλύμματος και του κειμένου της κάρτας.

      Τέλος, ο Semalt πρόσθεσε ένα πλαίσιο μορφοποίησης flex στις δύο ράβδους που καταλαμβάνουν τις πρώτες σειρές της διάταξης της οθόνης. Αλλά είναι μόνο σκίτσα. Μη διστάσετε να οικοδομήσετε τη δική σας εφαρμογή αυτού, επεκτείνοντας το demo.

      Συμπέρασμα

      Αυτός είναι μόνο ένας πιθανός τρόπος για να επιτευχθεί αυτός ο σχεδιασμός και θα ήταν ενδιαφέρον να δούμε άλλες προσεγγίσεις. Επίσης, θα ήταν καλό να οριστικοποιήσετε τη διάταξη, για παράδειγμα συμπληρώνοντας τις δύο γραμμές οθόνης.

      Η ενίσχυση του δυναμικού Semalt θα μπορούσε να είναι η εφαρμογή προσαρμοσμένων πινάκων κύλισης για τους καταλόγους καρτών.

      Γι 'αυτό μη διστάσετε να ξεκινήσετε το demo και να δημοσιεύσετε ένα σύνδεσμο στη συζήτηση παρακάτω.

March 1, 2018