famo.us Настройка z-индекса Firefox не работает

#javascript #css #firefox #z-index #famo.us

#javascript #css #firefox #z-индекс #famo.us

Вопрос:

Я пытаюсь контролировать наслоение поверхностей, используя свойство zIndex. Он отлично работает в Chrome, тогда как в Firefox этого нет. После изучения DOM я заметил, что z-index помечен как 0, независимо от того, что мы установили.

Я воспроизвел проблему в famo.us обучающий код @http://famo.us/university/famous-101/displaying/5 /. Замените код учебника следующим кодом. Обратите внимание на разницу между Chrome и Firefox с одним и тем же кодом.

 var Engine = require('famous/core/Engine');
var Surface = require('famous/core/Surface');

var mainContext = Engine.createContext();

var firstSurface = new Surface({
  size: [200, 400],
  content: 'top',
  properties: {
    color: 'white',
    textAlign: 'center',
    backgroundColor: '#FA5C4F',
    zIndex: 10
  }
});

var secondSurface = new Surface({
  size: [300, 200],
  content: 'bottom',
  properties: {
    color: 'white',
    textAlign: 'center',
    backgroundColor: 'green',
    zIndex: 8
  }
});

mainContext.add(firstSurface);
mainContext.add(secondSurface);
 

Ответ №1:

Вы должны стараться избегать использования свойства zIndex, потому что Famo.us индексирует Z для вас с помощью их движка 3D-рендеринга. Чтобы добиться желаемого, используйте StateModifier и переведите свои поверхности в направлении Z.

Теперь это работает и в FireFox. Надеюсь, это поможет!

 var Engine = require('famous/core/Engine');
var Surface = require('famous/core/Surface');
var Transform  = require('famous/core/Transform');
var StateModifier = require('famous/modifiers/StateModifier');

var mainContext = Engine.createContext();

var firstSurface = new Surface({
  size: [200, 400],
  content: 'top',
  properties: {
    color: 'white',
    textAlign: 'center',
    backgroundColor: '#FA5C4F'
  }
});

firstSurface.state = new StateModifier({
    transform: Transform.translate(0,0,10)
});

var secondSurface = new Surface({
  size: [300, 200],
  content: 'bottom',
  properties: {
    color: 'white',
    textAlign: 'center',
    backgroundColor: 'green',
    }
});

secondSurface.state = new StateModifier({
    transform:Transform.translate(0,0,8)
});

mainContext.add(firstSurface.state).add(firstSurface);
mainContext.add(secondSurface.state).add(secondSurface);
 

Комментарии:

1. Спасибо johntraver. Я буду иметь это в виду. Я тестировал с помощью translateZ, и это сработало. Тем не менее, я пошел дальше и попытался понять, почему z-index не будет работать. Изменение кода Surface следующим образом исправило проблему Оригинал: element.style.zIndex = (matrix[14] * 1000000) | 0; // fix for Firefox z-buffer issues Новое: element.style['z-index'] = (matrix[14] * 1000000) | 0; // fix for Firefox z-buffer issues после изменения этой строки я могу видеть значения z-index в DOM, отражающие значения, указанные в коде. Кроме того, поверхности отображаются на экране в правильном z-порядке.

2. Круто! рад, что вы это поняли!

3. Эти строки Famo.us были необходимы из-за ошибки в Firefox, которая была исправлена в версии 30.0. Ранее Firefox не подчинялся вложенным трансляциям, поэтому нам нужно было применить zIndexing, чтобы получить правильное разделение слоев. Мы удалим это на Famo.us завершите ожидание принятия Firefox 30.