Разница между псевдоклассами -moz-focus-inner и -moz-focusring

Мне кажется, у псевдоклассов -moz-focus-inner и -moz-focusring одна и та же задача.

Хотя я часто вижу в примерах свойство -moz-focus-inner, похоже, что оно никак не влияет на форматирование элементов формы, в отличие от -moz-focusring (по крайней мере, под Firefox 66/Win).

Может ли кто-нибудь объяснить мне, в чем разница между двумя свойствами, и если и когда мне нужно -moz-focus-inner?

Приемы 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
0
583
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

-moz-focusring — это только Mozilla, нестандартное расширение псевдокласса, которое не следует использовать в производстве, поскольку оно не соответствует стандарту. Mozilla предполагает, что некоторые разработчики использовали его, чтобы различать фокусировку пользователей с помощью щелчка мыши и фокусировку с помощью табуляции на клавиатуре. focusring еще не определен ни в одной спецификации. Он соответствует только в том случае, если элемент уже имеет фокус, и разработчик определяет, что вокруг него должно быть нарисовано кольцо фокуса.

-moz-focus-inner — это активный слой (их реализация focus-inner), который добавляет границу к сфокусированным кнопкам не вместо контура фокуса по умолчанию, а в добавление к нему (в виде внутренней пунктирной черной границы). Это типично нежелательное поведение, которое можно устранить, например, с помощью normalize.css или просто написав собственное правило:

button::-moz-focus-inner {
  border: 0;
}

Почему Mozilla внедрила -moz-focus-inner так, что это раздражает многих разработчиков? Я думаю, это связано с тем, что это проект с долгой историей вкладов и экспериментов. Но главное отличие, с точки зрения разработки, заключается в том, что вам, как правило, нужно каким-то образом «иметь дело» с -moz-focus-inner, возможно, путем устранения его с помощью пользовательского правила CSS (если вы не используете хочу дополнительную версию FF этого визуального индикатора фокуса), тогда как -moz-focusring представляет нестандартный псевдокласс, обсуждаемый рабочей группой, который может стать частью спецификации в какой-то момент в будущем (селекторы 4 или 5).

Источники

  1. https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-focusring
  2. https://github.com/necolas/normalize.css/issues/393
  3. Как удалить пунктирный контур Firefox на КНОПКАХ, а также на ссылках?

Спасибо за развернутый ответ! -moz-focus-inner — это псевдоэлемент — это правильно?

Janek 10.04.2019 13:33

Хм. Это хороший вопрос. Основываясь на определении «псевдо-класса», мне кажется, по крайней мере, что -moz-focus-inner подпадает под эту категорию: т. е. применение «фантомного класса» в случае динамического состояния элемента, которое входит в состояние и выходит из него. снаружи. Псевдоэлементы позволяют определять логические элементы, которых на самом деле нет в дереве документа. Но, может быть, у кого-то еще будет лучшее разъяснение...?

Donkey Shame 10.04.2019 13:45

Если вы считаете, что мой ответ является достаточным ответом на ваш вопрос, рассмотрите возможность пометки вопроса как ответа. Спасибо, @Janek!

Donkey Shame 10.04.2019 20:17

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