CSS – фокус не работает ни в одном браузере. Почему?

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

но вот код:

input {
  appearance: none;
  position: relative;
  display: inline-block;
  background: lightgrey;
  height: 1.65rem;
  width: 2.76rem;
  vertical-align: middle;
  border-radius: 2rem;
  box-shadow: 0px 1px 3px #0003 inset;
  transition: 0.25s linear background;
}

input::before {
  content: "";
  display: block;
  width: 1.25rem;
  height: 1.25rem;
  background: #fff;
  border-radius: 1.2rem;
  position: absolute;
  top: .2rem;
  left: .2rem;
  box-shadow: 0px 1px 3px #0003;
  transition: 0.25s linear transform;
  transform: translateX(0rem);
}

:checked {
  background: green;
}

:checked::before {
  transform: translateX(1rem);
}

input:focus-visible {
  outline: 2px solid dodgerblue;
  outline-offset: 2px;
}

input:focus {
  outline: none;
  outline-color: transparent;
}

`
<label for = "awesomeFeature">
  <input type = "checkbox" name = "awesomeFeature" id = "awesomeFeature">
  my awesome feature
 </label>

Я ожидаю выделения фокуса

Эй, какую часть кода вы ожидали сработать, но не сработало, сообщите об этом.

Meet 24.07.2024 12:21
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с тем, что селекторы CSS input:focus-visible и input:focus совпадают, когда элемент находится в фокусе.

:focus-visible не более конкретно, чем :focus. В отсутствие каких-либо других селекторов браузер считает ваши селекторы input:focus-visible и input:focus такими же важными, как друг друга. Теперь ваши input:focus-visible правила имеют видимый контур, но ваши input:focus правила имеют контур none. Браузер не может делать и то, и другое, поэтому он выбирает последнее правило этой специфики, которое будет применяться. Правило input:focus побеждает, и элементу присваивается контур none.

Чтобы исправить это, вы можете изменить порядок CSS:

input:focus {
  outline: none;
  outline-color: transparent;
}
input:focus-visible {
  outline: 2px solid dodgerblue;
  outline-offset: 2px;
}

При этом правило :focus-visible является последним и, следовательно, будет применяться именно оно.

да, спасибо большое --- просто сегодня утром вышел не туда...

Luca Giona 24.07.2024 14:18

Другие вопросы по теме