Должен ли я использовать CSS:disabled псевдокласс или [disabled] селектор атрибутов или это вопрос мнения?

Я пытаюсь создать стиль отключенного ввода. Я могу использовать:

.myInput[disabled] { }

или

.myInput:disabled { }

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

мне не нужно поддерживать старые браузеры (это приложение интрасети), поэтому это:

  • атрибут новее и лучше
  • псевдо-класс по-прежнему путь
  • как вам больше нравится
  • есть техническая причина использовать один над другим

2 ответов


атрибут селектора современной технологии CSS3 пути и путь вперед?

  • атрибут новее и лучше

нет; на самом деле селекторы атрибутов существуют с в CSS2 и disabled сам атрибут существует с HTML 4. Насколько мне известно,:disabled псевдо-класс был введен в селекторы 3, что делает псевдо-класс новые.

  • есть техническая причина использовать один над другим

да, в какой-то степени.

с селектором атрибутов вы полагаетесь на знание того, что документ, который вы стилизуете, использует disabled атрибут для указания отключенных полей. Теоретически, если вы стилизовали что-то, что не было HTML, отключенные поля не могут быть представлены с помощью disabled атрибут, например, он может будь enabled="false" или что-то подобное. Даже будущие выпуски HTML могут ввести новые элементы, которые используют различные атрибуты для представления состояния enabled / disabled; эти элементы не будут соответствовать [disabled] селектор атрибута.

на :disabled псевдо-класс отделяет селектор от документа, с которым вы работаете. Спецификация просто заявляет, что она нацелена на элементы, которые отключены, и что включен ли элемент, отключен или нет, является определен язык документа вместо:

что представляет собой активное состояние, отключенное состояние, и элемент пользовательского интерфейса зависит от языка. В типичном документе большинство элементов не будет ни :enabled, ни :disabled.

другими словами, когда вы используете псевдо-класс, UA автоматически вычисляет, какие элементы соответствуют на основе документа, который вы стилизуете, поэтому вам не нужно говорить ему, как.

С точки зрения DOM, I верьте установке disabled свойство элемента DOM также изменяет html-элемент disabled атрибут, что означает, что нет никакой разницы между любым селектором с манипуляцией DOM. Я не уверен, что это зависит от браузера, но вот скрипка что демонстрирует в последних версиях всех основных браузеров:

// The following statement removes the disabled attribute from the first input
document.querySelector('input:first-child').disabled = false;

вы, скорее всего, будете стилизовать HTML, поэтому ничто из этого не может иметь для вас никакого значения, но если совместимость с браузером не является вопрос я бы выбрал :enabled и :disabled над :not([disabled]) и [disabled] просто потому, что псевдоклассы несут семантику, которой нет у селектора атрибутов. Я такой же пурист.


оказывается, что Internet Explorer 10 и 11 не распознают :disabled псевдокласс на некоторых элементах и отлично работает только с синтаксисом селектора атрибутов.

#test1:disabled { color: graytext; }
#test2[disabled] { color: graytext; }
<form>
<fieldset id="test1" disabled>:disabled</fieldset>
<fieldset id="test2" disabled>[disabled]</fieldset>
</form>

код, обрезанный выше, отображается в IE следующим образом:

пока вы только укладка input элементы, вы должны быть в порядке в любом случае. Все-таки это хороший совет, чтобы проверить конечный результат во всех браузерах, которые вы хотите поддержка.