Что вызывает вспышку серого цвета, когда я нажимаю на ввод на своем iPhone?

#html #css

Вопрос:

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

Я удалил весь CSS, но серая вспышка осталась. Он не виден в настольном Сафари, только в мобильном Сафари.

Что является причиной этого? Как мне предотвратить это?

 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Why do the inputs flash?</title>

  <style type="text/css">
    input {
      display: block;
      width: 100%;
      border-width: 0 0 1px 0;
      border-radius: 0px;
    }
  </style>
</head>
<body>
  <input type="radio" name="mode" id="mode1" value="mode1">
  <label for="mode1">Mode 1</label>

  <input type="radio" name="mode" id="mode2" value="mode2">
  <label for="mode2">Mode 2</label>

  <input type="radio" name="mode" id="mode3" value="mode3">
  <label for="mode3">Mode 3</label>

  <label for="hello">
    <input checked type="checkbox" id="hello">
    <span class="toggle">
      <span class="switch"></span>
    </span>
    <span class="label">Check me</span>
  </label>
  
  <form action="">
    <label for="text-input">
      Enter text
      <input type="text">
    </label>

    <label for="email-iput">
      Enter email here
      <input type="email">
    </label>
  </form>
</body>
</html> 

серые мигающие входы

Комментарии:

1. Вы пробовали это с абсолютно нулевым css?

2. Я бы рекомендовал опубликовать изображение разметки флэш-памяти, о которой вы говорите, так как мы на самом деле не можем просматривать представление iPhone ни на одной игровой площадке с кодом. Это поможет лучше ответить на ваш вопрос.

3. ДА. Вспышка все еще там без CSS. Я добавил стиль, чтобы его было легче увидеть.

4. Я предлагаю обернуть ваш label флажок вокруг флажка и span или p с текстом в нем. Проблема в том, что вы растянули input их по всему экрану; технически, радио/проверка также должны быть растянуты, но, поскольку они нарисованы ОС как квадратные, они растягиваются только при нажатии.

Ответ №1:

Используйте display: inline-block; вместо display: block;

Протестировано в новейшей версии Safari в IOS 15

Вот пример:

 /* Ignore this */

* {
  margin: 0;
  padding: 0;
}

/* Width part */

#first {
  display: block;
  background: red;
}

#second {
  display: inline-block;
  background: red;
} 
 <p id="first">This has a 100% width</p>

<br>

<p id="second">This text has a background color based on the texts lenght</p> 

Так что измените это:

 input {
  display: block;
  width: 100%;
  border-width: 0 0 1px 0;
  border-radius: 0px;
}
 

к этому:

 input {
   display: inline-block;
   width: 100%;
   border-width: 0 0 1px 0;
   border-radius: 0px;
}
 

или только это:

 input {
  display: inline-block;
} 
 <input type="checkbox"> 

Комментарии:

1. Для меня это все равно приводит к вспышке серого. ФУ, я использую 14,8

Ответ №2:

Элементы радио и флажка не должны использовать свойство width в том смысле, в каком вы его используете. Это должен быть фиксированный размер элемента, каким бы он ни был. Если вы хотите, чтобы он занимал всю строку, вам следует завернуть его в div. Как показано ниже.

Однако может существовать CSS-способ управления цветом с помощью :селектора фокуса. Но я не могу проверить это, так как у меня нет доступа к iPhone.

 input:focus {
    background-color:yellow;
}
 
 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Why do the inputs flash?</title>

  <style type="text/css">
    input {
      display: block;
      border-width: 0 0 1px 0;
      border-radius: 0px;
    }

  </style>
</head>
<body>
  <div class="i-should-be-full-width">
    <input type="radio" name="mode" id="mode1" value="mode1">
  </div>
  <label for="mode1">Mode 1</label>

  <input type="radio" name="mode" id="mode2" value="mode2">
  <label for="mode2">Mode 2</label>

  <input type="radio" name="mode" id="mode3" value="mode3">
  <label for="mode3">Mode 3</label>

  <label for="hello">
    <input checked type="checkbox" id="hello">
    <span class="toggle">
      <span class="switch"></span>
    </span>
    <span class="label">Check me</span>
  </label>
  
  <form action="">
    <label for="text-input">
      Enter text
      <input type="text">
    </label>

    <label for="email-iput">
      Enter email here
      <input type="email">
    </label>
  </form>
</body>
</html> 

Комментарии:

1. Я удалил width укладку, но все равно получаю серую вспышку. Я также пытался изменить цвет фона, но серая вспышка остается. input:focus

2. Тогда я не могу вам помочь, это за пределами моих полномочий, извините.

Ответ №3:

Я погуглил американский орфографический словарь и нашел ответ на CSS-трюки.

-webkit-tap-highlight-color: rgba(0,0,0,0); А затем разрешить :active styles работать в вашем CSS на странице в мобильном Safari: document.addEventListener("touchstart", function(){}, true);

Редактировать

На самом деле, мне нужно только -webkit-tap-highlight-color: rgba(0,0,0,0); отключить серую вспышку.