Как предотвратить сноску мобильной клавиатуры под текстовыми полями?
У меня проблемы с моим нижним колонтитулом. Я хочу, чтобы нижний колонтитул оставался внизу экрана, но есть небольшая проблема. При использовании мобильного браузера некоторые поля блокируются нижним колонтитулом при открытии клавиатуры. Нижний колонтитул поднимается над клавиатурой и блокирует поле, которое вы вводите. Как я могу держать нижний колонтитул внизу и не допускать его поднятия над клавиатурой? Я хочу, чтобы он оставался скрытым под клавиатурой.
Я использую загрузчик, но я установил следующие вещи в своем собственном CSS:
footer {
width: 100%;
position:absolute;
left:0px;
bottom:0px;
height: 40px;
margin: auto;
overflow: hidden;
background:#2E2E2E;
text-align:center;
line-height: 15px;
color: #fff;
}
<html>
<body>
<div class="container">
</div>
<footer class="bs-footer" role="contentinfo">
</body>
</html>
Как вы можете видеть здесь. Когда я активирую поле "Salasana", нижний колонтитул поднимается и блокирует текстовое поле.
Перед открытием клавиатуры:
После открытия клавиатуры:
7 ответов
Решил проблему с помощью avinash. Я закончил тем, что изменил следующее в своем CSS. Поскольку у меня есть все содержимое внутри div контейнера, я сделал высоту контейнера 100% - нижний колонтитул. Я также удалил нижнюю часть:0px из нижнего колонтитула.
footer{
position: relative;
}
html,body {
height: 100%; /* Needed for container's min-height */
}
.container{
min-height:100%;
margin-bottom: -40px; /* Put negative height of the footer here */
padding-bottom: 40px; /* Put height of the footer here. Needed for higher than screen height pages */
}
Я нашел решение, размещенное здесь на Stackru, довольно полезным. Он включает в себя фрагмент JavaScript, который решил эту проблему для меня, вставив ниже;
if(/Android [4-6]/.test(navigator.appVersion)) {
window.addEventListener("resize", function() {
if(document.activeElement.tagName=="INPUT" || document.activeElement.tagName=="TEXTAREA") {
window.setTimeout(function() {
document.activeElement.scrollIntoViewIfNeeded();
},0);
}
})
}
Если вы не хотите изменять HTML-код, попробуйте исправить это с помощью JS.
Мы получаем текущую позицию сверху, устанавливаем верхнее значение стиля и сбрасываем нижнее значение.
var fixed = document.querySelector(".fixed"),
distanceFromTop = fixed.getBoundingClientRect().top;
fixed.style.top = distanceFromTop + 'px';
fixed.style.bottom = 'auto';
Попробуйте использовать положение: относительное или фиксированное
Если вы хотите, чтобы нижний колонтитул был внизу, вы должны добавить минимальную высоту к телу
Для нижнего колонтитула с фиксированным положением я расположил его относительно верхнего, а не нижнего колонтитула:
footer {
position: fixed;
height: 40px;
top: calc(100vh - 40px);
/* bottom: 0; */
}
Я использую use-detect-keyboard-open с React, и он отлично работает.
Я сохраняю window.innerHeight в фокусе ввода и сбрасываю высоту при размытии ввода.
document.addEventListener('focusin', function (e) {
if (isInputElement(e.target)) {
document.body.style.height = window.innerHeight + 'px';
}
})
document.addEventListener('focusout', function (e) {
if (isInputElement(e.target)) {
document.body.style.height = '100%';
}
})
function isInputElement(ele) {
return ele &&
ele.tagName === 'INPUT' ||
ele.tagName === 'TEXTAREA' ||
ele.getAttribute('contenteditable').toString() === 'true';
}