Переопределить css для проверки формы html5/требуемого всплывающего окна
Как я могу переопределить всплывающее окно по умолчанию для обязательного поля в форме HTML5?
Пример: http://jsfiddle.net/uKZGp/ (убедитесь, что вы нажали кнопку отправки, чтобы увидеть всплывающее окно)
HTML
<form>
<input type="text" name="name" id="name" placeholder="Name*" required="required" />
<input type="submit" />
</form>
ПРИМЕЧАНИЕ. Вы должны просмотреть это с помощью браузера HTML5, такого как Google Chrome или FireFox.
Эта ссылка не решает мой вопрос, но это может заставить кого-то думать за пределами поля:
Ответы
Ответ 1
Невозможно изменить стиль проверки только с помощью HTML5/CSS3.
Это часть браузера. Единственный атрибут, который я решил изменить, - это сообщение об ошибке с помощью этого примера:
document.getElementById("name").setCustomValidity("Lorum Ipsum");
Но, как показано в этом примере: http://jsfiddle.net/trixta/qTV3g/, вы можете переопределить стиль панели с помощью jQuery. Это не плагин, это базовая функциональность, использует DOM-библиотеку под названием Webshims и, конечно же, некоторые CSS для создания всплывающих окон.
Я нашел этот очень полезный пример в этом сообщении об ошибке под названием Improve form validation error panel UI
.
Я думаю, что это лучшее решение, которое вы можете найти, и только способ переопределить базовую (уродливую) панель ошибок.
С уважением.
Ответ 2
Я не уверен, почему, но ::-webkit-validation-bubble-message { display: none; }
не будет работать для меня.
Я смог получить желаемый результат (протестирован в FF 19, версия Chrome 29.0.1547.76 м), предотвращая поведение по умолчанию недопустимого события, которое не пузырится.
document.addEventListener('invalid', (function(){
return function(e){
//prevent the browser from showing default error bubble/ hint
e.preventDefault();
// optionally fire off some custom validation handler
// myvalidationfunction();
};
})(), true);
Надеюсь, что это поможет другим - я везде искал это.
Ответ 3
Для webkit вы можете использовать ::-webkit-validation-bubble-message
. Например, чтобы скрыть это:
::-webkit-validation-bubble-message { display: none; }
Есть также:
::-webkit-validation-bubble-arrow-clipper{}
::-webkit-validation-bubble-arrow{}
::-webkit-validation-bubble{}
::-webkit-validation-bubble-top-outer-arrow{}
::-webkit-validation-bubble-top-inner-arrow{}
::-webkit-validation-bubble-message{}
Обновление: Chrome больше не допускает шаблонов проверки формы оформления: https://code.google.com/p/chromium/issues/detail?id=259050
Для firefox вы можете поэкспериментировать с :-moz-placeholder {}
.
Ответ 4
Текущая проверка подлинности по умолчанию в настоящее время является одной из самых уродливых вещей, которые я когда-либо видел в дизайне Google!
![Chrome HTML5 email type form validation]()
Однако он, кажется, содержится в стандарте div
, поэтому вы можете внести в него некоторые изменения, если вы помните, что тогда reset эти значения.
Я нашел, что вы можете изменить фон, размер шрифта и цвет, границу и тень, например
div {
background: rgba(0,0,0,0.8);
color: #333;
font-size: 11px;
border: 0;
box-shadow: none;
}
Если вы затем перезапишите их для div внутри тега html, то в конечном итоге будет затронута только проверка.
html div {
background: rgba(0,0,0,1);
color: #000;
font-size: 12px;
}
К сожалению, некоторые ключевые атрибуты, которые вы хотите изменить, такие как margin
и font-weight
, не могут быть изменены.
NB. Этот метод в настоящее время работает только для Chrome (12), т.е. Не работает для Firefox 4, Opera 11 или Safari (Win 7).
Ответ 5
Добавлен класс к типу ввода. и там отображается сообщение. Надеюсь, что это поможет после небольшой настройки. рабочий код:
document.querySelector('#frm').addEventListener('submit', e => {
e.preventDefault();
e.currentTarget.classList.add('submitted');
});
body {
font-family: Helvetica, sans-serif;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
overflow: hidden;
width: 100%;
height: 100vh;
background: #ffa500;
}
form > div {
position: relative;
margin-bottom: 10px;
}
.theTooltip {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
will-change: opacity, visibility;
max-width: 250px;
border-radius: 5px;
background-color: rgba(0,0,0,0.7);
padding: 15px;
color: #fff;
box-sizing: border-box;
display: inline-block;
position: absolute;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: translate(15%, -50%);
transform: translate(15%, -50%);
top: 50%;
left: auto;
right: auto;
bottom: auto;
visibility: hidden;
margin: 0;
opacity: 0;
-webkit-transition: opacity 0.3s ease-out;
transition: opacity 0.3s ease-out;
z-index: 100;
}
.theTooltip:after {
content: '';
position: absolute;
width: 0;
height: 0;
top: 50%;
margin-top: -10px;
left: -10px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-right: 10px solid rgba(0,0,0,0.7);
}
label {
display: inline-block;
vertical-align: center;
}
input {
background: #fff;
border: 1px solid transparent;
cursor: pointer;
display: inline-block;
overflow: visible;
margin: 0;
outline: 0;
vertical-align: center;
text-decoration: none;
width: auto;
border-radius: 3px;
cursor: text;
padding: 7px;
}
input:focus,
input:active {
outline: none;
}
.submitted input:invalid {
border: 1px solid #f00;
}
.submitted input:invalid ~ .theTooltip {
visibility: visible;
opacity: 1;
}
.submitted input:valid ~ .theTooltip {
-webkit-transition: opacity 0.3s, visibility 0s 0.3s;
transition: opacity 0.3s, visibility 0s 0.3s;
}
<form id="frm" action="action">
<div>
<label>Email</label>
<input type="email" required="required"/><span class="theTooltip">Invalid email</span>
</div>
<div>
<button formnovalidate="formnovalidate">OK</button>
</div>
</form>
Ответ 6
Я понимаю, что это довольно старый вопрос, но я нашел эту библиотеку, которая, по моему мнению, может быть полезной для других, которые находят это.
http://afarkas.github.io/webshim/demos/index.html