Как получить правило неизвестного стиля в MS Edge с JavaScript

Я хочу использовать правило CSS object-fit.
Это не поддерживается в MSIE и MS Edge Browser.
Хотя для IE есть несколько полисов, я не знаю, что работает в Edge.

например. polyfill fitie Джонатана Нила работает с IE, но не в Edge (по крайней мере, не на моей машине). Это связано с тем, что fiie использует element.currentStyle и element.runtimeStyle, которые являются только MS-объектами JS, которые больше не поддерживаются в Edge-браузерах. Но если я использую window.getComputedStyle(element).getPropertyValue('object-fit'), Edge ничего не возвращает.

Итак, как мне получить правило правила CSS object-fit с JavaScript в браузере MS Edge?

img = document.getElementById('i');
s = self.getComputedStyle(img);
console.log('object-fit: ', s.getPropertyValue('object-fit'));
console.log('-ms-object-fit: ', s.getPropertyValue('-ms-object-fit'));
div {
  width: 400px;
  height: 320px;
  overflow: hidden;
}
#i {
  display: block;
  width: 100%;
  height: 100%;
  -ms-object-fit: cover;
  object-fit: cover;
}

div {
  box-sizing: border-box;
  border: 1px solid gold;
}
div,
p {
  font-family: sans-serif;
  font-size: 20px;
  width: 400px;
  margin: 0 auto;
}
<p>img: Has object-fit CSS rule, but does not appear in MS Edge JavaScript log</p>
<div>
<img src="https://dummyimage.com/640x240/333/444.png" id="i" />
</div>

Ответы

Ответ 1

Вы должны иметь возможность ссылаться на него напрямую:

// 'Fill' in Chrome and undefined in Edge
console.log('object-fit',  
    window.getComputedStyle(document.querySelector('.test')).objectFit);

// 'rgb(255,0,0)' in both
console.log('color', 
    window.getComputedStyle(document.querySelector('.test')).color);
.test{ color: red; }
<div class="test">test</div>

Ответ 2

Я хочу использовать правило CSS с привязкой к объекту.

Вам не нужно получать значение правила правила CSS object-fit с JavaScript в браузере MS Edge, чтобы сделать img закрытым родителем.

Бонус: не нужно использовать polyfill и работает во всех браузерах до IE9

Боковое примечание, MS Edge ver. 16 поддерживает object-fit

Вот решение, которое работает точно как object-fit: cover, используя transform: translate и min-width/height.

div {
  width: 400px;
  height: 320px;
  box-sizing: border-box;
  border: 1px solid gold;
  margin: 0 auto;
  overflow: hidden;
}

#i {
  position: relative;
  display: block;
  min-width: 100%;
  min-height: 100%;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
}
<div>
  <img src="https://dummyimage.com/640x240/333/444.png" id="i" />
</div>