IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Rolovací "div" s umiestnenim na spodku stranky

V předchozím kvízu, Online test znalostí HTML a CSS, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Diana
Člen
Avatar
Diana:9.2.2023 10:00

Snazim sa spravit rolovaci div, kde si budem moct umiestnit ine elementy. Chcela by som, aby sa tento div roloval len v oblasti vysky obsahu stranky a zaroven aby sa pri rolovani lepil na spodnu cast obrazovky (a aby pri zmenseni okna prehliadaca nemenil svoju poziciu vlavo ani vpravo).

Zkusil jsem: V podstate som skusala rozne sposoby s poziciou fixed, kde sa element lepi naspodok stranky v pravej spodnej casti prehliadaca, co by som nechcela. Taktiez s poziciou sticky, co mam aktualne na stranke, ale u toho mi nevyhovuje, ze sa element lepi vzdy navrch okna prehliadaca, i ked mu mozem nastavit odstup. Pozicia fixed mi robi problem v tom, ze sa rolovaci div sice lepi pri rolovani naspodok obrazovky, ale pri zmenseni okna sa straca jeho pozicia z lava a z prava, cize sa tymi smermi posuva. Neviem, ci to mam riesit percentualne, ale kazdopadne mi to nejde.

CSS:

.kontajner {
        display: grid;
        grid-template-areas: "hlavicka hlavicka hlavicka hlavicka"
        "lavy-horny-box stredny-box rolovaci-box pravy-horny-box"
        "lavy-dolny-box stredny-box rolovaci-box pravy-dolny-box"
        "pata pata pata pata";
        grid-template-columns: minmax(90px, auto) 820px 90px minmax(0px, auto);
        grid-template-rows: 900px minmax(305px, auto) minmax(190px, auto) 400px;
        gap: 0;
        background: url(../img/sablona/pozadie.jpg) repeat-y center;
}
/*
.kontajner > div {
        border: 1px dashed #888;
}
*/
.hlavicka {
        grid-area: hlavicka;
        background: url(../img/sablona/hlavicka.jpg) no-repeat center;
}
.lavy-horny-box {
        grid-area: lavy-horny-box;
        background: url(../img/sablona/vlavo-hore.jpg) no-repeat top right;
}
.stredny-box {
        grid-area: stredny-box;
        background: url(../img/sablona/stred-hore.jpg) no-repeat center top;
}
.rolovaci-box {
        grid-area: rolovaci-box;
        background: url(../img/sablona/sticky-hore.jpg) no-repeat top;
}
.pravy-horny-box {
        grid-area: pravy-horny-box;
        background: url(../img/sablona/vpravo-hore.jpg) no-repeat top left;
}
.lavy-dolny-box {
        grid-area: lavy-dolny-box;
        background: url(../img/sablona/vlavo-dole.jpg) no-repeat bottom right;
}
.pravy-dolny-box {
        grid-area: pravy-dolny-box;
        background: url(../img/sablona/vpravo-dole.jpg) no-repeat bottom left;
}
.pata {
        grid-area: pata;
        background: url(../img/sablona/pata.jpg) no-repeat center;
}

.sticky {
        display: flex;
        justify-content: flex-end;
        align-items: center;
        position: -webkit-sticky;
        position: sticky;
        top: 0;
        width: 100%;
        height: 100px;
        margin-top: 250px;
        border: 1px solid yellow;
}
.sticky:hover {
        cursor: pointer;
}

HTML:

<div class="kontajner">
        <div class="hlavicka">hlavicka</div>
        <div class="lavy-horny-box"></div>
        <div class="stredny-box">stredny-box s obsahom</div>
        <div class="rolovaci-box">
                <div class="sticky"></div>
        </div>
        <div class="pravy-horny-box"></div>
        <div class="lavy-dolny-box"></div>
        <div class="pravy-dolny-box"></div>
        <div class="pata">pata</div>
</div>

Chci docílit: Test: Test (obsah, rolovaci box a rolovaci div som vyznacila farebne okrajmi)

 
Odpovědět
9.2.2023 10:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.2.2023 10:43

Ja bych pouzil fixed, bottom nebo margin-bottom. fixed funguje tak, ze ignoruje predesle styly a pozice. Takze, pri zmene okna se to obvykle rozsype, pokud mu nedas pozici zleva. Nebo mozna margin-left:auto, margin:right:auto (centrovani).
Nevim, zda by pomohlo dat ten fixed do bloku s position:relative. Myslim, ze ne, ze fixed je vuci cele strance.
Zkratka, fixed se pouziva bud jako pruh nebo presna pozice (vetsinou left nebo right:0 + top nenulove nebo bottom nenulove).

Muzes pro centrovani pouzit fintu s 50% pozici. left:50%; width:300px; margin-left:-150px; (polovina sirky vnitrku).

Tusim, ze pro pretekani obsahu je nutna block s position:relative a v nem blok s vyskou + overflow. Nebo, tak nejak. na jakpsatweb.cz v css, priklady to tam nekde je.
https://www.jakpsatweb.cz/…ss-orez.html
Tim chci rici, ze s fixed jsem to nikdy nezkousel pouzivat.

Sticky, to nepouzival, ale, to mozna funguje dobre pro zahlavi tabulky, aby jsi ho neztratila. pri vetsi tabulce. Jakoze mas tabulku, kdyz zarolujes, tak mas pryc zahlavi a nevis, ktery sloupec je ktery. Tak, to by mohlo resit sticky, ze to zahlavi bude rolovat s tabulkou. Ale, na mne je to prilis nove, ja to resival pres fixed :)

Editováno 9.2.2023 10:44
 
Nahoru Odpovědět
9.2.2023 10:43
Avatar
Diana
Člen
Avatar
Odpovídá na Peter Mlich
Diana:9.2.2023 11:41

pri position: fixed; mozem nastavit bottom: 0; a margin-bottom: 400px; co by mi vyhovovalo, nakolko div bude stale odspodu umiestneny na rovnakej pozicii aj pri zmensenom okne prehliadaca, tu mi treba doriesit len to posuvanie div-u z vrchu a z lavej a pravej strany, aby sa mi posuval len vo vyske obsahu.

pozerala som takyto priklad, kde sa rolovaci div pohybuje len vo vyske obsahu, ale tam to je riesene nejakym obtekanim z lava a chova sa to responzivne, z toho by sa nedalo vychadzat ?

Priklad

 
Nahoru Odpovědět
9.2.2023 11:41
Avatar
Diana
Člen
Avatar
Odpovídá na Diana
Diana:9.2.2023 11:47

ja mam pevnu vysku hlavicky 900px a pevnu vysku päty 400px, neviem, ci je tu mozne pouzit calc percentualne na vyratanie vysky minus vsetky prvky s pevnou poziciou

 
Nahoru Odpovědět
9.2.2023 11:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.2.2023 12:47

Calc nepouzivam, ale asi by to slo.
U nas pouzivame redakcni system postaveny na bootstrapu. Asi je tam nejaky js plugin, ktery dela to, ze posouva hlavicku a zmensi ji, kdyz je niz nez nahore. Pravdepodobne to kluci nekde vygooglovali :) Ale, nefunguji nam spravne kotvy. Mam pocit, ze by to mohlo byt tim menu. Ale, nemam to nastarost :) Ja bych mel k webu asi 1000 pripominek a oprav celeho programu. Poslali jsme asi 100. do dneska se vyresilo 10. A sam tam pristup nemam. Prej maji cely redakcni system v databazi, takze oprava by byla narocna. To byl zas cisi genialni napad :) https://www.slu.cz/fpf/cz/
Ja jen, ze 900px hlavicka je dost narocny pocin a zobrazovat to treba na mobilu muze byt docela problem. Resp, uzivateli misto obsahu nabidnes, ze musi rolovat :)

 
Nahoru Odpovědět
9.2.2023 12:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.2.2023 12:53

V podstate, fixed jsem pouzival jen tak, ze jsem si udelal prostor pomoci marginu nebo padingu a na tom mel fixovany objekt. Ale, tak to asi resis taky :)

------------------ fixovany div----|
------------------..................|
|.bile misto....|...................|
|---------------|------------------
|.text..........|
|.text..........|
 
Nahoru Odpovědět
9.2.2023 12:53
Avatar
Diana
Člen
Avatar
Odpovídá na Peter Mlich
Diana:9.2.2023 13:30

hlavicka stranky je robustna, to je fakt, ale kedze je to stranka o hre, tak ta grafika udrzuje mysticku atmosferu nazvu klubu, pri osobnej stranke by som samozrejme takto neblaznila :-) v podstate position: sticky riesi u mna to, ze element je v danom boxe na relativnej pozicii a odtial sa mi nepohne nikam inam, len uz nechapem v dnesnej dobe to, k comu je tisic vlastnosti na tisic elementov v ramci pozicovania a nie je iba jeden element s viacerymi vlastnostami, napr. position: a k tomu vsetky vlastnosti, ci je to fixed, absolute, relative atd ? a takto je nutne vymyslat vselijake CSS tricks uplne zbytocne

 
Nahoru Odpovědět
9.2.2023 13:30
Avatar
Diana
Člen
Avatar
Diana:9.2.2023 13:38

ale chcem tento moj problem s rolovacim div doriesit spravne, ako som pisala na zaciatku vlakna, teraz mi je prakticky jedno, ze som zbytocne strihala grafiku znovu, aby som mala osobitne box pre rolovaci div a pritom budem napr. musiet pouzit position: fixed, ide mi o spravny vysledok

 
Nahoru Odpovědět
9.2.2023 13:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.2.2023 9:27

Jo, ty chces asi docilit to, aby fixed position bylo jen ve vybrane oblasti. Obavam se, ze na to neni css stavene :) Ono je hrozne tezke te pochopit a ten kod :) Zluty ramecek na bilem pozadi je fakt skvele zvyrazneni toho sticky divu. Podbarvil jsem si cely blok background-color, radeji :)
google = css position fixed to a location within an area

Ale, ty ten div preci muzes umisti Mimo tu oblast a dopozicovat si to. A pridat z-index na prekryti.

a<br>
b<br>
c<br>

<div style="width:100px; height:100px; border:2px solid #f00;">
  <div style="width:100px; height:100px; background: #fcf; overflow-y:scroll; overflow-x:none;">text<br>q<br>w<br>e<br>e<br>e<br>e<br></div>
  <div style="width:100px; height:30px;  background: #ffc; position:relative; top:-30px;">text</div>
</div>

Nevyhoda je, ze ti na tom nepujde scrolovat s tim textem. Leda, to dat do pozadi a pak na to zas nepujde klikat :) A to uz by pak mohlo byt jako obrazek na pozadi.
https://developer.mozilla.org/…d-attachment

 
Nahoru Odpovědět
10.2.2023 9:27
Avatar
Diana
Člen
Avatar
Odpovídá na Peter Mlich
Diana:10.2.2023 10:33

to mi je jasne, ze pozicia fixed alebo absolute moze byt volana z ktorejkolvek casti body, ja som si len vyhradila mriezkou oblast, v ktorej sa bude rolovaci div pohybovat, pretoze pre pripad pozicie sticky je to idealne .. riesit to mozem len dvomi sposobmi, bud sticky alebo fixed .. obsah ako taky sa nebude scrollovat posuvnou listou, aby som to teda upresnila uplne a jedine, co sa bude scrollovat, je scrollovaci div s elementom (ornamentove graficke tlacidlo)

dala som to plnymi farbami, aby to bolo viditelne, obsah je teda zeleny, vyrez, v ktorom sa bude pohybovat scrollovaci div je fuchsia a samotny srollovaci div je zlty

Test (vycistit cache prehliadaca)

Editováno 10.2.2023 10:34
 
Nahoru Odpovědět
10.2.2023 10:33
Avatar
Diana
Člen
Avatar
Odpovídá na Diana
Diana:10.2.2023 10:47

asi sme sa nepochopili spravne, scrollovaci div (zlty) sa musi pohybovat v scrollovacej oblasti (fuchsia) a pritom by som chcela, aby bol stale prilepeny v spodnej casti scrollovacej oblasti a roloval sa len v nej a aby pri zmenseni okna prehliadaca nevybocoval do lavej alebo pravej strany :-)

 
Nahoru Odpovědět
10.2.2023 10:47
Avatar
Diana
Člen
Avatar
Diana:10.2.2023 11:08

pozerala som uz desiatky rieseni, kde to kazdy ospevoval ako to spravne riesenie a pritom, ked som zmensila okno prehliadaca, tak sa rolovacie divy pohybovali do stran, cize sa percentualne neprisposovali rozliseniu obrazovky, co je nespravne .. videla som aj nejake JS riesenia, ale JS neovladam, to vies dobre, ale touto formou by sa urcite dali vypocitat vzdialenosti od scrollovacieho divu, aby sa prisposoval rozliseniu obrazovky a neuhybal do stran a pohyboval sa pri scrollovaci len v pozadovanej oblasti, pretoze ja mam nastavenu pevnu vysku hlavicky a päty a pevnu sirku obsahu (bocne strany nemaju pevnu sirku)

 
Nahoru Odpovědět
10.2.2023 11:08
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.2.2023 12:50

neco z tohoto by neslo pouzit?
https://elad.medium.com/…54cd01dc2d46

 
Nahoru Odpovědět
10.2.2023 12:50
Avatar
Diana
Člen
Avatar
Odpovídá na Peter Mlich
Diana:10.2.2023 13:34

toto je presne taky isty pripad, ako mam ja, je to funkcne, pretoze sa element s position: sticky; nachadza v rolovacom boxe, je lepivy top:0; a teda sa scrolluje .. no a to je ten problem, ze funguje prave len s poziciou hore pod nadradenym elementom .. snazila som sa najst nieco o tom, ci je mozne ho nejako prinutit chovat sa podla kalkulacie vysky, ale asi nie .. premyslala som nad tym, ze by som nad neho dala nadradeny element, akysi posuvac, ktory by menil svoju vysku podla rozlisenia obrazovky a tym padom by sa sticky choval podla neho, pretoze by sa na neho stale lepil so svojou urcenou poziciou top:0; .. ale to je prave ten problem, ze neviem prist na to, ako zariadit taketo chovanie nadradeneho div-u, ktory by ho podla vysky posuval

Editováno 10.2.2023 13:35
 
Nahoru Odpovědět
10.2.2023 13:34
Avatar
Diana
Člen
Avatar
Diana:10.2.2023 14:11

ked si to predstavim, tak neviem, ci je to vobec mozne, pretoze ak by nadradeny kontajner bol umiestneny relativne v rolovacom boxe a mal by zatlacit element so sticky poziciou do spodnej casti zarovno s obsahom, ako by ho potom uvolnoval, aby sa scrolloval nahor ? .. je nieco take mozne, aby nadradeny kontajner stracal svoju vysku alebo margin a padding podla vypocitanej vysky pri scrollovani ?

Editováno 10.2.2023 14:12
 
Nahoru Odpovědět
10.2.2023 14:11
Avatar
Diana
Člen
Avatar
Diana:11.2.2023 18:46

Nakoniec som prisla na to, ze riesenie je v mojom pripade uplne jednoduche a ze je mozne prinutit sticky scrollovat s prilepenou poziciou v spodnej casti urciteho vyrezu sablony.

  1. Nadradeny element musi mat nastavenia: display: flex; a position: relative; (ak uz sam o sebe ma relativnu poziciu, tuto vlastnost je zbytocne duplikovat)
  2. Box sticky musi mat nastavenia: position: sticky; align-self: flex-end; bottom: 0;

CSS:

.parent {
        position: relative;
        display: flex;
}

.sticky {
        align-self: flex-end;
        position: -webkit-sticky; /*prehliadac Safari*/
        position: sticky;
        bottom: 0;
        width: 100%;
        height: 100px;
}

v mojom pripade bol v HTML parent-om:

<div class="rolovaci-box">
 
Nahoru Odpovědět
11.2.2023 18:46
Avatar
Diana
Člen
Avatar
Diana:11.2.2023 18:53

Výsledný test (Zmazat cache prehliadaca)

 
Nahoru Odpovědět
11.2.2023 18:53
Avatar
Diana
Člen
Avatar
Diana:11.2.2023 19:50

Spracovala som jeden komplexny priklad, kde je vidiet, ako pracuje sticky prilepeny v lavom paneli nahor a v pravom paneli nadol.

<!DOCTYPE html>
<head>
        <title>Sticky top and bottom</title>
<style>
html, body {height: 100%; margin: 0;}

/* Zakladna sablona stranky */

.container {
        display: grid;
        width: 100%;
        height: 100%;
        grid-template-areas: "header header header"
        "left main right"
        "footer footer footer";
        grid-template-columns: 250px minmax(500px, 1fr) 250px;
        grid-template-rows: 100px 1fr 100px;
        gap: 0;
}
.header {grid-area: header; background: lightblue;}
.left {grid-area: left; background: green;}
.main {grid-area: main;}
.right {grid-area: right; display: flex; background: green;}
.footer {grid-area: footer; background: lightblue;}

/* Doplnkove elementy */

.content {
        width: 100%;
        height: 300vh;
}
.sticky-top {
        position: sticky;
        width: 100%;
        height: 200px;
        top: 0;
        background: yellow;
}
.sticky-bottom {
        position: sticky;
        align-self: flex-end;
        width: 100%;
        height: 200px;
        bottom: 0;
        background: yellow;
}
</style>

</head>

<body>

<div class="container">
        <div class="header">header</div>
        <div class="left">
                <div class="sticky-top">Sticky TOP</div>
        </div>
        <div class="main">
                <div class="content">content</div>
        </div>
        <div class="right">
                <div class="sticky-bottom">Sticky BOTTOM</div>
        </div>
        <div class="footer">footer</div>
</div>

</body>
</html>
  • v pripade, ak potrebujete vnorit elementy do seba, napr. do praveho panelu budete musiet vlozit dalsi element obalovaci-div a az do neho sticky, musite obalovaciemu div-u nastavit vlastnosti parent-u (position: relative; display: flex;), ako som to uviedla vyssie a priradit mu este width: 100%; height: 100%; aby sa jeho sirka a vyska dorovnala sirke a vyske .right (praveho panelu)
  • ak pouzivate sablonu, kde content (obsah) obtekaju sidebar-y (bocne panely) a do niektoreho z nich budete chciet umiestnit sticky tak, aby sa scrolloval prilepeny nadol, urcite sa vam to tymto sposobom nepodari, pretoze vyska sidebar-ov nebude nastavena na vysku obsahu, ktory by ho subezne roztahoval na vysku (preto je dolezite si najskor premysliet, ako bude cela sablona zostavena)
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
11.2.2023 19:50
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.2.2023 9:50

Ten tvuj posledni test se mi chova uplne stejne jako ty priklady, co jsem posilal ten odkaz (kdyz se tam klikne na jejich priklad, tak se spusti), treba ten top nebo bottom. Jakoze nevidim ten maly rozdil, o ktery tu bojujes od zacatku. Pouzivas Firefox nebo jiny prohlizec? Ja mam zkusenosti, ze jine prohlizece obvykle nevykresluji obsah spravne.
V cem je presne ten rozdil?

Editováno 13.2.2023 9:52
 
Nahoru Odpovědět
13.2.2023 9:50
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.2.2023 9:56

Ale, vzdycky by to slo resit javascriptem a pozicovanim. Jen by to bylo dost krkolomne. Musela by se podchytit zmena toho okna a dalsi veci.
Vim, ze kdysi nekdo chtel resit posuvnik na prave strane. Ten normalni mu nevyhovoval, tak chtel vlastni. Tak, to by se dalo asi vygooglovat.
js css scroller with own image

 
Nahoru Odpovědět
13.2.2023 9:56
Avatar
Diana
Člen
Avatar
Odpovídá na Peter Mlich
Diana:13.2.2023 10:58

na graficke posuvniky s JS mam odlozene nejake skripty, ale tie riesia rolovaciu listu na rolovanie okna s obsahom a pokial sa da pouzit ciste CSS hocikde pri tvorbe stranky, tak dam tomu prednost

 
Nahoru Odpovědět
13.2.2023 10:58
Avatar
Diana
Člen
Avatar
Diana:13.2.2023 11:05

s tym top a bottom v mojom priklade je rozdiel, tie tvoje priklady riesili tie iste pozicie, ale v obsahu a pokial do obsahu vlozis sticky, tak tam je to uplne jednoduche, lebo naspodok stranky ho prilepi samotny obsah, ktory ho zatlaca naspodok neustale, u mna bol rozdiel v tom, ze postranny pravy box so sticky musel reagovat na ten dynamicky obsah a nenachadzal sa v nom

 
Nahoru Odpovědět
13.2.2023 11:05
Avatar
Diana
Člen
Avatar
Diana:13.2.2023 11:12

Peter, aj tak dakujem, lebo tu sa prinutim viac premyslat, ked mi navrhujes nejake riesenia, doma sa nemam s kym poradit :-)

 
Nahoru Odpovědět
13.2.2023 11:12
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.2.2023 12:28

Podle mne, si stranku delas zbytecne komplikovanou :) Ja bych pouzil BT. Upravil si jeho pridanym grafiku a bylo by. Vyuzil bych prvky, co jdou s pomoci BT vyskladat. Par prikladu spesl veci se da vygooglovat. Driv, kdyz BT nebylo, jsem to delal vsechno rucne. A tez kombinoval. Ale, to je moc pracne. Proc vymyslet spesl vec, kterou mas na strance jen 1x? Jestli to radeji nejde prizpusobit na to ostatni. Mne osobne rolovaci miniboxy moc nelakaji.
Ale, chapu, treba, ze si chces udelat na stranku neco jako hru pro navstevniky. Kolega tam chtel dat Barta jezdiciho na skejtu. A byl desne zklamany, kdyz jsem mu rekl, ze mu to tam klidne dam, jestli neco takoveho najdu nebo udelam, ale, ze zrovna bart je zatizeny licencemi :)
Nebo, nekde jsem mel script na snezeni, magickou hulku (za kurzorem behaji hvezdicky). Ale, to je, podle mne zcela zbytecne na webku. To spis do nejake hry :)

 
Nahoru Odpovědět
13.2.2023 12:28
Avatar
Diana
Člen
Avatar
Diana:13.2.2023 12:47

ja som to rolovacie tlacitko robila kvoli par strankam, kde ich obsah bude dlhsi a je to unavne rolovat to prstom na niekolkokrat, ked sa chces hned dostat k menu a ten bootstrap mam v hlave, neboj, k nemu sa dostanem tiez :-) chcem ale najskor dorobit obsah a az potom sa vrhnem na upravy, naskor som riesila nacitavanie stranky pri tom mnozstve grafiky, co tam bude, lebo je to stranka o hre a tam treba dost veci ukazat presne ako vyzeraju

 
Nahoru Odpovědět
13.2.2023 12:47
Avatar
Diana
Člen
Avatar
Diana:13.2.2023 13:12

Peter, nechcem kvoli tomu zakladat dalsie vlakno, ale chcem sa opytat, co u Firefox-u pridava akysi vnutorny tien do tlacitok na vyber farieb ? Ked nastavim obrazok pozadia cez CSS, tak je to v pohode, ale ked vlozim obrazok v HTML, tak Firefox spravi vnutorny tien. Naskor som myslela, ze je to okraj, ale zväcsila som si to a pozeram, ze je to vnutri. Pozerala som vlastnost box-shadow, ale asi to nebude ono. Okraje obrazka mam nastavene na border: none; - je tam potrebne este specifikovat nieco pre mozillu alebo webkit ?

Demo

 
Nahoru Odpovědět
13.2.2023 13:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 26 zpráv z 26.