У меня есть простой 2-колоночный макет с нижним колонтитулом, который очищает правый и левый div в моей разметке. Моя проблема в том, что я не могу заставить нижний колонтитул оставаться внизу страницы во всех браузерах. Это работает, если контент сдвигает нижний колонтитул, но это не всегда так.
css
html
footer
sticky-footer
Билл Ящерица
источник
источник
Ответы:
Чтобы получить липкий нижний колонтитул:
Имейте
<div>
сclass="wrapper"
для вашего контента.Прямо перед тем закрытием
</div>
наwrapper
месте в<div class="push"></div>
.Право после закрытия
</div>
наwrapper
месте в<div class="footer"></div>
.источник
Используйте CSS VH единиц!
Вероятно, самый очевидный и не хакерский способ сделать липкий нижний колонтитул - использовать новые единицы просмотра css .
Возьмем для примера следующую простую разметку:
Если заголовок имеет высоту 80px, а нижний колонтитул - 40px, то мы можем сделать наш липкий нижний колонтитул с одним единственным правилом для содержимого div:
Это означает: пусть высота содержимого div будет составлять не менее 100% от высоты области просмотра минус объединенная высота верхнего и нижнего колонтитула.
Вот и все.
Показать фрагмент кода
... и вот как работает тот же код с большим количеством контента в div контента:
Показать фрагмент кода
NB:
1) Высота верхнего и нижнего колонтитула должна быть известна
2) Старые версии IE (IE8-) и Android (4.4-) не поддерживают единицы просмотра. ( caniuse )
3) Давным-давно у webkit возникла проблема с единицами просмотра в рамках правила calc. Это действительно было исправлено ( см. Здесь ), поэтому там нет никаких проблем. Однако, если вы по какой-то причине хотите избежать использования calc, вы можете обойти это, используя отрицательные поля и отступы с изменением размера блока -
Вот так:
Показать фрагмент кода
источник
Липкий нижний колонтитул с
display: flex
Решение вдохновлено липким нижним колонтитулом Филиппа Уолтона .
объяснение
Это решение действительно только для :
Он основан на
flex
отображении , используяflex-grow
свойство, которое позволяет элементу увеличиваться либо по высоте, либо по ширине (когда дляflow-direction
него установлено одноcolumn
илиrow
соответственно), чтобы занимать дополнительное пространство в контейнере.Мы будем рычаги также и
vh
блок, в котором1vh
будет определен как :Поэтому высота
100vh
это краткий способ указать элементу, чтобы он охватывал всю высоту области просмотра.Вот как вы бы структурировали свою веб-страницу:
Чтобы нижний колонтитул прилипал к нижней части страницы, необходимо, чтобы пространство между телом и нижним колонтитулом увеличивалось настолько, насколько необходимо, чтобы толкнуть нижний колонтитул внизу страницы.
Поэтому наш макет становится:
Реализация
Вы можете играть с ним в JSFiddle .
Причуды Сафари
Имейте в виду
flex-shrink
, что Safari имеет некорректную реализацию свойства , которая позволяет элементам сжиматься больше минимальной высоты, необходимой для отображения содержимого. Чтобы устранить эту проблему, вам нужно будетflex-shrink
явно установить для свойства значение 0 для параметра.content
andfooter
в приведенном выше примере:источник
.Site-content
элемент играет ту же роль, что иspacer
. Это просто называется по-другому..Site-content
у меня есть аналог.content
в этой разметке ... но не берите в голову, я спросил, есть ли у gcedo какое-то конкретное представление об этом, не нужно догадыватьсяВы можете использовать
position: absolute
следующую команду, чтобы поместить нижний колонтитул внизу страницы, но затем убедитесь, что ваши 2 столбца имеют соответствующие значения,margin-bottom
чтобы они никогда не перекрывались нижним колонтитулом.источник
0px
s во всех таблицах стилей, которые я видел, должны быть справедливыми0
.Вот решение с JQuery, которое работает как шарм. Он проверяет, больше ли высота окна, чем высота тела. Если это так, то он меняет верхний колонтитул нижнего колонтитула для компенсации. Протестировано в Firefox, Chrome, Safari и Opera.
Если у вашего нижнего колонтитула уже есть поле с полями (например, 50 пикселей), вам нужно изменить последнюю часть для:
источник
Установите CSS для
#footer
:Затем вам нужно будет добавить
padding
илиmargin
в нижней части вашего#sidebar
и#content
в соответствии с высотой#footer
или когда они перекрываются,#footer
будут покрывать их.Кроме того, если я правильно помню, у IE6 есть проблема с
bottom: 0
CSS. Возможно, вам придется использовать решение JS для IE6 (если вам небезразлично IE6).источник
Решение, похожее на @gcedo, но без добавления промежуточного содержимого, чтобы сдвинуть нижний колонтитул. Мы можем просто добавить
margin-top:auto
нижний колонтитул, и он будет перемещен в конец страницы независимо от его высоты или высоты содержимого выше.источник
.content
flex: 1 0 auto;
чтобы сделать его растущим и не сверкающим, ноmargin-top: auto;
это хороший трюк, который включает в себя стилизацию нижнего колонтитула, а не «не связанные»,.content
что приятно. На самом деле, я удивляюсь, почему в этом подходе необходим flex ...display:flex
его, он не будет работать, у вас будет нормальный поток элементов блокаmargin:0 auto
элементом центра блока), НО у нас нет направления столбца, поэтому поля нет авто с верхом / низом. Flexbox имеет как направление строки / столбца;). Это небольшая разница, но в flexbox также используется поле для выравнивания элемента, поэтому даже в пределах направления строки вы можете использовать поле margin-top / bottom auto для выравнивания по вертикали. Подробнее можно прочитать здесь: w3.org/TR/css- flexbox-1 / # auto-marginsindex.html:
main.css:
Источник: https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/
источник
Я сам иногда боролся с этим, и я всегда обнаруживал, что решение со всеми этими элементами внутри друг друга было грязным решением. Я просто немного повозился с этим и лично узнал, что это работает, и это, безусловно, один из самых простых способов:
Что мне нравится в этом, так это то, что не нужно применять дополнительный HTML. Вы можете просто добавить этот CSS, а затем написать свой HTML как всегда
источник
Поскольку решение Grid еще не было представлено, оно здесь, с двумя декларациями для родительского элемента , если мы принимаем
height: 100%
иmargin: 0
как должное:align-content: space-between
источник
CSS:
HTML:
Это должно сработать, если вы ищете отзывчивый нижний колонтитул, выровненный внизу страницы, который всегда сохраняет верхнее поле в 80% от высоты области просмотра.
источник
Используйте абсолютное позиционирование и z-index для создания липкого div нижнего колонтитула с любым разрешением, используя следующие шаги:
position: absolute; bottom: 0;
и желаемой высотыdiv
который оборачивает содержимое телаposition: relative; min-height: 100%;
div
, равный высоте плюс отступ нижнего колонтитулаz-index
нижний колонтитул больше контейнера,div
если нижний колонтитул обрезанВот пример:
источник
На этот вопрос многие ответы, которые я видел, являются неуклюжими, сложными для реализации и неэффективными, поэтому я решил попробовать и найти собственное решение, представляющее собой чуть-чуть CSS и HTML.
это работает, устанавливая высоту нижнего колонтитула, а затем используя css calc для определения минимальной высоты страницы, когда нижний колонтитул все еще находится внизу, надеюсь, это поможет некоторым людям :)
источник
Одним из решений было бы установить минимальную высоту для ящиков. К сожалению, кажется, что это не очень хорошо поддерживается IE (сюрприз).
источник
Ни одно из этих чистых решений CSS не работает должным образом с динамическим изменением размера контента (по крайней мере, в Firefox и Safari), например, если у вас установлен фон в контейнере div, страница, а затем изменить размер (добавив несколько строк) таблицы внутри div, таблица может выступать из нижней части стилизованной области, т. е. вы можете иметь половину таблицы белым на чёрной теме и половину таблицы полностью белой, потому что цвет шрифта и фона - белый. Это в основном нечитаемо со страницами themeroller.
Вложенная многостолбцовая схема div - это уродливый взлом, а div тела / контейнера с минимальной высотой 100% для наклеивания нижнего колонтитула - более уродливый взлом.
Единственное решение без сценариев, которое работает во всех браузерах, которые я пробовал: гораздо более простая / короткая таблица с thead (для заголовка) / tfoot (для нижнего колонтитула) / tbody (td для любого количества столбцов) и высотой 100%. Но в этом есть семантические и SEO недостатки (tfoot должен появиться раньше, чем tbody. Роли ARIA могут помочь приличным поисковым системам).
источник
Множество людей поставили здесь ответ на эту простую проблему, но я хочу добавить одну вещь, учитывая, насколько я был расстроен, пока не понял, что я делаю неправильно.
Как уже упоминалось, самый простой способ сделать это так:
Однако свойство, не упомянутое в публикациях, предположительно потому, что оно обычно используется по умолчанию, является следующим : static в теге body. Положение родственника не сработает!
Моя тема WordPress отменила отображение тела по умолчанию, и это смущало меня в течение долгого времени.
источник
Я знаю старый поток, но если вы ищете адаптивное решение, это дополнение jQuery поможет:
Полное руководство можно найти здесь: https://pixeldesigns.co.uk/blog/responsive-jquery-sticky-footer/
источник
Я создал очень простую библиотеку https://github.com/ravinderpayal/FooterJS
Это очень просто в использовании. После включения библиотеки просто назовите эту строку кода.
Нижние колонтитулы можно динамически изменять, вызывая указанную выше функцию с другим параметром / идентификатором.
Примечание: - Вы не должны изменять или добавлять CSS. Библиотека является динамической, что означает, что даже если размер экрана после загрузки страницы будет изменен, будет сброшено положение нижнего колонтитула. Я создал эту библиотеку, потому что CSS решает проблему на некоторое время, но когда размер дисплея значительно меняется, с рабочего стола на планшет или наоборот, они либо перекрывают контент, либо перестают оставаться липкими.
Другое решение - CSS Media Queries, но вам нужно вручную писать разные стили CSS для экранов разного размера, в то время как эта библиотека выполняет свою работу автоматически и поддерживается всеми основными браузерами, поддерживающими JavaScript.
Изменить CSS решение:
Теперь, если высота показа больше, чем длина вашего контента, мы сделаем нижний колонтитул зафиксированным внизу, а если нет, он автоматически появится в самом конце экрана, так как вам нужно прокрутить, чтобы просмотреть это.
И это кажется лучшим решением, чем JavaScript / библиотека.
источник
Мне не повезло с решениями, предложенными на этой странице ранее, но, наконец, этот маленький трюк сработал. Я включу это как другое возможное решение.
источник
Решение Flexbox
Гибкая компоновка предпочтительна для естественных высот верхнего и нижнего колонтитула. Это гибкое решение протестировано в современных браузерах и фактически работает :) в IE11.
Смотрите JS Fiddle .
HTML
CSS
источник
Для меня самый хороший способ показать его (нижний колонтитул) - придерживаться дна, но не охватывать контент все время:
источник
jQuery CROSS BROWSER CUSTOM PLUGIN - $ .footerBottom ()
Или используйте jQuery, как я, и установите высоту нижнего колонтитула в
auto
илиfix
, как вам угодно, это будет работать в любом случае. этот плагин использует селекторы jQuery, поэтому, чтобы он работал, вам нужно включить библиотеку jQuery в ваш файл.Вот как вы запускаете плагин. Импортируйте jQuery, скопируйте код этого пользовательского плагина jQuery и импортируйте его после импорта jQuery! Это очень просто и просто, но важно.
Когда вы делаете это, все, что вам нужно сделать, это запустить этот код:
нет необходимости помещать его в событие готовности документа. Это будет хорошо работать, как есть. Он будет пересчитывать положение вашего нижнего колонтитула, когда страница загружается и когда размер окна изменяется.
Вот код плагина, который вы не должны понимать. Просто знайте, как это реализовать. Это делает работу за вас. Однако, если вы хотите узнать, как это работает, просто посмотрите код. Я оставил комментарии для вас.
источник
Гибкие решения работали для меня настолько, что делали нижний колонтитул липким, но, к сожалению, изменение тела для использования гибкого макета изменило некоторые из наших макетов страниц, и не в лучшую сторону. Что в итоге сработало для меня:
Я получил это от ответа ctf0 на https://css-tricks.com/couple-takes-sticky-footer/
источник
источник
Если вы не хотите, чтобы он использовал фиксированную позицию и досадно следил за вами по мобильному телефону, мне кажется, это пока работает.
Просто установите HTML
min-height: 100%;
иposition: relative;
затемposition: absolute; bottom: 0; left: 0;
в нижний колонтитул. Затем я убедился, что нижний колонтитул был последним элементом в теле.Дайте мне знать, если это не работает для кого-то еще и почему. Я знаю, что эти утомительные хаки стиля могут вести себя странно при различных обстоятельствах, о которых я даже не думал.
источник
Попробуйте поместить контейнер div (с переполнением: авто) вокруг содержимого и боковой панели.
Если это не сработает, у вас есть скриншоты или примеры ссылок, где нижний колонтитул отображается неправильно?
источник