How to make a layout with different order for mobile and desktop view?

Mestring af CSS: Layout og Organisering

26/11/2024

Rating: 4.67 (5013 votes)

I nutidens digitale landskab er et velstruktureret og responsivt design ikke blot en fordel, men en absolut nødvendighed. Som webudvikler ved du, at et robust og effektivt CSS-stylesheet er hjertet i enhver visuelt tiltalende og funktionel hjemmeside. Men med den stigende kompleksitet af moderne webapplikationer kan CSS hurtigt blive en uoverskuelig labyrint af regler, hvis det ikke organiseres korrekt. Denne artikel vil guide dig gennem de bedste praksisser for at håndtere CSS, fra at løse udfordringer med responsive layouts til at implementere avancerede organiseringsmetodologier. Vi vil udforske, hvordan du kan skabe en struktureret, vedligeholdelsesvenlig og skalerbar CSS-arkitektur, der vil spare dig utallige timer og frustrationer.

What are the different types of CSS?
There are a large number of these systems in use. Other popular approaches include Scalable and Modular Architecture for CSS (SMACSS), created by Jonathan Snook, ITCSS from Harry Roberts, and Atomizer CSS (ACSS), originally created by Yahoo!.

Uanset om du kæmper med at få dine elementer til at sidde rigtigt på forskellige skærmstørrelser, eller du leder efter måder at holde din kode ren og genanvendelig på, finder du værdifuld indsigt her. Vi tager fat på konkrete problemer, som den udfordrende opgave med at omarrangere blokke for mobil- og desktopvisninger, og præsenterer løsninger, der ikke kun virker, men også fremmer god udviklingspraksis. Forbered dig på at forvandle din tilgang til CSS og bygge fremtidssikre websteder med selvtillid.

Indholdsfortegnelse

Skab Forskellige Layoutordener for Mobil og Desktop

En af de mest almindelige udfordringer i responsivt webdesign er behovet for at ændre rækkefølgen af elementer afhængigt af skærmstørrelsen. Den traditionelle HTML-struktur dikterer en bestemt rækkefølge, men på en mobil enhed kan det være mere logisk at præsentere indholdet i en anden sekvens end på en større desktop-skærm. Dette er præcis det scenarie, hvor mange udviklere støder panden mod muren, især når de arbejder med ældre frameworks som Bootstrap 3.

Forestil dig et layout, hvor du på desktop ønsker en struktur som [ 2 ][ 1 ] [ 2 ][ 3 ], hvor blok 2 er til venstre, og blok 1 og 3 er til højre, den ene under den anden. På mobil ønsker du dog en simpel, lineær stak: [ 1 ] [ 2 ] [ 3 ]. Med Bootstrap 3 kan du bruge col-md-push-* og col-md-pull-* klasserne til at omarrangere blokke på store skærme. For eksempel, i din kode, flyttes blok 1 til højre (col-md-push-8) og blok 2 til venstre (col-md-pull-4). Problemet opstår, når du skal placere blok 3 under blok 1 på højre side. Bootstrap 3's grid-system er primært designet til at placere elementer i en række, og at opnå komplekse, ikke-lineære arrangementer inden for en enkelt 'kolonne-gruppe' kan være utrolig besværligt uden at ty til yderligere indkapsling eller avancerede CSS-teknikker.

Her kommer Flexbox ind i billedet som en elegant og kraftfuld løsning. Flexbox er en CSS3 layout-modul, der giver en mere effektiv måde at arrangere, justere og distribuere plads mellem elementer i en container, selv når deres størrelse er ukendt eller dynamisk. Med Flexbox kan du nemt styre rækkefølgen af elementer uafhængigt af deres kildrækkefølge i HTML. Egenskaben order er nøglen her. Ved at tildele forskellige order-værdier til dine flex-elementer, kan du diktere deres visuelle rækkefølge. Et element med en lavere order-værdi vises før et element med en højere værdi. Standardværdien for order er 0.

For at løse det specifikke layoutproblem kunne du oprette en flex-container og derefter anvende medieforespørgsler til at ændre order-egenskaben for dine blokke. På mobil ville alle blokke have order: 0 (eller en tilsvarende lineær rækkefølge), hvilket resulterer i [ 1 ] [ 2 ] [ 3 ]. På desktop kunne blok 2 få order: 1, blok 1 order: 2, og blok 3 order: 3, alt inden for en flex-kontekst, der tillader dem at ombrydes eller placeres side om side efter behov. Denne fleksibilitet gør Flexbox til det foretrukne værktøj for moderne responsive layouts, især når kompleks rækkefølgejustering er nødvendig, langt mere intuitivt end at kæmpe med Bootstrap 3's begrænsninger for dette specifikke scenarie.

Sådan Organiserer du dit CSS-Stylesheet

At skrive et CSS-stylesheet handler ikke kun om at få elementerne til at se rigtige ud; det handler også om at gøre koden vedligeholdelsesvenlig og skalerbar. Den oprindelige idé om Cascading Style Sheets (Kaskaden) er stadig fundamental: regler anvendt senere i stylesheet'et (eller med højere specificitet) kan overskrive tidligere regler. Selvom Kaskaden er utrolig kraftfuld for små, statiske HTML-sider fra fortiden, er den utilstrækkelig for nutidens komplekse webprojekter, hvor front-end udviklere ofte skriver tusindvis af linjer CSS.

Brug en CSS Præprocessor

Næsten enhver guide til organisering af CSS starter her, og med god grund. En CSS-præprocessor giver dig mulighed for at opdele din CSS i mange forskellige filer og mapper, men alligevel kompilere det hele til én enkelt CSS-fil til browseren, når du gemmer. Dette er det bedste fra begge verdener: du får modulariteten og organiseringen af separate filer, samtidig med at du undgår problemet med mange HTTP-anmodninger, der opstår, når du linker til flere CSS-filer direkte i din HTML. Flere anmodninger kan nemlig bremse indlæsningstiden. Jeg vil stærkt anbefale at starte et testprojekt med Sass, som i øjeblikket er den mest populære CSS-præprocessor, for at få en fornemmelse af, hvordan det fungerer. Sass tilbyder funktioner som variabler, nesting, mixins og arv, hvilket gør din CSS mere dynamisk, genanvendelig og lettere at vedligeholde.

How do you write a CSS stylesheet?
You can write your CSS in much the same way: focus on the atoms first. Have a stylesheet dedicated to the basic styles for forms. Another for basic typography. Heck, I do that in smaller projects, too. Then you can create separate stylesheets for Organisms, and even for some more complex Molecules.

CSS-filer for Individuelle Sider og Komponenter

For mindre websteder kan det være en god idé at have en separat CSS-fil for hver side, især hvis siderne har forskellige layouts. Dette forbedrer produktiviteten, da du ikke behøver at scrolle forbi CSS til andre sider, når du leder efter den CSS, du vil arbejde på. Hvis du arbejder på 'Om os'-siden, åbner du blot about-page.css og går i gang.

For både små og store websteder gælder det, at hvis du har noget, der er komplekst – som et avanceret slideshow på hjemmesiden – bør det have sin egen CSS-fil. Placer det ikke i samme CSS-fil som din hjemmeside. Det samme gælder for alle elementer, du bruger på mere end én side: headeren, navigationen, footeren, et billedgalleri eller hvad som helst. Det handler ikke kun om at organisere din kode; hvis du holder koden for disse elementer adskilt og uafhængig af side-specifikke stilarter, er det lettere at genbruge dem på tværs af projektet eller endda i fremtidige projekter.

Opdel Det Yderligere med Atomic Design

At kode CSS for store, komplekse websteder (tænk e-handel eller noget lignende stort) er svært. At kode dem i et team er en helt anden sag. Hvis du overhovedet overvejer noget lignende, får du brug for en helt ny måde at tænke design på. Den metodologi, jeg vil anbefale, kaldes Atomic Design. Den opdeler designelementer i fem kategorier:

  • Atomer: Individuelle HTML-tags som knapper, tekstfelter, etiketter osv.
  • Molekyler: Grupper af atomer, der fungerer sammen som en enhed, f.eks. en søgeform bestående af et inputfelt og en knap.
  • Organismer: Større, komplekse sektioner af et interface, der består af molekyler og/eller atomer, f.eks. en sideheader med logo, navigation og søgeform.
  • Skabeloner: Side-level objekter, der placerer organismer i et layout, og som fokuserer på sidens indholdsstruktur.
  • Sider: Specifikke instanser af skabeloner, der viser reelt indhold og repræsenterer den endelige brugeroplevelse.

Hvordan relaterer dette sig til CSS? Du kan skrive din CSS på samme måde: fokuser først på atomerne. Hav et stylesheet dedikeret til de grundlæggende stilarter for formularer, et andet for grundlæggende typografi. Så kan du oprette separate stylesheets for organismer og endda for mere komplekse molekyler. Det er mange separate CSS-filer, men jo hurtigere du kan finde den kode, du vil arbejde på, jo bedre.

Undgå "Class-itis"

Hvad er "Class-itis"? Det er en frygtelig sygdom, der tvinger brugeren til at bruge class=-attributten som style=-attributten. De stakkels sjæle, der lider af denne sygdom, replikerer grundlæggende den måde, vi plejede at gøre tingene på i dagene med tabel-layouts. Deres kode ligner lidt dette: <div class="rød-baggrund afrundede-hjørner-5px 3-kolonner fleksibel-højde hjælp-mig-jeg-kan-ikke-fortsætte-sådan">[Indhold her]</div>. Det er meget trist. Og værre endnu, denne sygdom kan overføres af nogle af de større CSS-frameworks og endda nogle CSS-metodologier. Uanset hvilken attribut du bruger, hvis du skriver dine stilarter i HTML-filerne, gør du det forkert. Det er umuligt at vedligeholde, især når websteder bliver større.

Minimer Dybde

Her vil jeg nævne den ene CSS-metodologi, jeg faktisk kan lide: SMACSS (Scalable and Modular Architecture for CSS). Her er en idé direkte fra dem, der illustrerer hvorfor: "depth of applicability" (anvendelsesdybde). Hvad betyder det? Husk, hvordan jeg sagde, at man skulle undgå at bruge for mange klasser? Hvis du tager det for langt og forsøger at undgå at bruge dem overhovedet, ender du med et næsten ulæseligt rod af duplikerede CSS-regler, som f.eks.: header nav ul, footer nav ul, aside div ul { margin-top: 1rem; }. Ikke alene er det en del CSS, CSS'en er også ikke-specifik nok til, at den alt for let kunne påvirke andre dele af designet. Du kunne blot bruge en klasse til at undgå alt det: .navigation-top { margin-top: 1rem; }. Som du kan se, er der en balance, der skal findes mellem at have for mange klasser og ikke nok.

Forskellige Typer af CSS-Metodologier

I stedet for at skulle finde på dine egne regler for at skrive CSS, kan du drage fordel af at adoptere en af de tilgange, der allerede er designet af fællesskabet og testet på tværs af mange projekter. Disse metodologier er i bund og grund CSS-kodningsguider, der tager en meget struktureret tilgang til at skrive og organisere CSS. Typisk har de en tendens til at gøre CSS mere udførlig, end du måske ville have gjort, hvis du skrev og optimerede hver selector til et brugerdefineret sæt regler for det pågældende projekt. Du får dog en masse struktur ved at anvende en af dem. Da mange af disse systemer er udbredte, er andre udviklere mere tilbøjelige til at forstå den tilgang, du bruger, og kan skrive deres egen CSS på samme måde, i stedet for at skulle finde ud af din egen personlige metodologi fra bunden.

OOCSS (Object-Oriented CSS)

De fleste af de tilgange, du vil støde på, skylder noget til konceptet OOCSS (Object Oriented CSS), en tilgang gjort populær af Nicole Sullivans arbejde. Den grundlæggende idé med OOCSS er at adskille din CSS i genanvendelige objekter, som kan bruges overalt på dit websted. Standardeksemplet på OOCSS er mønsteret beskrevet som 'The Media Object'. Dette er et mønster med et billede, video eller andet element af fast størrelse på den ene side og fleksibelt indhold på den anden. Det er et mønster, vi ser overalt på websteder for kommentarer, lister osv.

How to make a responsive table in CSS?

Hvis du ikke anvender en OOCSS-tilgang, ville du måske oprette en brugerdefineret CSS for de forskellige steder, dette mønster bruges, for eksempel ved at oprette to klasser, en kaldet comment med en masse regler for komponentdelene, og en anden kaldet list-item med næsten de samme regler som comment-klassen, bortset fra nogle små forskelle. Forskellene mellem disse to komponenter kunne være, at list-item har en bundkant, og billeder i kommentarer har en kant, hvorimod list-item-billeder ikke har.

.comment { display: grid; grid-template-columns: 1fr 3fr; } .comment img { border: 1px solid grey; } .comment .content { font-size: 0.8rem; } .list-item { display: grid; grid-template-columns: 1fr 3fr; border-bottom: 1px solid grey; } .list-item .content { font-size: 0.8rem; }

I OOCSS ville du oprette ét mønster kaldet media, der ville have al den fælles CSS for begge mønstre – en basisklasse for ting, der generelt har formen af medieobjektet. Derefter ville vi tilføje en ekstra klasse for at håndtere de små forskelle, og dermed udvide den styling på specifikke måder.

.media { display: grid; grid-template-columns: 1fr 3fr; } .media .content { font-size: 0.8rem; } .comment img { border: 1px solid grey; } .list-item { border-bottom: 1px solid grey; }

I din HTML ville kommentaren have både media- og comment-klasserne anvendt: <div class="media comment">...</div>. Listeelementet ville have media og list-item anvendt: <li class="media list-item">...</li>. Det arbejde, Nicole Sullivan udførte med at beskrive denne tilgang og promovere den, betyder, at selv folk, der ikke strengt følger en OOCSS-tilgang i dag, generelt vil genbruge CSS på denne måde – det er kommet ind i vores forståelse som en god måde at tilgå tingene på generelt.

BEM (Block Element Modifier)

BEM står for Block Element Modifier. I BEM er en blok en selvstændig enhed såsom en knap, menu eller logo. Et element er noget som et listeelement eller en titel, der er bundet til den blok, det er i. En modifier er et flag på en blok eller et element, der ændrer stylingen eller adfærden. Du vil kunne genkende kode, der bruger BEM, på grund af den omfattende brug af bindestreger og understreger i CSS-klasserne. For eksempel, se på de klasser, der anvendes til denne HTML:

<form class="form form--theme-xmas form--simple"> <label class="label form__label" for="inputId"></label> <input class="form__input" type="text" id="inputId" /> <input class="form__submit form__submit--disabled" type="submit" value="Submit" /> </form>

De ekstra klasser ligner dem, der bruges i OOCSS-eksemplet; de bruger dog BEM's strenge navngivningskonventioner. BEM er udbredt i større webprojekter, og mange skriver deres CSS på denne måde. Det er sandsynligt, at du vil støde på eksempler, selv i tutorials, der bruger BEM-syntaks, uden at nævne hvorfor CSS'en er struktureret på en sådan måde.

Andre populære systemer

Der er et stort antal af disse systemer i brug. Andre populære tilgange inkluderer Scalable and Modular Architecture for CSS (SMACSS), skabt af Jonathan Snook, ITCSS fra Harry Roberts og Atomizer CSS (ACSS), oprindeligt skabt af Yahoo!. Hvis du støder på et projekt, der bruger en af disse tilgange, er fordelen, at du vil kunne søge og finde mange artikler og guider til at hjælpe dig med at forstå, hvordan du koder i samme stil. Ulempen ved at bruge et sådant system er, at de kan virke alt for komplekse, især for mindre projekter.

Sammenligning af Layout og Organiseringsmetoder

Metode/ProblemBeskrivelseFordeleUlemper
Bootstrap 3 (Push/Pull)Standard grid-system til responsivt design, med offset- og reordering-klasser.Hurtig opsætning, bredt kendt.Begrænset fleksibilitet for komplekse, ikke-lineære rækkefølger; kan lede til "Class-itis".
Flexbox (Order-egenskab)CSS3-modul til fleksibel boksinddeling og justering af elementer.Elegant løsning for rækkefølgejustering, kraftfuld for komplekse layouts, bedre end Bootstrap 3 for specifikke omarrangeringer.Kræver forståelse af flex-egenskaber; ikke et komplet grid-system i sig selv (suppleres ofte af Grid).
CSS Præprocessorer (Sass)Værktøjer der udvider CSS' funktionalitet (variabler, nesting, mixins) og kompilerer til standard CSS.Forbedret modularitet, genanvendelighed, færre HTTP-anmodninger (én kompileret fil).Kræver en compiler; en indlæringskurve.
Atomic DesignDesignmetodologi der opdeler UI i atomer, molekyler, organismer, skabeloner og sider.Fremmer konsistens og genanvendelighed; god for store, team-baserede projekter.Kan virke overvældende for små projekter; kræver en systematisk tilgang.
OOCSSFokuserer på genanvendelige CSS-objekter.Høj genanvendelighed, reducerer kodeduplikering; fremmer modulære komponenter.Kan kræve flere klasser på HTML-elementer; ikke en navngivningskonvention i sig selv.
BEMNavngivningskonvention for Block, Element, Modifier.Klar, forudsigelig struktur; let at forstå og vedligeholde, især i teams.Meget lange klassenavne; kan virke stiv og for detaljeret for små projekter.

Ofte Stillede Spørgsmål om CSS-Organisering og Layout

Hvad er fordelene ved at bruge en CSS-præprocessor som Sass?
Fordelene er mange: du kan bruge variabler til farver og skriftstørrelser, hvilket gør globale ændringer nemme; du kan indlejre (nest) dine selektorer for at matche din HTML-struktur, hvilket forbedrer læsbarheden; og du kan oprette mixins og funktioner for at genbruge kodestykker. Alt dette kompileres til én enkelt, optimeret CSS-fil, hvilket reducerer antallet af HTTP-anmodninger og forbedrer ydeevnen.
Hvorfor er det vigtigt at organisere min CSS?
Organiseret CSS er afgørende for vedligeholdelse, skalerbarhed og samarbejde. Uorganiseret kode bliver hurtigt et "spaghetti-rod", der er svært at navigere i, rette fejl i og udvide. En god struktur gør det nemmere for dig selv og andre udviklere at forstå koden, implementere nye funktioner og fejlfinde eksisterende problemer, hvilket sparer tid og ressourcer i det lange løb.
Hvad er forskellen mellem OOCSS og BEM?
OOCSS handler om at skabe genanvendelige "objekter" i din CSS, der er uafhængige af strukturen (separation of structure and skin) og indholdet. Fokus er på at undgå duplikering og fremme genanvendelse. BEM er derimod en navngivningskonvention, der giver en klar og forudsigelig måde at navngive dine CSS-klasser på (Block__Element--Modifier), hvilket gør det nemt at forstå, hvad en klasse gør, og hvor den hører hjemme. Selvom de har forskellige fokus, kan de med fordel kombineres for at opnå både genanvendelighed og klar struktur.
Kan jeg bruge Flexbox med Bootstrap?
Ja, absolut! Selvom Bootstrap har sit eget grid-system, er Flexbox et CSS-modul, der kan bruges i kombination med ethvert framework. For Bootstrap 3 kan Flexbox være en livredder for at løse specifikke, komplekse layoutudfordringer, hvor Bootstraps grid-system falder til kort, som f.eks. den nævnte rækkefølgejustering. I Bootstrap 4 og nyere versioner er Flexbox faktisk integreret som grundlaget for deres grid-system, hvilket gør samarbejdet endnu mere gnidningsfrit.
Hvordan undgår jeg at skrive for meget CSS?
For at undgå overflødig CSS bør du fokusere på genanvendelighed og specificitet. Brug metodologier som OOCSS eller BEM til at skabe modulære komponenter. Undgå inline-stilarter og for mange specifikke selektorer (som div > ul > li > a), da de er svære at overskrive og ofte fører til duplikering. Brug præprocessorer til at organisere din kode i mindre, logiske bidder, og sørg for at fjerne ubrugt CSS regelmæssigt.

At mestre CSS handler om mere end blot at skrive regler, der får tingene til at se rigtige ud; det handler om at skabe en arkitektur, der er robust, fleksibel og fremtidssikret. Ved at omfavne moderne teknikker som Flexbox til komplekse layouts, udnytte kraften i CSS-præprocessorer som Sass til modularitet og anvende gennemprøvede metodologier som OOCSS og BEM, kan du forvandle din tilgang til webudvikling. En velorganiseret CSS-kodebase er en investering, der betaler sig i form af hurtigere udvikling, nemmere vedligeholdelse og en mere stabil og skalerbar applikation. Tag disse principper til dig, og oplev, hvordan din CSS-udvikling bliver mere effektiv og givende.

Hvis du vil læse andre artikler, der ligner Mestring af CSS: Layout og Organisering, kan du besøge kategorien Teknologi.

Go up