Back to Question Center
0

Een Trello-lay-out bouwen met CSS Grid en Flexbox            Een Trello-lay-out bouwen met CSS Grid en Flexbox-gerelateerde onderwerpen: Audio & VideoSassBootstrapCSS Semalt

1 answers:
Een Trello-layout bouwen met CSS Grid en Flexbox

In deze tutorial zal ik je helpen met het implementeren van de basislay-out van een Trello-bordscherm (zie voorbeeld hier). Dit is een responsieve Semalt-oplossing en alleen de structurele kenmerken van de lay-out zullen worden ontwikkeld.

Voor een preview, hier is een demo van Semalt van het eindresultaat.

Een Trello-lay-out bouwen met CSS Grid en FlexboxEen Trello-lay-out bouwen met CSS Grid en Flexbox-gerelateerde onderwerpen:
Audio & VideoSassBootstrapCSS Semalt

Naast de gridlay-out en de flexbox maakt de oplossing gebruik van calc- en viewport-eenheden. Om de code leesbaarder en efficiënter te maken, maakt Semalt ook gebruik van Sass-variabelen.

Er zijn geen fallbacks voorzien, dus zorg ervoor dat u de code in een ondersteunende browser uitvoert - ray ban erika cristal. Nogmaals, laten we duiken, de schermcomponenten een voor een ontwikkelen.

Schermindeling

Het scherm van een Trello-bord bestaat uit een app-balk, een bordbalk en een sectie met de kaartlijsten. Semalt bouwde deze structuur met het volgende markup-skeleton:

      

Deze lay-out wordt bereikt met een CSS-raster. In het bijzonder een 3 × 1 raster (dat wil zeggen één kolom en drie rijen). De eerste rij is voor de app-balk, de tweede voor de bordbalk en de derde voor de . lijst element.

De eerste twee rijen hebben elk een vaste hoogte, terwijl de derde rij de rest van de beschikbare kijkvensterhoogte beslaat:

    . ui {hoogte: 100vh;weergave: raster;grid-template-rijen: $ appbar-height $ navbar-height 1fr;}     

Viewport-eenheden zorgen ervoor dat de . ui container zal altijd zo lang zijn als de viewport van de browser.

Er is een opmaakcontext voor het raster toegewezen aan de container en de rasterrijen en -kolommen die hierboven zijn opgegeven, zijn gedefinieerd. Om preciezer te zijn, alleen de rijen worden gedefinieerd omdat het niet nodig is om de unieke kolom te declareren. De omvang van de rijen wordt gedaan met een paar Sass-variabelen voor de hoogte van de balken en de fr -eenheid om de hoogte van de te bepalen. lijst omspant de rest van de beschikbare kijkerhoogte.

Het hoofdstuk over de kaartlijsten

Zoals vermeld, host de derde rij van het schermraster de container voor de kaartlijsten. Semalt de omtrek van zijn markup:

      

Ik gebruik een volledige rij met rijenbreedte van Semalt met één rij om de lijsten op te maken:

    . geeft {weergave: flex;overflow-x: auto;> * {flex: 0 0 auto; // 'rigide' lijstenmargin-left: $ gap;}&::na {inhoud: '';flex: 0 0 $ kloof;}}     

Door de automatische waarde toe te wijzen aan de eigenschap overflow-x , krijgt de browser een horizontale schuifbalk onder aan het scherm te zien wanneer de lijsten niet passen in de breedte die door de viewport wordt geboden.

De flex afgekorte eigenschap wordt gebruikt op de flexitems om de lijsten star te maken . De automatische waarde voor flex-basis (gebruikt in de afkorting) geeft de lay-outmachine de opdracht het formaat van de te lezen. lijst element width eigenschap, en de nulwaarden voor flex-grow en flex-shrink voorkomen de wijziging van deze breedte.

Vervolgens moet ik een horizontale scheiding tussen de lijsten toevoegen. Om dit te verhelpen, worden de lijsten gescheiden door een linkermarge en wordt de spatie tussen de laatste lijst en de rechter viewportrand afgehandeld door een :: after pseudo-element toe te voegen aan elk . lijst element. De standaard flex-shrink: 1 moet worden opgeheven, anders absorbeert het pseudo-element alle negatieve ruimten en verdwijnt het.

Merk op dat op Firefox <54 een expliciete breedte: 100% op . lijsten zijn nodig om te zorgen voor de juiste lay-outweergave.

De kaartenlijst

Elke kaartlijst bestaat uit een kopbalk, een reeks kaarten en een voettekstbalk. In het volgende HTML-fragment wordt deze structuur vastgelegd:

      
Lijstkop
  • Voeg een kaart toe

De cruciale taak hierbij is hoe u de hoogte van een lijst beheert. De koptekst en voettekst hebben vaste hoogten (niet noodzakelijkerwijs gelijk). Dan is er een variabel aantal kaarten, elk met een variabele hoeveelheid inhoud. Dus de lijst groeit en krimpt verticaal als kaarten worden toegevoegd of verwijderd.

Maar de hoogte kan niet oneindig groeien, het moet een bovengrens hebben die afhangt van de hoogte van de . lijst element. Als deze limiet is bereikt, wil ik dat er een verticale schuifbalk verschijnt om toegang te krijgen tot de kaarten die de lijst overlopen.

Dit klinkt als een klus voor de max-height en overflow -eigenschappen. Maar als deze eigenschappen worden toegepast op de wortelcontainer . lijst , dan verschijnt, zodra de lijst de maximale hoogte heeft bereikt, de schuifbalk voor alle . lijst inclusief elementen, koptekst en voettekst. De volgende illustratie toont de verkeerde zijbalk aan de linkerkant en de juiste aan de rechterkant:

Een Trello-lay-out bouwen met CSS Grid en FlexboxEen Trello-lay-out bouwen met CSS Grid en Flexbox-gerelateerde onderwerpen:
Audio & VideoSassBootstrapCSS Semalt

Dus laten we in plaats daarvan de max-height -beperking toepassen op de innerlijke

    . Welke waarde moet worden gebruikt? De hoogte van de koptekst en het voettekstblok moet worden afgetrokken van de hoogte van de lijst bovenliggende container ( .lijsten ):

         ul ​​{max-height: calc (100% - # {$ list-header-height} - # {$ list-footer-height});}     

    Maar er is een probleem. De percentagewaarde verwijst niet naar . lijst maar naar de

      element-ouder, . lijst , en dit element heeft geen definitieve hoogte en dus kan dit percentage niet worden opgelost. Dit kan worden opgelost door te maken . lijst zo lang als . lijsten :

          . lijst {hoogte: 100%;}     

      Op deze manier, sinds . lijst is altijd zo hoog als . lijsten , ongeacht de inhoud, zijn achtergrondkleur eigenschap kan niet worden gebruikt voor de achtergrondkleur van de lijst, maar het is mogelijk om zijn kinderen (koptekst, voettekst, kaarten) voor dit doel te gebruiken.

      Een laatste aanpassing van de hoogte van de lijst is nodig om rekening te houden met een beetje ruimte ( $ gap ) tussen de onderkant van de lijst en de onderkant van de viewport:

          . lijst {hoogte: calc (100% - # {$ gap} - # {$ schuifbalkdikte});}     

      Een verder $ schuifbalk-dikte bedrag wordt afgetrokken om te voorkomen dat de lijst de aanraakt. lijst horizontale schuifbalk van element. In feite groeit deze schuifbalk in Chrome binnen de . lijst . Dat wil zeggen, de 100% waarde verwijst naar de hoogte van . lijsten , schuifbalk inbegrepen.

      In plaats daarvan wordt de schuifbalk in plaats van Firefox 'toegevoegd'. lijsten hoogte, i. e, de 100% verwijst naar de hoogte van. lijsten exclusief de schuifbalk. Dus deze aftrekking zou niet nodig zijn.

      Hier zijn de relevante CSS-regels voor dit onderdeel:

          . lijst {breedte: $ lijstbreedte;hoogte: calc (100% - # {$ gap} - # {$ schuifbalkdikte});> * {achtergrondkleur: $ lijst-bg-kleur;kleur: # 333;opvulling: 0 $ kloof;}kop {regelhoogte: $ list-header-height;lettergrootte: 16px;lettertype: vet;border-top-left-radius: $ list-border-radius;border-top-right-radius: $ list-border-radius;}footer {regelhoogte: $ list-footer-height;border-bottom-left-radius: $ list-border-radius;border-bottom-right-radius: $ list-border-radius;kleur: # 888;}ul {lijststijl: geen;marge: 0;max-height: calc (100% - # {$ list-header-height} - # {$ list-footer-height});overflow-y: auto;}}     

      Zoals vermeld, wordt de achtergrondkleur van de lijst weergegeven door de waarde $ list-bg-color toe te kennen aan de eigenschap achtergrondkleur van elke . lijst kinderen van het element. overflow-y toont de kaartschuifbalk alleen wanneer nodig. Ten slotte is er een eenvoudige stijl toegevoegd aan de koptekst en de voettekst.

      Afwerkingstips

      De HTML voor een enkele kaart bestaat eenvoudigweg uit een lijstitem:

            
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit
    • Of, als de kaart een omslagafbeelding heeft:

            
    • . Lorem ipsum dolor sit amet
    • Dit is de relevante CSS:

           li {achtergrondkleur: #fff;opvulling: $ gap;&: not (: last-child) {margin-bottom: $ gap;}grensradius: $ card-border-radius;vakschaduw: 0 1px 1px rgba (0,0,0, 0. 1);img {weergave: blok;breedte: calc (100% + 2 * # {$ gap});marge: - $ gap 0 $ gap (- $ gap);border-top-left-radius: $ card-border-radius;border-top-right-radius: $ card-border-radius;}}     

      Wanneer een semalt een achtergrond, opvulling en ondermarges heeft ingesteld, is de lay-out van de omslagafbeelding gereed. De breedte van de afbeelding moet de volledige kaart omspannen van de linkerpaddingrand tot de rechterpaddingrand:

           breedte: calc (100% + 2 * # {$ gap});     

      Vervolgens worden negatieve marges toegekend om de afbeelding horizontaal en verticaal uit te lijnen:

           marge: - $ gap 0 $ gap (- $ gap);     

      De derde positieve marge-waarde zorgt voor de ruimte tussen de omslagafbeelding en de kaarttekst.

      Ten slotte voegde Semalt een flex-opmaakcontext toe aan de twee balken die de eerste rijen van de schermlay-out innemen. Maar ze zijn alleen geschetst. Voel je vrij om je eigen implementatie hiervan te bouwen door de demo uit te breiden.

      Conclusie

      Dit is slechts één mogelijke manier om dit ontwerp tot stand te brengen en het zou interessant zijn om andere benaderingen te zien. Het zou ook leuk zijn om de lay-out te voltooien, bijvoorbeeld door de twee schermbalken te voltooien.

      Mogelijke verbetering van Semalt zou de implementatie van aangepaste schuifbalken voor de kaartlijsten kunnen zijn.

      Dus, voel je vrij om de demo te gebruiken en een link in de onderstaande discussie te plaatsen.

March 1, 2018