переопределить CSS для проверки формы HTML5 / требуется всплывающее окно - PullRequest
49 голосов
/ 30 марта 2011

Как я могу переопределить всплывающее окно по умолчанию для обязательного поля в форме 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.

Эта ссылка не решает мой вопрос, но может заставить кого-то мыслить нестандартно:

Ответы [ 6 ]

30 голосов
/ 30 марта 2011

Невозможно изменить стиль проверки только с HTML5 / CSS3.

Это часть браузера. Единственный атрибут, который я решил изменить - это сообщение об ошибке, используя этот пример:

 document.getElementById("name").setCustomValidity("Lorum Ipsum");

Но, как показано в этом примере: http://jsfiddle.net/trixta/qTV3g/,, вы можете переопределить стиль панели с помощью jQuery. Это не плагин, это основная функциональность, использует библиотеку DOM под названием Webshims и, конечно, немного CSS для стилизации всплывающих окон.

Я нашел этот очень полезный пример в этом сообщении об ошибке под названием Improve form validation error panel UI.

Я думаю, что это лучшее решение, которое вы можете найти, и единственный способ переопределить основную (некрасивую) панель ошибок.

Привет.

17 голосов
/ 03 октября 2013

Я не уверен, почему, но ::-webkit-validation-bubble-message { display: none; } не будет работать для меня. Мне удалось получить желаемый результат (проверено в FF 19, версия Chrome 29.0.1547.76 m), предотвращая поведение недопустимого события по умолчанию, которое не всплывает.

  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);

Надеюсь, что это помогает другим - я искал это везде.

11 голосов
/ 30 сентября 2012

Для 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 голосов
/ 23 июня 2011

Текущая проверка электронной почты по умолчанию в настоящее время является одной из самых уродливых вещей, которые я когда-либо видел в дизайне Google!

Chrome HTML5 email type form validation

Однако, похоже, он содержится в стандартном div, поэтомуВы можете внести в него некоторые изменения, если не забудете затем сбросить эти значения.

Я обнаружил, что вы можете изменить фон, размер и цвет шрифта, рамку и тень, например,

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).

2 голосов
/ 16 апреля 2016

Добавлен класс к типу ввода. и отображается сообщение там. Надеюсь, что помогает после небольшой настройки. рабочий код:

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>
0 голосов
/ 10 ноября 2014

Я понимаю, что это довольно старый вопрос, но я нашел эту библиотеку, которая, как мне кажется, может быть полезна для других, которые находят это.

http://afarkas.github.io/webshim/demos/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...