Ответ 1
Решение Chrome:
Добавление -webkit-transform: translateZ(0)
в #sidebar
исправило проблему для меня.
Я использовал translateZ(0)
для исправления многочисленных ошибок на экране Chrome за эти годы. Обоснование заключается в том, что, вызывая трехмерное преобразование, повторная краска отделяется от остальной части стека с помощью CSS (я не могу предоставить гораздо больше деталей, чем это, это почти все греческий для меня). В любом случае, похоже, он работает для меня!
#sidebar {
-webkit-transform: translateZ(0);
}
Решение для Opera:
Это не общее решение (необходимо будет настроить в зависимости от требований к позиционированию рассматриваемого элемента). Он работает, заставляя непрерывные перерисовки (с помощью анимации CSS) на свойство, которое может повлиять на макет (заставляя другие коэффициенты компоновки вычисляться и визуализироваться, т.е. Поддерживать фиксированное позиционирование), но на практике этого не делают. В этом случае я использовал margin-bottom
, потому что никак не повлияет на ваш макет страницы (но Opera этого не знает!):
@keyframes noop {
0% { margin-bottom: 0; }
100% { margin-bottom: 1em; }
}
#sidebar {
animation: noop 1s infinite;
}
Примечание. решение не является идеальным, в том, что (на моей машине, по крайней мере), случаи проверки ошибок приведут к мельчайшему мерцанию, поскольку Opera теряет позиционирование и быстро перерисовывает. К сожалению, я думаю, что это так хорошо, как вы получите, потому что как говорит Джордж в своем ответе, это естественное поведение Opera между перерисовками - теоретически мой код делает перерисовку для элемент непрерывный, но на практике будут бесконечно малые пробелы.
РЕДАКТИРОВАТЬ 2 (2013-11-05) : С тех пор я часто сталкивался с вариациями этой ошибки. Хотя исходный плакат с уменьшенным сценарием представляет собой совершенно законную ошибку, большинство случаев происходило в ситуациях, когда на теле есть уже трехмерное преобразование (или аналогично высоко вверх по дереву DOM). Это часто используется в качестве взлома для принудительного рендеринга графического процессора, но на самом деле приведет к неприятным изменениям, например, таким образом. 2 3D-преобразования no-op не дают права: если вы используете один выше дерева, сначала попробуйте удалить его, прежде чем добавлять еще один.
РЕДАКТИРОВАТЬ 3 (2014-12-19) : Chris , что translateZ(0)
не работает в некоторых случаях, когда scale3d(1,1,1)
делает.