Я получаю странные сбои рендеринга при использовании Firefox для отображения следующего (значительно упрощенного, чтобы удалить аспекты, не относящиеся к проблеме).
В этой форме он должен отображать 3D-преобразованный квадрат и переключать егоразмер после нажатия случайной клавиши.
При использовании Firefox квадрат (большего размера) отображается неправильно, оставляя белый пробел.
Изображение, показывающее пробел
При использовании более сложных фигур результирующие промежутки также увеличиваются в сложности.
После прокрутки, наведения курсора на другую вкладку окна, щелчка где-то внутри или снаружи окна и т. Д., Разрывзаполнено правильно.
В этом примере вы можете написать всю html-часть статически, не связываясь с ней через javascript с помощью .innerHTML
, или вы можете удалить transform-style: preserve-3d;
из .face
, чтобы исправить это.Оба способа не подходят для реального сайта, так как он имеет дело с более сложной геометрией.
Есть идеи, что конкретно вызывает эти глюки и как их предотвратить?
var counter = 0;
function createSquare(w) {
var stylesheet = document.getElementById('stylesheet').sheet;
stylesheet.insertRule(".shape { width:" + w + "em; height:" + w + "em; }", stylesheet.cssRules.length);
document.getElementById('shape').innerHTML = '<div class="face"></div>';
}
function create() {
switch (counter) {
case 0:
createSquare(30);
break;
case 1:
createSquare(50);
break;
}
counter++;
counter %= 2;
}
.wrapper {
perspective: 1000px;
position: absolute;
overflow: hidden;
width: 99.2%;
height: 99.3%;
}
.scene,
.shape,
.face {
position: absolute;
transform-style: preserve-3d;
}
.scene {
width: 100em;
height: 100em;
transform: rotateX(45deg);
}
.face {
width: 100%;
height: 100%;
background-color: red;
}
<html>
<head>
<style id="stylesheet">
</style>
</head>
<body onload="create();" onkeydown="create();">
<div class="wrapper">
<div class="scene">
<div id="shape" class="shape"></div>
</div>
</div>
</body>
</html>