#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);
отключить серую вспышку.