В моем проекте мне нужно убедиться, что я могу применить определенное свойство CSS к элементу HTML. Например, мне нужно проверить, поддерживается ли свойство "color" тегом "img". Я помню, где-то читал, что приведенный ниже код может быть использован для проверки.
var image = document.createElement('img');
if(image.style.color)
image.style.color = "blue";
Но это возвращает неправильный результат. Если кто-то знает, как можно проверить, поддерживается ли свойство элементом html, ответьте.
Благодарю.
Если вы хотите узнать, присутствует ли свойство объекта в объекте, вы можете сделать что-то вроде:
var image = document.createElement('img');
for (var key in image.style) {
if (key == "color") image.style.key = "blue";
}
Предупреждение 1: как утверждают другие, эта проверка может иметь мало смысла, кроме случаев, связанных с конкретными лицами;
Предупреждение 2: верхний код проверяет, присвоил ли браузер или пользователь свой объект объекту (например, какой-то браузер, такой как Webkit, делает это для style
, другие могут не делать этого, как старый IE).
Буквально этот код просто проверяет, есть ли color
свойства в объекте родного style
элемента. Он не обещает ничего относительно действительности такого имущества. Действительно, вы можете хранить любое свойство объекта; независимо от того, имел ли он стилистический эффект, другой вопрос.
JavaScript не является преподавателем CSS, и поэтому у него на самом деле нет механизма для сообщения о том, эффективны ли примененные стили. Ближайшая вещь, о которой я могу думать, - сделать какую-то итеративную развертку по элементам, вычисленным стилям (но даже тогда вам нужно будет предоставить этот список стилей, то есть рассказать, для чего он перебирается) и сравнить их значения до и после применение данного свойства.
Однако это было бы неудобно, потому что браузер может сообщать стиль в стиле, отличном от того, в котором вы его применили. Например, вы можете установить цвет как HEX, но он может быть указан из вычисленных стилей как RGB (a).
По спецификациям CSS все свойства могут быть установлены для всех элементов. Они могут не иметь потенциального влияния на элемент ("применять к нему", использовать терминологию CSS, которая немного нечетна), но это зависит от других свойств элемента. Например, width
не применяется к элементу span
, но если вы установите display: inline-block
на элементе, к нему применяется width
.
Более того, например, свойство color
безусловно, "относится к" элементу img
, но влияет ли оно на рендеринг, является другой проблемой. В основном это не так, но если изображение недоступно, текст alt
появляется (или должен появляться) в объявленном цвете.
Поэтому вы должны подумать о том, что вам действительно нужно знать и почему.