Мне кажется, у псевдоклассов -moz-focus-inner и -moz-focusring одна и та же задача.
Хотя я часто вижу в примерах свойство -moz-focus-inner, похоже, что оно никак не влияет на форматирование элементов формы, в отличие от -moz-focusring (по крайней мере, под Firefox 66/Win).
Может ли кто-нибудь объяснить мне, в чем разница между двумя свойствами, и если и когда мне нужно -moz-focus-inner?
-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).
Источники
Хм. Это хороший вопрос. Основываясь на определении «псевдо-класса», мне кажется, по крайней мере, что -moz-focus-inner
подпадает под эту категорию: т. е. применение «фантомного класса» в случае динамического состояния элемента, которое входит в состояние и выходит из него. снаружи. Псевдоэлементы позволяют определять логические элементы, которых на самом деле нет в дереве документа. Но, может быть, у кого-то еще будет лучшее разъяснение...?
Если вы считаете, что мой ответ является достаточным ответом на ваш вопрос, рассмотрите возможность пометки вопроса как ответа. Спасибо, @Janek!
Спасибо за развернутый ответ! -moz-focus-inner — это псевдоэлемент — это правильно?