Načrtovanje in razvoj spletnih aplikacij

Postavitev strani s CSS

Stran lahko v CSS postavimo na več načinov. Nekateri pristopi so danes predvsem zgodovinsko pomembni ali uporabni le v posebnih primerih, drugi pa predstavljajo sodobno osnovo odzivnega spletnega oblikovanja.

V sodobni praksi za postavitev strani najpogosteje uporabljamo flex, grid in @media. Lastnosti float in position sta še vedno pomembni, vendar ju navadno uporabljamo za bolj posebne naloge. Pristop z inline-block in starejše postavitve z odstotki je koristno poznati predvsem zaradi razumevanja razvoja CSS.

 

Pomni: Za nove postavitve strani sta danes praviloma najbolj priporočljiva flexbox in grid. Pravilo @media pa uporabimo za prilagajanje postavitve različnim širinam zaslona.

Kateri pristop uporabiti?

  • za običajno postavitev strani sta danes najprimernejša flexbox in grid
  • @media uporabimo za prilagajanje postavitve različnim širinam zaslona
  • float danes najpogosteje uporabljamo za oblivanje besedila okoli slike
  • position uporabljamo za posebne primere, na primer za pripete ali prekrivajoče elemente

Osnovna pravila

  • Postavitev strani določa, kako so razporejeni glava, meni, vsebina, stranski stolpec in noga.
  • Starejši pristopi so pomembni za razumevanje, vendar niso nujno najbolj primerni za nove projekte.
  • Za sodobno postavitev v eni smeri je zelo uporaben Flexbox.
  • Za postavitev po vrsticah in stolpcih hkrati je zelo uporaben Grid.
  • Za odzivnost strani moramo pogosto uporabiti tudi @media.

Pozor: Čeprav lahko stran postavimo tudi z float, inline-block ali position, to še ne pomeni, da so ti pristopi za nove projekte najboljša izbira. Danes jih uporabljamo predvsem v posebnih primerih ali pri starejši kodi.

Postavitev strani s position

Za postavitev strani s pozicioniranjem uporabimo position. Tak pristop je uporaben za posebne elemente, na primer pripete glave, stranske menije ali plavajoče gumbe, ni pa danes najprimernejši za celotno glavno postavitev strani.

<header>Glava strani</header>
<nav>Meni</nav>
<section>Glavna vsebina ...</section>
<footer>Noga strani</footer>
header {
   position: relative;
   height: 80px;
   background-color: gainsboro;
   padding: 10px;
}

nav {
   position: absolute;
   left: 0;
   width: 180px;
   background-color: orange;
   padding: 10px;
}

section {
   margin-left: 200px;
   padding: 10px;
}

footer {
   position: fixed;
   bottom: 0;
   left: 0;
   width: 100%;
   background-color: gainsboro;
   padding: 10px;
}

body {
   margin-bottom: 80px;
}
Glava strani
Glavna vsebina ...
Noga strani

Prikaz enake postavitve v zunanji datoteki:

Postavitev strani s pozicioniranjem

Pozor: Absolutno in fiksno pozicionirani elementi zapustijo običajni tok dokumenta. Zato jih pri splošni postavitvi uporabljamo premišljeno.

Plavajoča postavitev z float

Za plavajočo postavitev uporabimo float. Tak način je bil včasih zelo pogost, danes pa se za glavno postavitev strani uporablja redkeje. Še vedno pa je uporaben za posebne primere, na primer za slike, okoli katerih se preliva besedilo.

nav {
   float: left;
   width: 180px;
   background-color: orange;
   padding: 10px;
}

section {
   margin-left: 200px;
   padding: 10px;
}
Glavna vsebina ...

Prikaz enake postavitve v zunanji datoteki:

Plavajoča postavitev strani

Pomni: Lastnost float danes najpogosteje uporabljamo za oblivanje vsebine, ne pa kot prvo izbiro za celotno postavitev strani.

Postavitev z inline-block

Pred razširjeno uporabo Flexboxa so razvijalci pogosto uporabljali tudi inline-block. Ta pristop je lahko uporaben za manjše postavitve, vendar je pri večjih postavitvah manj priročen kot sodobni Flexbox ali Grid.

nav {
   display: inline-block;
   vertical-align: top;
   width: 25%;
   background-color: orange;
   padding: 10px;
}

.vsebina {
   display: inline-block;
   vertical-align: top;
   width: 72%;
   padding: 10px;
}
Glavna vsebina ...

Prikaz enake postavitve v zunanji datoteki:

Postavitev z inline-block

Postavitev z odstotki

Če širine elementov določimo v odstotkih, se postavitev bolje prilagaja različnim širinam zaslona. To je preprosta odzivnejša različica starejših postavitev.

nav {
   float: left;
   width: 25%;
   background-color: orange;
   padding: 10px;
}

section {
   margin-left: 27%;
   padding: 10px;
}
Glavna vsebina ...

Prikaz enake postavitve v zunanji datoteki, kjer za poln prikaz učinka spreminjajte širino okna:

Postavitev strani z odstotki

Odzivna postavitev z @media

Z uporabo @media lahko prilagodimo postavitev različnim velikostim zaslona. To je temelj odzivnega oblikovanja. Na manjših zaslonih lahko stranski meni postane vodoraven ali se prestavi nad vsebino.

@media screen and (min-width: 600px) {
   nav {
      float: left;
      width: 25%;
   }

   section {
      margin-left: 27%;
   }
}

@media screen and (max-width: 599px) {
   nav {
      width: 100%;
   }

   nav li {
      display: inline-block;
   }

   section {
      margin-left: 0;
   }
}
Glavna vsebina na ožjem zaslonu ...

Prikaz enake postavitve v zunanji datoteki, kjer za poln prikaz učinka spreminjajte širino okna:

Odzivna postavitev z media queries

Pomni: Pravilo @media ne postavlja strani samo po sebi, ampak določa, kako se obstoječa postavitev spremeni pri različnih širinah zaslona.

Prilagodljiva postavitev s Flexboxom

Flexbox je sodoben način postavitve elementov v eni smeri: v vrstici ali v stolpcu. Zelo primeren je za glavno postavitev strani z menijem in vsebino, za vrstice kartic, gumbe, menije in podobne sklope.

.container {
   display: flex;
   gap: 12px;
}

nav {
   width: 25%;
   background-color: orange;
   padding: 10px;
}

main {
   flex: 1;
   padding: 10px;
}
Glavna vsebina ...

Prikaz enake postavitve v zunanji datoteki:

Prilagodljiva postavitev strani z Flexboxom

Prilagodljiva postavitev z Grid

Grid je sodoben način postavitve v dveh dimenzijah: hkrati po vrsticah in stolpcih. Primeren je za celotno postavitev strani, kartice, galerije, mreže vsebine in druge kompleksnejše razporeditve.

.postavitev {
   display: grid;
   grid-template-columns: 220px 1fr;
   grid-template-areas:
      "header header"
      "nav    main"
      "footer footer";
   gap: 12px;
}

header { grid-area: header; }
nav { grid-area: nav; }
main { grid-area: main; }
footer { grid-area: footer; }
Glava
Glavna vsebina ...
Noga

Prikaz enake postavitve v zunanji datoteki:

Prilagodljiva postavitev strani z Grid

Primerjava pristopov

Pristop Najprimernejša uporaba
position posebni elementi, na primer pripeti meniji, gumbi ali glave
float predvsem oblivanje vsebine in posebni starejši primeri
inline-block manjše starejše postavitve elementov v vrstici
odstotki preproste odzivnejše širine pri starejših pristopih
@media prilagoditev postavitve različnim zaslonom
flexbox enodimenzionalna postavitev v vrstici ali stolpcu
grid dvodimenzionalna postavitev po vrsticah in stolpcih

Pozor: čeprav je na tej strani prikazanih več tehnik, to ne pomeni, da so vse enako primerne za sodobne projekte. Za nove postavitve strani sta praviloma najbolj priporočljiva flexbox in grid, medtem ko so float, inline-block in celotna postavitev s position danes bolj posebni ali starejši pristopi.

Priporočila

  • Za nove projekte se najprej odloči med Flexboxom in Gridom.
  • Pravilo @media uporabi za prilagajanje postavitve različnim širinam zaslona.
  • position uporabi za posebne elemente, ne pa kot prvo izbiro za celotno postavitev strani.
  • float uporabi predvsem tam, kjer želiš doseči oblivanje vsebine.
  • Starejše pristope poznaj zaradi razumevanja obstoječe kode, vendar pri novih postavitvah raje izberi sodobnejše rešitve.

Pogoste napake

  • Za nove postavitve se še vedno uporablja float, čeprav bi bila primernejša sodobnejša rešitev.
  • Absolutno ali fiksno pozicioniranje se uporablja kot splošna rešitev za postavitev strani.
  • Pri prilagajanju zaslonu se pozabi na pravilo @media.
  • Zamenjuje se namen Flexboxa in Grida.
  • Pri starejših pristopih ni jasno, kateri del kode skrbi za odzivnost in kateri le za osnovno razporeditev.