Google только что объявил, что Java 8 будет изначально поддерживаться Android и что инструментальная цепочка Jack будет обесцениваться:
Мы решили добавить поддержку функций языка Java 8 непосредственно в текущий javac и dx набор инструментов, и осудить Jackchain. В этом новом направлении существующие инструменты и плагины, зависящие от формата файла классов Java, должны продолжать работать. Двигаясь вперед, функции языка Java 8 будут поддерживаться системой Android. Мы собираемся запустить это как часть Android Studio в ближайшие недели, и мы хотели бы поделиться этим решением с вами на ранней стадии.
Подробнее здесь: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
Чтобы получить липкий нижний колонтитул:
<div>
с class="wrapper"
для вашего контента. </div>
в wrapper
поместите <div class="push"></div>
. </div>
wrapper
поместите <div class="footer"></div>
. * {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -142px; /* the bottom margin is the negative value of the footer's height */
}
.footer, .push {
height: 142px; /* .push must be the same height as .footer */
}
CSS:
#container{
width: 100%;
height: 100vh;
}
#container.footer{
float:left;
width:100%;
height:20vh;
margin-top:80vh;
background-color:red;
}
HTML:
<div id="container">
<div class="footer">
</div>
</div>
Это должно сделать трюк, если вы ищете ответный нижний колонтитул, выровненный в нижней части страницы, который всегда удерживает верхний предел 80% высоты просмотра.
jQuery CROSS BROWSER CUSTOM PLUGIN - $ .footerBottom ()
Или используйте jQuery, как я, и установите высоту нижнего колонтитула auto
или fix
, что бы вы ни хотели, он будет работать так или иначе. этот плагин использует селектор jQuery, поэтому для его работы вам нужно будет включить библиотеку jQuery в ваш файл.
Вот как вы запускаете плагин. Импортируйте jQuery, скопируйте код этого настраиваемого плагина jQuery и импортируйте его после импорта jQuery! Это очень простой и простой, но важный.
Когда вы это сделаете, все, что вам нужно сделать, это запустить этот код:
$.footerBottom({target:"footer"}); //as html5 tag <footer>.
// You can change it to your preferred "div" with for example class "footer"
// by setting target to {target:"div.footer"}
нет необходимости размещать его внутри события готовности документа. Он будет работать хорошо, как есть. Он пересчитает положение вашего нижнего колонтитула при загрузке страницы и при изменении размера окна.
Вот код плагина, который вам не нужно понимать. Просто знайте, как его реализовать. Это делает для вас работу. Однако, если вам нравится знать, как это работает, просто просмотрите код. Я оставлял комментарии для вас.
//import jQuery library before this script
// Import jQuery library before this script
// Our custom jQuery Plugin
(function($) {
$.footerBottom = function(options) { // Or use "$.fn.footerBottom" or "$.footerBottom" to call it globally directly from $.footerBottom();
var defaults = {
target: "footer",
container: "html",
innercontainer: "body",
css: {
footer: {
position: "absolute",
left: 0,
bottom: 0,
},
html: {
position: "relative",
minHeight: "100%"
}
}
};
options = $.extend(defaults, options);
// JUST SET SOME CSS DEFINED IN THE DEFAULTS SETTINGS ABOVE
$(options.target).css({
"position": options.css.footer.position,
"left": options.css.footer.left,
"bottom": options.css.footer.bottom,
});
$(options.container).css({
"position": options.css.html.position,
"min-height": options.css.html.minHeight,
});
function logic() {
var footerOuterHeight = $(options.target).outerHeight(); // Get outer footer height
$(options.innercontainer).css('padding-bottom', footerOuterHeight + "px"); // Set padding equal to footer height on body element
$(options.target).css('height', footerOuterHeight + "!important"); // Set outerHeight of footer element to ... footer
console.log("jQ custom plugin footerBottom runs"); // Display text in console so ou can check that it works in your browser. Delete it if you like.
};
// DEFINE WHEN TO RUN FUNCTION
$(window).on('load resize', function() { // Run on page loaded and on window resized
logic();
});
// RETURN OBJECT FOR CHAINING IF NEEDED - IF NOT DELETE
// return this.each(function() {
// this.checked = true;
// });
// return this;
};
})(jQuery); // End of plugin
// USE EXAMPLE
$.footerBottom(); // Run our plugin with all default settings for HTML5
/* Set your footer CSS to what ever you like it will work anyway */
footer {
box-sizing: border-box;
height: auto;
width: 100%;
padding: 30px 0;
background-color: black;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- The structure doesn't matter much, you will always have html and body tag, so just make sure to point to your footer as needed if you use html5, as it should just do nothing run plugin with no settings it will work by default with the <footer> html5 tag -->
<body>
<div class="content">
<header>
<nav>
<ul>
<li>link</li>
<li>link</li>
<li>link</li>
<li>link</li>
<li>link</li>
<li>link</li>
</ul>
</nav>
</header>
<section>
<p></p>
<p>Lorem ipsum...</p>
</section>
</div>
<footer>
<p>Copyright 2009 Your name</p>
<p>Copyright 2009 Your name</p>
<p>Copyright 2009 Your name</p>
</footer>
Я иногда с этим боролся, и я всегда находил, что решение со всеми этими div внутри друг друга было беспорядочным решением. Я просто немного испортил его, и я лично узнал, что это работает, и это, безусловно, один из самых простых способов:
html {
position: relative;
}
html, body {
margin: 0;
padding: 0;
min-height: 100%;
}
footer {
position: absolute;
bottom: 0;
}
Что мне нравится в этом, так это то, что никакой дополнительный HTML не должен быть применяется. Вы можете просто добавить этот CSS, а затем написать свой HTML как всегда
Вероятно, наиболее очевидным и небедовым способом сделать липкий нижний колонтитул было бы использование новых единиц просмотра css .
Возьмем, к примеру, следующую простую разметку:
<header>header goes here</header>
<div class="content">This page has little content</div>
<footer>This is my footer</footer>
Если заголовок имеет высоту 80 пикселей, а нижний колонтитул высотой 40 пикселей, мы можем сделать наш липкий нижний колонтитул одним единственное правило в содержимом div:
.content {
min-height: calc(100vh - 120px);
/* 80px header + 40px footer = 120px */
}
Это означает: пусть высота содержимого div должна быть не менее 100% от высоты видового экрана минус комбинированные высоты верхнего и нижнего колонтитула.
Вот и все.
* {
margin:0;
padding:0;
}
header {
background: yellow;
height: 80px;
}
.content {
min-height: calc(100vh - 120px);
/* 80px header + 40px footer = 120px */
background: pink;
}
footer {
height: 40px;
background: aqua;
}
<header>header goes here</header>
<div class="content">This page has little content</div>
<footer>This is my footer</footer>
... и вот как работает тот же код с большим количеством содержание в содержимом div:
* {
margin:0;
padding:0;
}
header {
background: yellow;
height: 80px;
}
.content {
min-height: calc(100vh - 120px);
/* 80px header + 40px footer = 120px */
background: pink;
}
footer {
height: 40px;
background: aqua;
}
<header>header goes here</header>
<div class="content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
</div>
<footer>
This is my footer
</footer>
NB:
1) Высота верхнего и нижнего колонтитула должна быть известна
2) В старых версиях IE (IE8-) и Android (4.4-) не поддерживаются единицы просмотра. ( caniuse )
3) Когда-то у веб-кита возникла проблема с единицами просмотра в правиле calc. Это действительно исправлено ( см. Здесь ), поэтому там нет проблем. Однако, если вы хотите избежать использования calc по какой-либо причине, вы можете обойти это, используя отрицательные поля и отступы с размером окна -
. Так же:
* {
margin:0;padding:0;
}
header {
background: yellow;
height: 80px;
position:relative;
}
.content {
min-height: 100vh;
background: pink;
margin: -80px 0 -40px;
padding: 80px 0 40px;
box-sizing:border-box;
}
footer {
height: 40px;
background: aqua;
}
<header>header goes here</header>
<div class="content">Lorem ipsum
</div>
<footer>
This is my footer
</footer>
Вы можете использовать position: absolute
для установки нижнего колонтитула в нижней части страницы, но затем убедитесь, что ваши 2 столбца имеют соответствующие margin-bottom
, чтобы они никогда не закрывались нижним колонтитулом.
#footer {
position: absolute;
bottom: 0px;
width: 100%;
}
#content, #sidebar {
margin-bottom: 5em;
}
Одним из решений было бы установить минимальную высоту для полей. К сожалению, кажется, что это не очень хорошо поддерживается IE (сюрприз).
Для этого вопроса многие из ответов, которые я видел, неуклюжи, сложны в реализации и неэффективны, поэтому я подумал, что сделаю это, и придумаю мое собственное решение, которое всего лишь крошечный бит css и html
html,
body {
height: 100%;
margin: 0;
}
.body {
min-height: calc(100% - 2rem);
width: 100%;
background-color: grey;
}
.footer {
height: 2rem;
width: 100%;
background-color: yellow;
}
<body>
<div class="body">test as body</div>
<div class="footer">test as footer</div>
</body>
работает, устанавливая высоту нижнего колонтитула, а затем используя css calc для определения минимальной высоты страницы с нижним колонтитулом все еще внизу, надеюсь, что это поможет некоторым людям:)
Попробуйте поместить контейнер div (с переполнением: авто) вокруг содержимого и боковой панели.
Если это не работает, у вас есть скриншоты или примеры ссылок, где нижний колонтитул не отображается правильно ?
Для меня самый лучший способ его отображения (нижний колонтитул) прилипает к дну, но не покрывает контент все время:
#my_footer {
position: static
fixed; bottom: 0
}
Несколько человек поставили ответ на эту простую проблему здесь, но мне нужно добавить одну вещь, учитывая, насколько я расстроен, пока не понял, что я делаю неправильно.
Как уже упоминалось, большинство простой способ сделать это так.
html {
position: relative;
min-height: 100%;
}
body {
background-color: transparent;
position: static;
height: 100%;
margin-bottom: 30px;
}
.site-footer {
position: absolute;
height: 30px;
bottom: 0px;
left: 0px;
right: 0px;
}
Однако свойство, не упомянутое в сообщениях, по-видимому, потому, что оно обычно является по умолчанию, является позицией: static на теге body. Относительно относительного отношения не будет!
Моя тема Wordpress переопределила отображение тела по умолчанию, и это смутило меня в течение долгого времени.
Мне не повезло с решениями, предлагаемыми на этой странице раньше, но потом, наконец, этот небольшой трюк сработал. Я включу его в другое возможное решение.
footer {
position: fixed;
right: 0;
bottom: 0;
left: 0;
padding: 1rem;
background-color: #efefef;
text-align: center;
}
Установите для CSS для #footer
значение:
position: absolute;
bottom: 0;
Затем вам нужно будет добавить padding
или margin
в нижней части ваших #sidebar
и #content
до совпадают с высотой #footer
или когда они перекрываются, #footer
будет их покрывать.
Кроме того, если я правильно помню, IE6 имеет проблемы с CSS bottom: 0
. Возможно, вам придется использовать JS-решение для IE6 (если вас интересует IE6, который есть).
Ни одно из этих чистых css-решений не работает корректно с динамическим изменением размера содержимого (по крайней мере, в Firefox и Safari), например, если у вас есть фон, установленный на контейнере div, страница, а затем измените размер (добавив несколько строк) в таблицу div, таблица может торчать из нижней части стилизованной области, т. е. вы можете иметь половину стола в белом на черной теме, а половину стола - белую, так как цвет шрифта и цвет фона белый.
Вложенная разметка в нескольких столбцах - это уродливый взломать, а 100% минимальный размер тела / контейнер div для приклеивания нижнего колонтитула - это уродливый хак.
Единственное не-скриптовое решение, которое работает во всех браузерах, которые я пробовал: гораздо более простая / короткая таблица с темой (для заголовка) / tfoot (для нижнего колонтитула) / tbody (td для любого количества столбцов) и высотой 100%. Но это восприняло семантические и SEO-недостатки (tfoot должен появиться перед tbody. Роли ARIA могут помочь достойным поисковым системам, хотя).
Используйте абсолютное позиционирование и z-index для создания липкого нижнего колонтитула с любым разрешением, используя следующие шаги:
position: absolute; bottom: 0;
и желаемой высотой div
, который обертывает содержимое тела с помощью position: relative; min-height: 100%;
div
, равное высоте и дополнению нижнего колонтитула z-index
больше, чем контейнер div
, если нижний колонтитул обрезается Вот пример:
<!doctype html>
<html>
<head>
<title>Sticky Footer</title>
<meta charset="utf-8">
<style>
.wrapper { position: relative; min-height: 100%; }
.footer { position: absolute; bottom:0; width: 100%; height: 200px; padding-top: 100px; background-color: gray; }
.column { height: 2000px; padding-bottom: 300px; background-color: green; }
/* Set the `html`, `body`, and container `div` to `height: 100%` for IE6 */
</style>
</head>
<body>
<div class="wrapper">
<div class="column">
<span>hello</span>
</div>
<div class="footer">
<p>This is a test. This is only a test...</p>
</div>
</div>
</body>
</html>
Я создал очень простую библиотеку https://github.com/ravinderpayal/FooterJS
. Она очень проста в использовании. После включения библиотеки просто позвоните в эту строку кода.
footer.init(document.getElementById("ID_OF_ELEMENT_CONTAINING_FOOTER"));
Нижние колонтитулы могут быть динамически изменены путем вызова функции выше с другим параметром / id.
footer.init(document.getElementById("ID_OF_ANOTHER_ELEMENT_CONTAINING_FOOTER"));
Примечание. - Вы не должны изменять или добавлять CSS. Библиотека динамична, что подразумевает, что даже если размер экрана будет изменен после загрузки страницы, он сбросит положение нижнего колонтитула. Я создал эту библиотеку, потому что CSS решает проблему некоторое время, но когда размер отображения значительно меняется, от рабочего стола до планшета или наоборот, они либо перекрывают содержимое, либо больше не остаются липкими.
Другое решение - это CSS Media Queries, но вы должны вручную писать разные стили CSS для разных размеров экранов, в то время как эта библиотека выполняет свою работу автоматически и поддерживается всеми базовыми браузерами, поддерживающими JavaScript.
Редактирование решения CSS:
@media only screen and (min-height: 768px) {/* or height/length of body content including footer*/
/* For mobile phones: */
#footer {
width: 100%;
position:fixed;
bottom:0;
}
}
Теперь, если высота отображения больше, чем длина вашего содержимого, мы создадим нижний колонтитул снизу, а если нет, он будет автоматически отображаться в самом конце дисплея, поскольку вам нужно прокрутить, чтобы просмотреть это .
И это кажется лучшим решением, чем JavaScript / library one.
Гибкая компоновка предпочтительна для естественной высоты заголовка и нижнего колонтитула. Это гибкое решение проверено в современных браузерах и фактически работает :) в IE11.
HTML
<body>
<header>
...
</header>
<main>
...
</main>
<footer>
...
</footer>
</body>
CSS
html {
height: 100%;
}
body {
height: 100%;
min-height: 100vh;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
margin: 0;
display: flex;
flex-direction: column;
}
main {
flex-grow: 1;
flex-shrink: 0;
}
header,
footer {
flex: none;
}
Вот решение с jQuery, которое работает как шарм. Он проверяет, больше ли высота окна больше высоты тела. Если это так, то он меняет верхний край нижнего колонтитула для компенсации. Тестирование в Firefox, Chrome, Safari и Opera.
$( function () {
var height_diff = $( window ).height() - $( 'body' ).height();
if ( height_diff > 0 ) {
$( '#footer' ).css( 'margin-top', height_diff );
}
});
Если ваш нижний колонтитул уже имеет верхний край (например, 50 пикселей), вам нужно будет изменить последнюю часть для:
css( 'margin-top', height_diff + 50 )
Аналогичное решение для @gcedo , но без необходимости добавления промежуточного содержимого, чтобы подтолкнуть нижний колонтитул. Мы можем просто добавить margin-top:auto
в нижний колонтитул, и он будет сдвинут в нижнюю часть страницы независимо от его высоты или высоты содержимого выше.
body {
display: flex;
flex-direction: column;
min-height: 100vh;
margin:0;
}
.content {
padding: 50px;
background: red;
}
.footer {
margin-top: auto;
padding:10px;
background: green;
}
<div class="content">
some content here
</div>
<footer class="footer">
some content
</footer>
.content
flex: 1 0 auto;
сделать его растёт и не горючим, но margin-top: auto;
- хороший трюк, который включает в себя нижний колонтитул стиля, а не «несвязанный». .content
, что приятно. На самом деле, мне интересно, почему Flex необходим в этом подходе.
– YakovL
22 April 2018 в 21:36
display:flex
, это не сработает, у вас будет нормальный поток элемента элемента
– Temani Afif
22 April 2018 в 21:41
margin:0 auto
до центрального блока), НО мы не имеем никакого направления в столбце, поэтому нет маржирования с верхним / нижним. Flexbox имеет направление строки / столбца;). Это небольшая разница, но маржа также используется в flexbox для выравнивания элемента, поэтому даже в пределах направления строки вы можете использовать маркерный верх / нижний авто для выравнивания по вертикали. Вы можете прочитать здесь: w3.org/TR / CSS-Flexbox-1 / # авто-поле
– Temani Afif
22 April 2018 в 21:59
Старый поток, который я знаю, но если вы ищете отзывчивое решение, это дополнение jQuery поможет:
$(window).on('resize',sticky);
$(document).bind("ready", function() {
sticky();
});
function sticky() {
var fh = $("footer").outerHeight();
$("#push").css({'height': fh});
$("#wrapper").css({'margin-bottom': -fh});
}
Полное руководство можно найти здесь: https: // pixeldesigns .co.uk / блог / отзывчивым-JQuery-липкий сноска /
display: flex
Решение, вдохновленное липким нижним колонтитулом Филиппа Уолтона .
Это решение является действительным только для :
Он основан на дисплее flex
, используя свойство flex-grow
, которое позволяет элементу расти как по высоте, так и по ширине (когда flow-direction
установлен на column
или row
соответственно), чтобы занять дополнительный пространство в контейнере.
Мы будем использовать также блок vh
, где 1vh
- , определенный как :
1 / 100-я высота окна просмотра
blockquote>Поэтому высота
100vh
- это краткое описание того, как элемент должен охватывать всю высоту видового экрана.Это как вы бы структурировали свою веб-страницу:
----------- body ----------- ---------------------------- ---------- footer ---------- ----------------------------
Чтобы нижний колонтитул лежал в нижней части страницы, вы хотите, чтобы пространство между телом и нижним колонтитулом увеличивалось настолько, насколько это необходимо нажмите нижний колонтитул внизу страница.
Поэтому наш макет становится:
----------- body ----------- ---------------------------- ---------- spacer ---------- <- This element must grow in height ---------------------------- ---------- footer ---------- ----------------------------
Реализация
body { margin: 0; display: flex; flex-direction: column; min-height: 100vh; } .spacer { flex: 1; } /* make it visible for the purposes of demo */ .footer { height: 50px; background-color: red; }
<body> <div class="content">Hello World!</div> <div class="spacer"></div> <footer class="footer"></footer> </body>
Вы можете играть с ним в JSFiddle .
Прикиды Safari
Имейте в виду, что Safari имеет ошибочную реализацию
flex-shrink
свойство , которое позволяет деталям сжиматься больше минимальной высоты, необходимой для отображения содержимого. Чтобы исправить эту проблему, вам необходимо будет установить свойствоflex-shrink
явно 0 в.content
иfooter
в приведенном выше примере:.content { flex-shrink: 0; } .footer { flex-shrink: 0; }