Как я могу реализовать водяные знаки, подобные переполнению стека, в формах?
-
20-09-2019 - |
Вопрос
Я помню, что где-то видел учебник, в котором рассказывалось о том, как стилизовать ваши формы ввода более "удобным” способом.
По сути, у вас есть значение-заполнитель, и когда вы вводите входные данные, оно, так сказать, скрывает подсказку.
Теперь, просто чтобы внести ясность:Я не хочу, чтобы подсказка (текст значения-заполнителя) исчезала при фокусировке, а скорее становилась светлее, когда я впервые начинаю что-то вводить.Хорошие примеры:
Ознакомьтесь с формами на Трубкозуб.Это именно то, какими я хотел бы видеть свои формы ввода.
Наше собственное переполнение стека — когда вы пытаетесь задать вопрос, щелкнув внутри любой формы ввода, текст не скрывается сразу.Вы видите свой курсор так же, как и подсказку.но когда вы начинаете печатать, он скрывает подсказку.(Я бы предпочел, чтобы они были гораздо более светлого оттенка, а не прятались все вместе, как в приведенном выше примере с трубкозубом.)
Я очень четко помню, что читал где-то на interwebz учебник с этим точным требованием, но, черт возьми, я забыл добавить его в закладки.
Есть какие-нибудь предложения / ссылки?
[Обновить:Недавно я нашел плагин jQuery Метки в полевых условиях это делает именно то, что я хочу.Также, вот ссылка к улучшению того же плагина.]
Решение
Возможно, вы захотите начать с этого:
<input type="text" value="Your Hint Here"
onFocus="if (this.value == 'Your Hint Here') this.style.color = '#ccc';"
onKeyDown="if (this.value == 'Your Hint Here') {
this.value = ''; this.style.color = '#000'; }">
Вероятно, вам следует изменить приведенное выше, чтобы использовать функции JavaScript таким образом, чтобы не повторять строку подсказки три раза, но я надеюсь, что это поможет вам двигаться в правильном направлении.
Я также заметил, что форма «Присоединиться сейчас» появляется на варк.com также установите позицию курсора в начало текстового поля, а не оставляйте его в конце.Это может быть немного сложно заставить его работать в разных браузерах, но вы можете проверить решение, предложенное в следующей статье: Джош Стодола:
Другие советы
HTML5 имеет placeholder
атрибут, который предназначен именно для этой задачи.
Однако пока только WebKit (движок рендеринга, используемый в Safari и Google Chrome) поддерживает его.Вам понадобится запасной вариант JavaScript, такой как у Дэниела, на случай, если заполнитель не поддерживается.
Это тривиально проверить placeholder
поддержка в JavaScript.
Поле ввода не может одновременно содержать текст по умолчанию и текст, введенный пользователем.Единственный возможный способ добиться именно того, что вы просите, - это иметь фоновое изображение в полях ввода с изображением, содержащим текст по умолчанию, который вы хотели отобразить, но я высоко Не рекомендуем этого делать, так как два слоя текста будут очень запутанными для пользователя.Самый распространенный способ добиться этого (и что сделано на вашем примере сайта vark.com) — использовать фокус метод очистки текста:
$('#my_input').focus(function() {
if($(this).val() == 'default text') {
$(this).val('');
}
});
Чтобы добиться этого, как это делает StackOverflow (и форма регистрации Vark.com), вы можете использовать тот же метод с нажатие клавиши событие:
$('#my_input').keydown(function() {
if($(this).val() == 'default text') {
$(this).val('');
}
});
Чтобы добиться изменения цвета при фокусе и очистки текста при нажатии клавиши, это будет:
// set text to grey on focus
$('#my_input').focus(function() {
if($(this).val() == 'default text') {
$(this).css('color', '#999999');
}
});
// set text to black and clear default value on key press
$('#my_input').keydown(function() {
if($(this).val() == 'default text') {
$(this).val('');
$(this).css('color', '#000000');
}
});
В ответ на сообщение @Paul я заметил поведение HTML5 заполнитель странно действует на мой эмулятор Android.Заполнитель выглядит великолепно, пока вы не нажмете на него, и он не станет черным, когда вы наведете курсор справа от слова.Конечно, если вы введете текст, он исчезнет, но это не интуитивно понятно.Поэтому я написал несколько jQuery чтобы исправить это (где мой значок HTML5 / jQuery?)
$(document).ready(function() {
$('input[placeholder]').focus(function() {
if (!$(this).val()) $(this).val('');
});
});
Я написал этот пример которые я — за неимением лучшего названия — назвал постоянными заполнителями.
Требуется немного больше разметки, div
упаковка label
и input
, но это решает множество других проблем (например, попадание заполнителей в данные формы или неработающие поля пароля), а фактическая разметка очень удобна для чтения.В итоге у вас получится что-то вроде этого:
<div class="input-wrapper">
<label for="id_username">Username</label>
<input id="id_username" type="text" name="username">
</div>
и после включения CSS и JS он просто работает.