Mam prosty 2-kolumnowy układ ze stopką, która usuwa znaczniki z prawej i lewej div. Mój problem polega na tym, że nie mogę uzyskać stopki, aby pozostać na dole strony we wszystkich przeglądarkach. Działa, jeśli zawartość przesuwa stopkę w dół, ale nie zawsze tak jest.
css
html
footer
sticky-footer
Bill jaszczurka
źródło
źródło
Odpowiedzi:
Aby uzyskać lepką stopkę:
Zrób
<div>
zclass="wrapper"
treścią.Tuż przed zamknięciem
</div>
wwrapper
miejscu o<div class="push"></div>
.Tuż po zamknięciu
</div>
częściwrapper
umieścić<div class="footer"></div>
.źródło
Używaj jednostek CSS vh!
Prawdopodobnie najbardziej oczywistym i nieskrępowanym sposobem na obejście lepkiej stopki byłoby skorzystanie z nowych jednostek rzutni css .
Weźmy na przykład następujące proste znaczniki:
Jeśli nagłówek ma na przykład wysokość 80 pikseli, a stopka ma wysokość 40 pikseli, możemy uczynić naszą lepką stopkę za pomocą jednej reguły na div div:
Co oznacza: niech wysokość div zawartości będzie wynosić co najmniej 100% wysokości rzutni minus połączone wysokości nagłówka i stopki.
Otóż to.
Pokaż fragment kodu
... a oto jak ten sam kod działa z dużą ilością treści w div treści:
Pokaż fragment kodu
NB:
1) Wysokość nagłówka i stopki musi być znana
2) Stare wersje IE (IE8-) i Android (4.4-) nie obsługują jednostek rzutni. ( caniuse )
3) Dawno, dawno temu webkit miał problem z jednostkami rzutni w ramach reguły obliczania. Naprawdę zostało to naprawione ( patrz tutaj ), więc nie ma problemu. Jeśli jednak z jakiegoś powodu chcesz uniknąć używania kalkulatora, możesz obejść ten problem, używając ujemnych marginesów i marginesów z dopasowaniem rozmiaru pudełka -
Tak jak:
Pokaż fragment kodu
źródło
Lepka stopka z
display: flex
Rozwiązanie inspirowane lepką stopą Philipa Waltona .
Wyjaśnienie
To rozwiązanie jest ważne tylko dla :
Opiera się na
flex
wyświetlaczu , wykorzystującflex-grow
właściwość, która pozwala elementowi rosnąć w wysokości lub szerokości (gdyflow-direction
jest ustawiony na jedencolumn
lubrow
odpowiednio), aby zajmować dodatkową przestrzeń w pojemniku.Będziemy wykorzystywać również
vh
jednostkę, gdzie1vh
jest zdefiniowana jako :Dlatego wysokość
100vh
jest zwięzłym sposobem na powiedzenie elementowi, aby obejmował całą wysokość rzutni.Oto jak ustrukturyzowałbyś swoją stronę internetową:
Aby stopka przylegała do dolnej części strony, chcesz, aby przestrzeń między ciałem a stopką rosła tyle, ile potrzeba, aby przesunąć stopkę na dole strony.
Dlatego nasz układ staje się:
Realizacja
Możesz grać z nim na JSFiddle .
Dziwactwa Safari
Należy pamiętać, że Safari ma wadliwą implementację tej
flex-shrink
właściwości , która umożliwia kurczenie się elementów o więcej niż minimalna wysokość wymagana do wyświetlenia zawartości. Aby rozwiązać ten problem, trzeba będzie ustawićflex-shrink
właściwość wyraźnie 0 do.content
afooter
w powyższym przykładzie:źródło
.Site-content
element odgrywa taką samą rolę jakspacer
. To się po prostu nazywa inaczej..Site-content
ma analog.content
w tym znaczniku .. ale nieważne, poprosiłem o sprawę gcedo ma jakieś konkretne pojęcie na ten temat, nie trzeba zgadywaćMożesz użyć polecenia
position: absolute
poniżej, aby umieścić stopkę na dole strony, ale upewnij się, że w 2 kolumnach jest odpowiednia,margin-bottom
aby stopka nigdy nie była zasłonięta.źródło
0px
litery we wszystkich arkuszach stylów, które widziałem, powinny być po prostu0
.Oto rozwiązanie z jQuery, które działa jak urok. Sprawdza, czy wysokość okna jest większa niż wysokość ciała. Jeśli tak, to zmienia margines górnej części stopki, aby to zrekompensować. Testowane w Firefox, Chrome, Safari i Opera.
Jeśli stopka ma już margines (na przykład 50 pikseli), musisz zmienić ostatnią część dla:
źródło
Ustaw CSS dla
#footer
:Będziesz wtedy musiał dodać a
padding
lubmargin
na dole swojego#sidebar
i#content
dopasować wysokość#footer
lub kiedy będą się pokrywać,#footer
pokryje je.Ponadto, jeśli dobrze pamiętam, IE6 ma problem z
bottom: 0
CSS. Być może będziesz musiał użyć rozwiązania JS dla IE6 (jeśli zależy ci na IE6).źródło
Podobne rozwiązanie do @gcedo, ale bez potrzeby dodawania treści pośredniej w celu przesunięcia stopki w dół. Możemy po prostu dodać
margin-top:auto
do stopki, która zostanie przesunięta na dół strony, niezależnie od jej wysokości lub wysokości treści powyżej.źródło
.content
flex: 1 0 auto;
uczynienie go łatwym w uprawie i nie do pomieszania, alemargin-top: auto;
jest to fajna sztuczka, która wymaga stylizacji stopki, a nie „niezwiązanej”,.content
co jest miłe. Właściwie zastanawiam się, dlaczego w tym podejściu potrzebny jest flex.display:flex
go usuniesz, to nie zadziała, będziesz miał normalny przepływ elementu blokowegomargin:0 auto
element bloku środkowego) ALE nie mamy żadnego kierunku kolumny, więc nie ma marginesu auto z górnym / dolnym. Flexbox ma zarówno kierunek wiersz / kolumna;). Jest to niewielka różnica, ale margines jest również używany w flexbox do wyrównywania elementu, więc nawet w kierunku rzędu można użyć automatycznego marginesu góra / dół do wyrównania w pionie. Więcej informacji można znaleźć tutaj: w3.org/TR/css- flexbox-1 / # auto-marginesyindex.html:
main.css:
Źródło: https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/
źródło
Czasami zmagałem się z tym i zawsze uważałem, że rozwiązanie z tymi wszystkimi divami w sobie było nieuporządkowanym rozwiązaniem. Właśnie się z tym pogubiłem i osobiście odkryłem, że to działa i na pewno jest to jeden z najprostszych sposobów:
Podoba mi się to, że nie trzeba stosować dodatkowego HTML. Możesz po prostu dodać ten CSS, a następnie napisać kod HTML, jak tylko chcesz
źródło
Ponieważ rozwiązanie Grid nie zostało jeszcze przedstawione, oto tylko dwie deklaracje dla elementu nadrzędnego , jeśli weźmiemy
height: 100%
imargin: 0
za pewnik:align-content: space-between
źródło
CSS:
HTML:
To powinno załatwić sprawę, jeśli szukasz elastycznej stopki wyrównanej u dołu strony, która zawsze utrzymuje górny margines 80% wysokości rzutni.
źródło
Użyj pozycjonowania bezwzględnego i indeksu Z, aby utworzyć lepką stopkę div w dowolnej rozdzielczości, wykonując następujące czynności:
position: absolute; bottom: 0;
żądaną wysokościądiv
który będzie zawijał treśćposition: relative; min-height: 100%;
div
która jest równa wysokości plus wypełnienie stopkiz-index
stopkę większą niż kontener,div
jeśli stopka jest przyciętaOto przykład:
źródło
Na to pytanie wiele odpowiedzi, które widziałem, są niezgrabne, trudne do wdrożenia i nieefektywne, więc pomyślałem, że spróbuję i wymyślę własne rozwiązanie, które jest tylko odrobiną css i html
działa to poprzez ustawienie wysokości stopki, a następnie za pomocą css calc, aby obliczyć minimalną wysokość strony z stopką wciąż na dole, mam nadzieję, że to pomoże niektórym osobom :)
źródło
Jednym rozwiązaniem byłoby ustawienie minimalnej wysokości skrzynek. Niestety wydaje się, że nie jest dobrze obsługiwany przez IE (niespodzianka).
źródło
Żadne z tych czystych rozwiązań css nie działa poprawnie z dynamicznym zmienianiem rozmiaru treści (przynajmniej w Firefoxie i Safari), np. Jeśli masz ustawione tło w polu div kontenera, strona, a następnie tabela rozmiarów (dodając kilka wierszy) wewnątrz div, tabela może wystawać poza dolną część stylizowanego obszaru, tzn. możesz mieć połowę stołu w kolorze białym na czarnym motywie, a połowę stołu całkowicie białą, ponieważ zarówno kolor czcionki, jak i kolor tła są białe. Jest to w zasadzie niemożliwe do naprawienia na stronach z tematami.
Wielokolumnowy układ zagnieżdżonych elementów div jest brzydkim hakiem, a element 100% wysokości ciała / kontenera do przyklejania stopki to brzydszy hack.
Jedyne rozwiązanie bez skryptów, które działa na wszystkich przeglądarkach, które wypróbowałem: znacznie prostsza / krótsza tabela z thead (dla nagłówka) / tfoot (dla stopki) / tbody (td dla dowolnej liczby kolumn) i 100% wysokości. Ale to dostrzegło wady semantyczne i SEO (tfoot musi pojawić się przed innymi. Role ARIA mogą jednak pomóc przyzwoitym wyszukiwarkom).
źródło
Wiele osób umieściło tutaj odpowiedź na ten prosty problem, ale muszę dodać jedną rzecz, biorąc pod uwagę, jak byłem sfrustrowany, dopóki nie zorientowałem się, co robię źle.
Jak wspomniano, najprostszym sposobem na zrobienie tego jest…
Jednak właściwość niewymieniona w postach, prawdopodobnie dlatego, że zwykle jest domyślna, to pozycja: statyczna na znaczniku body. Pozycja względna nie będzie działać!
Mój motyw Wordpress zastąpił domyślny wygląd ciała i wprowadzał mnie w błąd przez długi czas.
źródło
Stary wątek, który znam, ale jeśli szukasz responsywnego rozwiązania, ten dodatek jQuery pomoże:
Pełny przewodnik można znaleźć tutaj: https://pixeldesigns.co.uk/blog/responsive-jquery-sticky-footer/
źródło
Stworzyłem bardzo prostą bibliotekę https://github.com/ravinderpayal/FooterJS
Jest bardzo prosty w użyciu. Po dołączeniu biblioteki wystarczy wywołać ten wiersz kodu.
Stopki można dynamicznie zmieniać, przywołując powyższą funkcję z innym parametrem / id.
Uwaga: - Nie musisz zmieniać ani dodawać żadnych CSS. Biblioteka jest dynamiczna, co oznacza, że nawet jeśli rozmiar ekranu zostanie zmieniony po załadowaniu strony, zresetuje pozycję stopki. Stworzyłem tę bibliotekę, ponieważ CSS rozwiązuje problem przez jakiś czas, ale gdy rozmiar wyświetlacza zmienia się znacząco, z pulpitu na tablet lub odwrotnie, albo nakładają się na treść, albo nie są już lepkie.
Innym rozwiązaniem są zapytania mediów CSS, ale musisz ręcznie napisać różne style CSS dla różnych rozmiarów ekranów, podczas gdy ta biblioteka działa automatycznie i jest obsługiwana przez wszystkie podstawowe przeglądarki obsługujące JavaScript.
Edytuj rozwiązanie CSS:
Teraz, jeśli wysokość wyświetlacza jest większa niż długość treści, stopka zostanie przymocowana do dołu, a jeśli nie, pojawi się automatycznie na samym końcu wyświetlacza, gdy trzeba ją przewinąć, aby ją wyświetlić.
I wydaje się lepsze rozwiązanie niż JavaScript / biblioteka.
źródło
Nie miałem wcześniej szczęścia z rozwiązaniami zaproponowanymi na tej stronie, ale potem ta mała sztuczka zadziałała. Uwzględnię to jako inne możliwe rozwiązanie.
źródło
Rozwiązanie Flexbox
Układ Flex jest preferowany dla naturalnych wysokości hedera i stopki. To elastyczne rozwiązanie jest testowane w nowoczesnych przeglądarkach i faktycznie działa :) w IE11.
Zobacz JS Fiddle .
HTML
CSS
źródło
Dla mnie najładniejszym sposobem wyświetlania (stopki) jest przyklejanie się do dołu, ale nie zakrycie przez cały czas treści:
źródło
jQuery CROSS BROWSER CUSTOM PLUGIN - $ .footerBottom ()
Lub użyj jQuery tak jak ja i ustaw wysokość stopki na
auto
lub dofix
, cokolwiek zechcesz, i tak zadziała. Ta wtyczka używa selektorów jQuery, więc aby działała, musisz dołączyć bibliotekę jQuery do swojego pliku.Oto jak uruchamiasz wtyczkę. Zaimportuj jQuery, skopiuj kod niestandardowej wtyczki jQuery i zaimportuj go po zaimportowaniu jQuery! To jest bardzo proste i podstawowe, ale ważne.
Po wykonaniu tej czynności wystarczy uruchomić następujący kod:
nie ma potrzeby umieszczania go w zdarzeniu gotowości dokumentu. Będzie działał dobrze. Ponownie obliczy pozycję stopki po załadowaniu strony i zmianie rozmiaru okna.
Oto kod wtyczki, którego nie musisz rozumieć. Po prostu wiem, jak to zaimplementować. Wykonuje pracę za Ciebie. Jeśli jednak chcesz wiedzieć, jak to działa, po prostu przejrzyj kod. Zostawiłem ci komentarze.
źródło
Rozwiązania flex działały dla mnie tak mocno, że stopka była lepka, ale niestety zmiana treści w celu użycia układu flex spowodowała zmianę niektórych układów stron, i to nie na lepsze. W końcu zadziałało dla mnie:
Mam to z odpowiedzi ctf0 na https://css-tricks.com/couple-takes-sticky-footer/
źródło
źródło
Jeśli nie chcesz, aby ustawiono pozycję i podążasz za irytującym na telefonie komórkowym, wydaje mi się, że do tej pory działało.
Wystarczy ustawić html
min-height: 100%;
iposition: relative;
, następnieposition: absolute; bottom: 0; left: 0;
na stopce. Następnie upewniłem się, że stopka jest ostatnim elementem w ciele.Daj mi znać, jeśli to nie zadziała dla nikogo innego i dlaczego. Wiem, że te nudne hacki mogą zachowywać się dziwnie w różnych okolicznościach, o których nawet nie myślałem.
źródło
Spróbuj umieścić div kontenera (z przepełnieniem: auto) wokół zawartości i paska bocznego.
Jeśli to nie zadziała, czy masz jakieś zrzuty ekranu lub przykładowe linki, w których stopka nie jest poprawnie wyświetlana?
źródło