#html #css
#HTML #css
Вопрос:
У меня есть span в качестве метки для моего inputfield. При выборе надпись располагается над полем ввода.
Моя проблема в том, что когда вы пытаетесь щелкнуть по полю ввода, метка находится «перед» полем ввода и блокирует его выбор.
Я пытался исправить это с помощью z-индексов, но, похоже, это не работает.
Кто-нибудь может мне помочь с размещением поля ввода перед диапазоном?
#input {
color: #686868;
vertical-align: middle;
padding: 0px !important;
font-size: 16px;
border-width: 0;
overflow: visible;
box-shadow: none;
border: none;
border-bottom: 1px solid #d5dce3;
background-color: transparent !important;
}
#input:focus {
border-color: #1F76BC;
}
#label {
color: rgba(0,0,0,.99);
transition-timing-function: cubic-bezier(.075,.82,.165,1);
transition-duration: .5s;
position: absolute;
width: 100%;
text-align: left;
font-size: 16px;
bottom: 6px;
color: #8792a1;
}
.container:focus-within #label {
transform: translate3d(0,-26px,0);
color: rgba(0,0,0,.99);
}
.container {
position: relative;
margin-top: 32px;
}
<div class="container">
<span id="label">Provincie</span>
<input type="text" id="input" value="" size="40">
</div>
Ответ №1:
Используйте label
вместо span
, и ваш input
текст будет хорошо кликабелен, независимо от расположения заполнителя
input = document.querySelector("#input");
label = document.querySelector(".container > label");
input.addEventListener("change", function () {
if (this.value !== "") {
label.style.transform = "translate3d(0, -26px, 0)";
} else {
label.style.transform = "";
}
});
#input {
color: #686868;
vertical-align: middle;
padding: 0px !important;
font-size: 16px;
border-width: 0;
overflow: visible;
box-shadow: none;
border: none;
border-bottom: 1px solid #d5dce3;
background-color: transparent !important;
}
#input:focus {
border-color: #1f76bc;
}
label {
color: rgba(0, 0, 0, 0.99);
transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
transition-duration: 0.5s;
position: absolute;
width: 100%;
text-align: left;
font-size: 16px;
bottom: 6px;
color: #8792a1;
}
.container:focus-within label {
transform: translate3d(0, -26px, 0);
color: rgba(0, 0, 0, 0.99);
}
.container {
position: relative;
margin-top: 32px;
}
<div class="container">
<label for="input">Provincie</label>
<input type="text" id="input" value="" size="40" />
</div>
Комментарии:
1. Мне вроде как понравилось это решение, но есть одна небольшая проблема, когда вы вводите текст во входных данных, метка будет располагаться за введенным значением, я не уверен, что OP нуждается в этом и не выглядит хорошо с точки зрения пользовательского интерфейса, может быть, вам нужно поместить метку за текстом?
2. @Manjuboyz, спасибо, что понравилось мое решение 🙂 Я только что проверил свое решение, и да, вы правы, и я не учел этот момент. Заполнитель следует оставить позади текста. Нам придется это исправить.
3. @Manjuboyz метка будет поверх поля ввода, когда будет введено значение (которое уже работает), но я опустил эту часть для простоты 🙂
4. @DaanSeuntjens круто, тогда у вас есть ответ 🙂
5. @Manjuboyz, я написал небольшой скрипт для настройки заполнителя. Надеюсь, это то, что вам нужно.
Ответ №2:
пожалуйста, добавьте этот стиль.
#input{
position:relative;
z-index:999;
}
#input {
color: #686868;
vertical-align: middle;
padding: 0px !important;
font-size: 16px;
border-width: 0;
overflow: visible;
box-shadow: none;
border: none;
border-bottom: 1px solid #d5dce3;
background-color: transparent !important;
position:relative;
z-index:999;
}
#input:focus {
border-color: #1F76BC;
}
#label {
color: rgba(0,0,0,.99);
transition-timing-function: cubic-bezier(.075,.82,.165,1);
transition-duration: .5s;
position: absolute;
width: 100%;
text-align: left;
font-size: 16px;
bottom: 6px;
color: #8792a1;
}
.container:focus-within #label {
transform: translate3d(0,-26px,0);
color: rgba(0,0,0,.99);
}
.container {
position: relative;
margin-top: 32px;
}
<div class="container">
<span id="label">Provincie</span>
<input type="text" id="input" value="" size="40">
</div>
Комментарии:
1. Эта надпись довольно просто и плавно перемещается наверх при нажатии на поле ввода @Daan Seuntjens проверьте, чтобы это добавляло только два стиля
position:relative
и некотороеz-index:999;
большее значение z-индекса
Ответ №3:
Что-то вроде этого??
#input {
color: #686868;
vertical-align: middle;
padding: 0px !important;
font-size: 16px;
border-width: 0;
overflow: visible;
box-shadow: none;
border: none;
border-bottom: 1px solid #d5dce3;
background-color: transparent !important;
}
#input:focus {
border-color: #1F76BC;
}
#label {
color: rgba(0, 0, 0, .99);
transition-timing-function: cubic-bezier(.075, .82, .165, 1);
transition-duration: .5s;
position: absolute;
width: 100%;
text-align: left;
font-size: 16px;
bottom: 6px;
color: #8792a1;
}
.container:focus-within #label {
transform: translate3d(0, -26px, 0);
color: rgba(0, 0, 0, .99);
}
.container {
position: relative;
margin-top: 32px;
}
<div class="container">
<input type="text" id="input" value="" size="40" placeholder="Provincie">
</div>
Комментарии:
1. Не перемещает метку наверх при нажатии на поле ввода..
2. @RayeesAC да, этого не произойдет, и я согласен, что это не то, что нужно OP, но я предоставляю лучший вариант, чем создание текста, перемешанного на ярлыке (что вы и делаете сейчас). и, конечно, я удалю свой ответ, если OP это не нужно 🙂