Načrtovanje in razvoj spletnih aplikacij

Prikaz elementov s CSS

Lastnosti display, overflow in visibility določajo, kako se elementi prikažejo, kako sodelujejo v postavitvi strani in kako se obnaša presežna vsebina.

Z lastnostjo display določimo, ali je element bločni, vrstični, skrit, se obnaša kot del tabele ali pa uporablja sodobnejši način postavitve. Lastnost overflow določa, kaj se zgodi, ko je vsebina elementa večja od prostora, ki je na voljo. Lastnost visibility pa določa, ali je element viden, pri čemer lahko še vedno ostane del postavitve.

 

Pomni: Lastnost display: none element odstrani iz prikaza in tudi iz postavitve. Lastnost visibility: hidden pa element samo skrije, vendar ta še vedno zaseda svoj prostor.

Sodobni CSS uporablja lastnost display tudi za naprednejše načine postavitve, kot sta flex in grid. Ker sta to širša sklopa lastnosti, ju navadno obravnavamo ločeno.

Osnovna pravila

  • Lastnost display določa osnovni način prikaza elementa v postavitvi strani.
  • Lastnost overflow določa, kako se obnaša vsebina, ki presega prostor elementa.
  • Lastnost visibility določa, ali je element viden, ne da bi ga nujno odstranili iz postavitve.
  • Sprememba lastnosti display lahko bistveno spremeni obnašanje že obstoječega elementa.
  • Pri primerjavi vrednosti display: none in visibility: hidden je pomembno, ali želimo ohraniti prostor elementa v postavitvi.

Pozor: Če elementu določimo display: inline, mu širine in višine navadno ne moremo uporabljati na enak način kot pri bločnih elementih. Za takšne primere je pogosto primernejša vrednost inline-block.

Najpogostejše vrednosti lastnosti display

Najpogosteje uporabljene vrednosti lastnosti display so:

Vrednost Pomen
none element ni prikazan in ne zasede prostora
block bločni element, ki se običajno začne v novi vrstici
inline vrstični element, ki teče skupaj z besedilom
inline-block element teče v vrstici, hkrati pa lahko dobi širino, višino in odmike
list-item element se obnaša kot postavka seznama
flow-root ustvari nov blokovni kontekst oblikovanja
table element se obnaša kot tabela
inline-table element se obnaša kot vrstična tabela
table-row element se obnaša kot vrstica tabele
table-cell element se obnaša kot celica tabele
flex element postane fleksibilni vsebnik
inline-flex element postane vrstični fleksibilni vsebnik
grid element postane mrežni vsebnik
inline-grid element postane vrstični mrežni vsebnik
initial lastnost dobi začetno vrednost
inherit vrednost podeduje od nadrejenega elementa

Spodnji primer pokaže, da lahko z lastnostjo display spremenimo običajno obnašanje elementov:

<p>Uporaba lastnosti display omogoči, da bosta odstavka postala vrstična elementa.</p>
<p>Ta odstavek se nadaljuje v isti vrstici.</p>
<div>Element div ni viden.</div>
<span>Element span je postal bločni element.</span>
p { display: inline; }
div { display: none; }
span { display: block; }

Uporaba lastnosti display omogoči, da bosta odstavka postala vrstična elementa.

Ta odstavek se nadaljuje v isti vrstici.

Element div ni viden.
Element span je postal bločni element.

block, inline in inline-block

Tri najpogostejše vrednosti so:

  • block: element zasede razpoložljivo širino in se začne v novi vrstici,
  • inline: element teče skupaj z besedilom in se obnaša kot del vrstice,
  • inline-block: element ostane v vrstici, vendar mu lahko določimo širino, višino in odmike.
<span class="blok-v-vrstici">Prvi element</span>
<span class="blok-v-vrstici">Drugi element</span>
<span class="blok-v-vrstici">Tretji element</span>
.blok-v-vrstici {
   display: inline-block;
   width: 120px;
   padding: 10px;
   background-color: #fccc88;
}
Prvi element Drugi element Tretji element

display: none

Vrednost display: none element popolnoma odstrani iz postavitve. Element ni viden in ne zasede prostora. To ni isto kot visibility: hidden, kjer element ostane v postavitvi, le prikazan ni.

Tabelarične vrednosti

Lastnost display omogoča tudi obnašanje elementov kot delov tabele, na primer table, table-row in table-cell. To je uporabno predvsem za razumevanje delovanja CSS, za prave podatkovne tabele pa še vedno uporabljamo HTML elemente table, tr, th in td.

<div class="tabela">
   <div class="vrstica">
      <div class="celica">A</div>
      <div class="celica">B</div>
   </div>
</div>
.tabela { display: table; }
.vrstica { display: table-row; }
.celica { display: table-cell; padding: 10px; border: 1px solid #fba517; }
A
B

Podrobnejša razlaga vrednosti flow-root

Vrednost flow-root povzroči, da element ustvari nov blokovni kontekst oblikovanja. To pomeni, da se njegova notranja postavitev obravnava kot samostojna celota.

Ta vrednost je uporabna predvsem v treh primerih:

  • kadar želimo, da element pravilno zajame plavajoče elemente, ki so v njem,
  • kadar želimo preprečiti zlivanje navpičnih zunanjih odmikov čez mejo elementa,
  • kadar želimo, da element deluje kot samostojen blok brez dodatnih pomožnih prijemov.

Pomni: Lastnost display: flow-root ne pomeni nove posebne postavitve, kot sta flex ali grid. Pomeni predvsem to, da element postane samostojnejši v običajnem blokovnem toku.

Pri starejših prijemih smo za podobne učinke pogosto uporabljali dodatne prazne elemente ali različne različice tako imenovanega clearfix. Vrednost flow-root je sodobnejša in preglednejša rešitev, kadar želimo, da starševski element pravilno objame svojo notranjo vsebino.

V spodnjem primeru je v okvirju plavajoč element. Ker ima okvir nastavitev display: flow-root, pravilno zajame tudi plavajoči element:

<div class="okvir-flow-root">
   <div class="plavajoc">slika</div>
   Besedilo teče ob plavajočem elementu. Ker ima starševski element
   lastnost display: flow-root, pravilno zajame svojo notranjo vsebino.
</div>
.okvir-flow-root {
   display: flow-root;
   border: 2px solid #fba517;
   background-color: #fef3d0;
   padding: 10px;
}

.plavajoc {
   float: left;
   width: 70px;
   height: 70px;
   margin-right: 12px;
   background-color: #fccc88;
   text-align: center;
   line-height: 70px;
}
slika
Besedilo teče ob plavajočem elementu. Ker ima starševski element lastnost display: flow-root, pravilno zajame svojo notranjo vsebino in njegov rob ostane okoli celotnega bloka.

Pozor: Vrednosti flow-root ne uporabljamo zato, ker bi hoteli “lepši videz”, ampak kadar želimo natančneje urediti obnašanje elementa v postavitvi. Če te potrebe ni, je pogosto dovolj že običajna bločna postavitev.

Lastnost overflow

Z lastnostjo overflow določimo, kako naj brskalnik prikaže vsebino, ki presega širino ali višino elementa. To je uporabno predvsem pri elementih, ki imajo določeno širino ali višino.

Vrednost Pomen
visible vsebina lahko sega čez rob elementa, privzeta vrednost
hidden presežna vsebina je odrezana
scroll prikažeta se drsnika, tudi če nista vedno potrebna
auto drsnika se prikažeta samo, če sta potrebna
clip presežna vsebina se odreže brez drsnikov
initial lastnost dobi začetno vrednost
inherit vrednost podeduje od nadrejenega elementa

Primer vsebine, ki presega višino elementa:

<div class="okvir visible">
Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo.
Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo.
Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo.
</div>
.okvir {
   width: 260px;
   height: 80px;
   padding: 10px;
   border: 1px solid #fba517;
   background-color: #fccc88;
}
.visible { overflow: visible; }
Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo. Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo. Ta vsebina je višja od elementa in sega čez njegovo spodnjo mejo.

Če želimo presežni del skriti, uporabimo overflow: hidden:

.hidden { overflow: hidden; }
Ta vsebina je višja od elementa in presežni del je skrit. Ta vsebina je višja od elementa in presežni del je skrit. Ta vsebina je višja od elementa in presežni del je skrit.

Z vrednostjo overflow: scroll dobimo drsnika:

.scroll { overflow: scroll; }
Ta vsebina je višja od elementa in brskalnik prikaže drsnika. Ta vsebina je višja od elementa in brskalnik prikaže drsnika. Ta vsebina je višja od elementa in brskalnik prikaže drsnika.

Z vrednostjo overflow: auto se drsnika prikažeta samo, če sta potrebna:

.auto { overflow: auto; }
Ta vsebina je višja od elementa in drsnik se prikaže samo, kadar je to potrebno. Ta vsebina je višja od elementa in drsnik se prikaže samo, kadar je to potrebno. Ta vsebina je višja od elementa in drsnik se prikaže samo, kadar je to potrebno.

Za natančnejši nadzor lahko uporabimo tudi lastnosti overflow-x in overflow-y, s katerima ločeno določimo vodoravno in navpično obnašanje presežne vsebine.

Lastnost visibility

Z lastnostjo visibility določimo, ali je element prikazan. Za razliko od lastnosti display: none element pri vrednosti visibility: hidden ostane v postavitvi in še vedno zaseda svoj prostor.

Vrednost Pomen
visible element je viden, privzeta vrednost
hidden element ni viden, vendar še vedno zaseda prostor
collapse uporablja se predvsem pri vrsticah in stolpcih tabel
initial lastnost dobi začetno vrednost
inherit vrednost podeduje od nadrejenega elementa

Primer razlike med visibility: hidden in navadnim prikazom:

<p>Prvi odstavek je viden.</p>
<p class="skrit">Ta odstavek ni viden, vendar še vedno zaseda prostor.</p>
<p>Tretji odstavek ostane pod skritim odstavkom.</p>
.skrit { visibility: hidden; }

Prvi odstavek je viden.

Ta odstavek ni viden, vendar še vedno zaseda prostor.

Tretji odstavek ostane pod skritim odstavkom.

Primerjava z lastnostjo display: none:

<p>Prvi odstavek je viden.</p>
<p class="odstranjen">Ta odstavek ni prikazan in ne zaseda prostora.</p>
<p>Tretji odstavek se pomakne navzgor.</p>
.odstranjen { display: none; }

Prvi odstavek je viden.

Ta odstavek ni prikazan in ne zaseda prostora.

Tretji odstavek se pomakne navzgor.

visibility: hidden je uporabna, kadar želimo element začasno skriti, vendar pri tem ohraniti postavitev strani. Kadar želimo element odstraniti tudi iz postavitve, uporabimo display: none.

Priporočila

  • Vrednost inline-block uporabi takrat, ko želiš elemente obdržati v isti vrstici, vendar jim določiti širino ali višino.
  • Vrednost flow-root uporabi, kadar želiš, da element deluje kot samostojen blok in pravilno zajame plavajoče elemente.
  • Za skrito presežno vsebino uporabi overflow: hidden ali overflow: auto, kadar je to smiselno glede na namen elementa.
  • Za začasno skrivanje elementa z ohranjanjem prostora uporabi visibility: hidden.
  • Za popolno odstranitev elementa iz prikaza in postavitve uporabi display: none.

Pogoste napake

  • Mešanje pomenov lastnosti display: none in visibility: hidden.
  • Uporaba inline, kadar bi bil zaradi širine, višine ali odmikov primernejši inline-block.
  • Pri presežni vsebini ni določeno, ali naj bo odrezana ali naj se prikaže drsnik.
  • Uporaba flow-root brez razumevanja, zakaj želimo nov blokovni kontekst oblikovanja.