DataGrid: adaptivity
Nazaj: predstavitveni pregled
1. Pregled in namen
Stanje: povsem [Live] — obnašanje zapolnjevanja podokna plus prilagodljiva skrčitev stolpcev pri prelomni točki. Referenca: DevExpress ASPxGridView „Adaptive Layout„ — v ozkih podoknih se posamezni stolpci premaknejo v razširljivo vrstico podrobnosti (odsek 8).
2. Predpogoji
- Razumljena osnovna pogodba dataGrid().
- Za recept CSS: nadzor nad obdajajočim vsebnikom lupine (
.wkq-shellali ustreznico).
3. Koncepti
„Prilagodljivo“ pri dataGrid() pomeni vodeno z vsebnikom, ne
vodeno z vidnim poljem: mreža ne pozna prelomnih točk — sledi širini
svojega podokna, ne glede na to, ali širino podokna spreminja okno
brskalnika, rob stranske vrstice, povlečen s resize, ali stanje
skrčitve.
4. Prvi koraki
/** @var helper_plugin_wkfluentui_widgets $widgets */
$widgets = plugin_load('helper', 'wkfluentui_widgets');
?>
<div class="wkq-shell">
<div class="wkq-shell__body">
<?php echo $widgets->dataGrid($columns, $rows, ['persistKey' => 'mojmodul:rezultati']); ?>
</div>
<div class="wkq-shell__statusbar"><?php echo hsc(count($rows) . ' vrstic'); ?></div>
</div>
Napačno: nastaviti overflow: auto na sami .wkq-shell namesto
na .wk-datagrid__body. Tedaj drsi cela lupina, vključno z
vrstico stanja — vrstica stanja izgine iz vidnega polja namesto da bi
ostala fiksirana (s tem je 4. sestavina spodaj brez učinka).
5. Uporaba
| Kontekst | Vzorec |
|---|---|
| Mreža v lupini podokna (predal, auxbar, vsebina modula) | pet sestavin CSS (odsek 6) na obdajajočem vsebniku |
| Mreža v ozkem podoknu z veliko stolpci | vodoravno drsenje (privzeto) ali prilagodljiva skrčitev prek $opts['adaptive'] (odsek 8) |
6. Referenca API: recept CSS „zapolni svoje podokno in se prilagodi spremembi velikosti"
Pet sestavin — vse podprte z dejansko kodo (wksqliteds/screen.css,
.wkq-shell):
| # | Sestavina | Zakaj |
|---|---|---|
| 1 | Vsebnik kot mreža CSS z minmax(0, 1fr) za prilagodljiv stolpec in vrstico | gol 1fr nikoli ne pade pod velikost min-content vsebine — široke tabele bi sicer razneslе podokno namesto drsenja znotraj njega |
| 2 | min-width: 0 na celici vsebine | otroci mreže imajo privzeto min-width: auto; šele 0 celici dovoli, da postane ožja od širine tabele |
| 3 | overflow: auto na telesu mreže (območju rezultatov), ne na strani | namizno obnašanje: aplikacija drsi navznoter, okno nikoli ne drsi vodoravno |
| 4 | Vrstica stanja kot fiksna vrstica mreže (var(--wk-shell-statusbar-h, 22px)) | ostane vidna ob vsaki spremembi velikosti/drsenju — značilnost namizne aplikacije |
| 5 | resize: horizontal + overflow: auto na območju stranske vrstice | nativna sprememba velikosti stolpcev brez motorja JS sash; podokno minmax(0,1fr) samodejno absorbira razliko |
7. Parametri, opcije in stanja
Vezava višine lupine (smernica — zaželeno): pet sestavin deluje
navpično šele, ko ima lupina sama omejitev višine — sicer vrstica
minmax(0,1fr) preprosto raste z vsebino in stran drsi čez
spodnji rob okna (resnična ugotovitev uporabnika). Zaželen, za prevajalnik
varen vzorec: okvir strani je stolpec flex z min-height: 100vh,
topbar/noga naravne višine, lupina med njima z
flex: 1 1 auto; min-height: 0 — brez calc() z mešanimi
enotami. Kot smernica, ne strogo pravilo: statično rastoči zasloni
ostajajo dovoljeni
(admin-layout → zavezujoča pravila UX).
Opozorilo: uporabljajte minmax() le z eno enoto na argument —
prevajalnik CSS DokuWiki se pri min()/calc() z mešanimi enotami
usodno sesuje za celotno spletno mesto (dokumentirano v
admin-layout).
8. Popolni primeri: prilagodljiva skrčitev stolpcev [Live]
Za mreže v ozkih podoknih (npr. mobilni auxbar, razdeljen pogled), ki naj bi izgubile posamezne stolpce namesto drsenja:
- Ključ
$opts'adaptive' => ['breakpoint' => int, 'priority' => [key => int]]: podbreakpoint(širina podokna v pikslih, merjena zResizeObservervscripts/datagrid.js) se stolpci, navedeni vpriority, skrijejo (celice glave in podatkov dobijohidden); vsaka vrstica podatkov dobi fokusirljiv gumb stikala (.wk-datagrid__detailtoggle,aria-expanded), ki razširi vrstico podrobnosti (.wk-datagrid__detail) s skritimi pari oznaka/vrednost kot<dl>— vsebina celic se pri tem prevzame kot pravi HTML, povezave ostanejo klikljive (analogija: DevExpress Adaptive Detail Row). - Skriti stolpci s tem ostanejo v celoti dostopni — vrstica podrobnosti je fokusirljiva zamenjava, ne vizualno krajšanje.
- Brez JavaScripta: vsi stolpci ostanejo vidni, mreža drsi vodoravno v
.wk-datagrid__bodykot v obnašanju [Live] — skrčitev je čista postopna nadgradnja, ne zamenjava za osnovo prilagodljivosti vsebnika.
echo $widgets->dataGrid($columns, $rows, [ 'adaptive' => ['breakpoint' => 640, 'priority' => ['info' => 1, 'status' => 2]], ]);
9. Omejitve in robni primeri
- Skrčitev pod prelomno točko hkrati skrije vse navedene prednostne stolpce (en sam prag, ne postopno merjenje širine po stolpcu) — vrstni red
prioritydoloča vrstni red v vrstici podrobnosti. - Če skrita celica vsebuje elemente z atributi
id, v razširjeni vrstici podrobnosti nastanejo klonirani duplikati teh ID-jev — takih stolpcev ne navajajte za skrčitev. - Vezava višine (odsek 7) je smernica, ne strogo pravilo — statično rastoči zasloni ostajajo dovoljeni.
10. Dostopnost in združljivost
- Z vsebnikom vodena prilagodljivost ne zahteva prilagoditve ARIA — spremeni le postavitev, ne semantike.
- Združljivost brskalnikov: osnovna podpora za CSS Grid + lastnost
resize(vsi trenutni brskalniki).
11. Odpravljanje težav
Simptom: cela stran drsi čez spodnji rob okna, čeprav bi morala mreža drseti navznoter.
Vzrok: lupina nima omejitve višine — vrstica minmax(0,1fr)
raste z vsebino (glej odsek 7).
Rešitev: uporabite vzorec vezave višine iz odseka 7
(min-height: 100vh na okviru strani, flex: 1 1 auto; min-height: 0
na lupini).
Simptom: prevajalnik CSS DokuWiki se sesuje za celotno spletno mesto, potem ko je bila prilagojena vrednost recepta CSS.
Vzrok: minmax()/calc() z mešanimi enotami (glej odsek
7, opozorilo).
Rešitev: uporabite le eno enoto na argument minmax().
12. Sorodne teme
- predstavitveni pregled — vse kategorije
- DataGrid: osnove — osnovna pogodba
dataGrid() - FluentUI: skrbniško območje podrobno — vezava višine lupine, pasti prevajalnika CSS