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
displaydoloča osnovni način prikaza elementa v postavitvi strani. - Lastnost
overflowdoloča, kako se obnaša vsebina, ki presega prostor elementa. - Lastnost
visibilitydoloča, ali je element viden, ne da bi ga nujno odstranili iz postavitve. - Sprememba lastnosti
displaylahko bistveno spremeni obnašanje že obstoječega elementa. - Pri primerjavi vrednosti
display: noneinvisibility: hiddenje 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 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;
}
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; }
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;
}
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; }
Če želimo presežni del skriti, uporabimo overflow: hidden:
.hidden { overflow: hidden; }
Z vrednostjo overflow: scroll dobimo drsnika:
.scroll { overflow: scroll; }
Z vrednostjo overflow: auto se drsnika prikažeta samo, če sta potrebna:
.auto { overflow: auto; }
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.
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.
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-blockuporabi takrat, ko želiš elemente obdržati v isti vrstici, vendar jim določiti širino ali višino. - Vrednost
flow-rootuporabi, kadar želiš, da element deluje kot samostojen blok in pravilno zajame plavajoče elemente. - Za skrito presežno vsebino uporabi
overflow: hiddenalioverflow: 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: noneinvisibility: hidden. - Uporaba
inline, kadar bi bil zaradi širine, višine ali odmikov primernejšiinline-block. - Pri presežni vsebini ni določeno, ali naj bo odrezana ali naj se prikaže drsnik.
- Uporaba
flow-rootbrez razumevanja, zakaj želimo nov blokovni kontekst oblikovanja.