Miałem następującą stronę (deadlink:), http://www.workingstorage.com/Sample.htm
która ma stopkę, której nie mogę ustawić na dole strony.
Chcę stopkę
- trzymać się dolnej części okna, gdy strona jest krótka, a ekran nie jest wypełniony, oraz
- pozostań na końcu dokumentu i przejdź normalnie w dół, gdy jest więcej niż zawartość ekranu (zamiast nakładania się treści).
CSS jest dziedziczony i wprawia mnie w osłupienie; Nie mogę tego odpowiednio zmienić, aby ustawić minimalną wysokość zawartości lub sprawić, że stopka zejdzie na dół.
flexbox
.Odpowiedzi:
Prostym sposobem jest, aby ciało
100%
swojej stronie, zmin-height
od100%
zbyt. Działa to dobrze, jeśli wysokość stopki się nie zmienia.Daj stopce ujemny margines na górze:
źródło
box-sizing: border-box;
od ciała [i#container
].Opracowałem dość łatwą metodę przyklejania stopki na dole, ale jako najpopularniejsze metody, musisz ją dostosować, aby dopasowała się do wysokości stopki.
ZOBACZ DEMO
Metoda Flexbox:
Poniższa metoda wykorzystuje „sztuczkę” polegającą na umieszczeniu
::after
pseudoelementu nabody
i ustawieniu jej na dokładną wysokość stopki, dzięki czemu zajmie dokładnie taką samą przestrzeń, jak stopka, więc gdy stopka zostanieabsolute
nad nią ustawiona, wyglądałoby na to, że stopka naprawdę zajmuje przestrzeń i eliminuje negatywne skutki jej bezwzględnego pozycjonowania (na przykład przeglądanie zawartości ciała)position:absolute
Metoda: (nie zezwala na dynamiczną wysokość stopki)Metoda układu tabeli:
źródło
display: table
display: table-row
display:table-cell
. Stwierdziłem jednak, że muszę dodać,body {margin-top: 0; padding-top: 0; margin-bottom: 0; padding-bottom: 0;}
aby uniknąć paska przewijania. Możesz to załatwić, dostosowując,body:after height
ale określam mój w rem, a nie w px, więc staje się to problematyczne.flexbox
Bardzo proste podejście, które działa świetnie w różnych przeglądarkach, jest następujące:
http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page
źródło
Użyłem tego do przyklejenia stopki do dołu i zadziałało to dla mnie:
HTML
To jedyna modyfikacja, którą musisz zrobić w kodzie HTML, dodaj to
div
z"allButFooter"
klasą. Zrobiłem to ze wszystkimi stronami, które były tak krótkie, wiedziałem, że stopka nie przyklei się do dołu, a także strony wystarczająco długie, że wiedziałem, że muszę przewijać. Zrobiłem to, aby zobaczyć, że działa dobrze w przypadku, gdy zawartość strony jest dynamiczna.CSS
"allButFooter"
Klasa mamin-height
wartość, która zależy od wysokości rzutni'S (100vh
oznacza 100% wysokości rzutni) i wysokość stopki, w który wiedziałem już było40px
.To wszystko, co zrobiłem i działało idealnie dla mnie. Nie próbowałem tego w każdej przeglądarce, tylko Firefox, Chrome i Edge, a wyniki były takie, jak chciałem. Stopka przykleja się do dołu i nie musisz mieszać się z indeksem Z, pozycją ani żadnymi innymi właściwościami. Pozycja każdego elementu w moim dokumencie była pozycją domyślną, nie zmieniłem jej na absolutną, stałą ani nic.
Praca z responsywnym projektem
Oto coś, co chciałbym wyjaśnić. To rozwiązanie, z tą samą stopką o wysokości 40 pikseli, nie działało tak, jak się spodziewałem, gdy pracowałem w responsywnym projekcie
Twitter-Bootstrap
. Musiałem zmodyfikować wartość, którą odejmowałem w funkcji:Jest tak prawdopodobnie dlatego, że
Twitter-Bootstrap
ma własne marginesy i wypełnienia, dlatego musiałem dostosować tę wartość.Mam nadzieję, że wam się to przyda! Przynajmniej jest to proste rozwiązanie i nie wymaga wprowadzania dużych zmian w całym dokumencie.
źródło
display: none
Dzięki. To też jest miłe i proste.position: fixed; bottom: 0
i ten. To rozwiązanie jest najlepsze, ponieważ stopka nie przykleja się do dołu, ale pozostaje na końcu przewijanej strony..footer {max-height: calc(100vh+40px); position: absolute}
. Jak to działa, powinieneś po prostu znać swój rozmiar ciała.Od IE7 możesz po prostu używać
Aby uzyskać wsparcie, zobacz caniuse .
źródło
Proste rozwiązanie, którego używam, działa z IE8 +
Podaj minimalną wysokość: 100% na html, aby jeśli zawartość była mniejsza, wówczas strona nadal zajmowała pełną wysokość portu widoku i stopki na dole strony. Gdy zawartość się powiększa, stopka przesuwa się w dół wraz z zawartością i nadal trzyma się dołu.
Demo działającego skrzypce JS: http://jsfiddle.net/3L3h64qo/2/
Css
HTML
źródło
Kolejnym naprawdę prostym rozwiązaniem jest to:
jsFiddle
Sztuką jest, aby użyć
display:table
dla całego dokumentu idisplay:table-row
zeheight:0
na stopce.Ponieważ stopka jest jedynym dzieckiem podrzędnym, które ma wyświetlacz jako
table-row
, jest renderowane na dole strony.źródło
height: 100%
100%, gdy współczynnik rzutowania wynosi 1/1 (kwadrat). Kiedy rzutnia staje się szersza (pozioma) wysokość będzie większa niż 100%, a jeśli węższa (pionowa) będzie mniejsza niż 100%. Wysokość jest proporcjonalna do szerokości okna. Próbowałem rozwiązać to za pomocą innego opakowania, ale to nie zadziałało. Ktoś dostał rozwiązanie lub przynajmniej podpowiedź?Jedną z rzeczy, na którą należy uważać, są urządzenia mobilne, ponieważ realizują one ideę widoku w „nietypowy” sposób:
http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html#//apple_ref/doc/uid/TP40006509-SW25
W związku z tym używanie
position: fixed;
(jak widziałem zalecane w innych miejscach) zazwyczaj nie jest dobrym rozwiązaniem. Oczywiście zależy to od dokładnego zachowania, którego szukasz.To, z czego korzystałem i działało dobrze na komputerach i urządzeniach mobilnych, to:
z
źródło
Bardzo proste rozwiązanie flex, które nie zakłada stałej wysokości ani zmiany położenia elementów.
HTML
CSS
Obsługa przeglądarki
Wszystkie główne przeglądarki, z wyjątkiem IE11 i niższych.
Upewnij się, że używasz Autoprefixera dla odpowiednich prefiksów.
Pokaż fragment kodu
źródło
Zrób to
Możesz także poczytać o Flex, który jest obsługiwany przez wszystkie nowoczesne przeglądarki
Aktualizacja : przeczytałem o fleksie i wypróbowałem. To zadziałało dla mnie. Mam nadzieję, że zrobi to samo dla ciebie. Oto jak zaimplementowałem. Tutaj głównym nie jest identyfikator, to div
Tutaj możesz przeczytać więcej o flex https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Pamiętaj, że nie jest obsługiwany przez starsze wersje IE.
źródło
flex-grow: 1
czegoś powyżej stopki pozwoli prawidłowo utrzymać stopkę na dole.Właśnie tutaj odpowiedziałem na podobne pytanie:
Umieść stopkę na dole strony z ustalonym nagłówkiem
Jestem całkiem nowy w tworzeniu stron internetowych i wiem, że już na nie odpowiedziano, ale jest to najłatwiejszy sposób, aby go rozwiązać i myślę, że jest jakoś inaczej. Chciałem czegoś elastycznego, ponieważ stopka mojej aplikacji internetowej ma dynamiczną wysokość, więc użyłem FlexBox i przekładki.
Zakładam
column
zachowanie naszej aplikacji w przypadku, gdy musisz dodać nagłówek, bohatera lub dowolną treść wyrównaną pionowo.Możesz grać z nim tutaj https://codepen.io/anon/pen/xmGZQL
źródło
Jest to znane jako lepka stopka. Wyszukiwania google dla niego podchodzi z dużą ilością wyników. Przyklejona stopka CSS to ta, z której korzystałem. Ale jest więcej.
Źródło tego kodu
źródło
Moja metoda jquery umieszcza stopkę na dole strony, jeśli zawartość strony jest mniejsza niż wysokość okna, lub po prostu umieszcza stopkę po treści inaczej:
Ponadto trzymanie kodu we własnej obudowie, zanim inny kod skróci czas potrzebny na zmianę położenia stopki.
źródło
Sam analizowałem ten problem. Widziałem sporo rozwiązań i każde z nich miało problemy, często związane z pewnymi magicznymi liczbami.
Korzystając z najlepszych praktyk z różnych źródeł, wymyśliłem to rozwiązanie:
http://jsfiddle.net/vfSM3/248/
Chodziło mi o to, aby główna zawartość przewijała stopkę i nagłówek w zielonym obszarze.
oto prosty css:
źródło
W ten sposób rozwiązałem ten sam problem
źródło
To działa dobrze
źródło
Po prostu dostosuj sekcję stopki
źródło
oto moje dwa centy. W porównaniu do innych rozwiązań nie trzeba dodawać dodatkowych pojemników. Dlatego to rozwiązanie jest nieco bardziej eleganckie. Poniżej przykładu kodu wyjaśnię, dlaczego to działa.
Pierwszą rzeczą, którą robimy, jest uczynienie największego kontenera (html) 100%. Strona HTML jest tak duża jak sama strona. Następnie ustawiamy wysokość ciała, może ona być większa niż 100% tagu HTML, ale powinna być co najmniej tak duża, dlatego używamy minimalnej wysokości 100%.
Sprawiamy również, że ciało jest względne. Względne oznacza, że możesz przesuwać element bloku wokół krewnego z jego pierwotnej pozycji. Jednak nie używamy tego tutaj. Ponieważ krewny ma drugie zastosowanie. Każdy element bezwzględny jest albo bezwzględny dla katalogu głównego (html), albo dla pierwszego względnego rodzica / dziadka. Właśnie tego chcemy, chcemy, aby stopka była absolutna w stosunku do ciała, a mianowicie do dołu.
Ostatnim krokiem jest ustawienie stopki na wartość bezwzględną i dolną: 0, która przesuwa ją na dół pierwszego względnego rodzica / dziadka (oczywiście).
Teraz nadal mamy jeden problem do rozwiązania, gdy wypełniamy całą stronę, treść przechodzi pod stopkę. Dlaczego? cóż, ponieważ stopka nie znajduje się już w „przepływie HTML”, ponieważ jest bezwzględna. Jak to naprawić? Dodamy do ciała wyściółkę. Dzięki temu ciało jest większe niż jego zawartość.
Mam nadzieję, że wyjaśniłem wam.
źródło
Dynamiczna jedna linijka za pomocą jQuery
Wszystkie metody CSS, z którymi się spotkałem, są zbyt sztywne. Ponadto ustawienie stopki na
fixed
nie jest opcją, jeśli nie jest to częścią projektu.Testowane na:
Zakładając ten układ:
Użyj następującej funkcji jQuery:
Co to robi jest ustawić
min-height
na#content
na wysokości okna - wysokość stopki , co kiedykolwiek, że być może w tym czasie.Ponieważ użyliśmy tej opcji
min-height
, jeśli#content
wysokość przekracza wysokość okna , funkcja ulega łagodnie obniżeniu i nie ma żadnego wpływu, ponieważ nie jest potrzebna.Zobacz to w akcji:
Ten sam fragment kodu w JsFiddle
Premia:
Możemy pójść o krok dalej i dostosować tę funkcję do dynamicznego zmieniania wysokości przeglądarki w następujący sposób:
źródło
Możesz to zrobić
źródło
Wystarczy ustawić html, body i inne wiersze oprócz stopki na 100%. na przykład
css staje się
źródło
źródło
Co z tym:
źródło
Użyłem wielu moich projektów i nigdy nie dostałem żadnego problemu :)
w celach informacyjnych kod jest fragmentem
źródło