Мне пришлось выяснить ту же проблему недавно, и решение transform: translate3d(0,0,0);
не сработало для меня.
Дело в том, что z-индекс просто складывает элементы в 2D-мире, поэтому, поскольку вы используете 3D-преобразования, z-index не может применяться.
Таким образом, реальный вопрос ИМХО:
Как укладывать элементы в 3D-мире?
Ответ:
Используйте ось Z!
Это просто, но не интуитивно понятно из-за рендеринга браузера.Я сделал JSFiddle, чтобы попытаться проиллюстрировать его. Я старался максимально соответствовать вашей ситуации, что сложно, просто используя свой код на своей странице. В этой скрипке у вас есть четыре (2 на 2 строки) таких флажков. Я сделал еще 2 div (оценка), представляющий элемент, который должен быть над другими. Первая строка глючит, а вторая - нет.
Чтобы увидеть ошибку, вы можете просто переместить курсор над элементом, зная, что курсор - css pointer
на флаге и css col-resize
. Вы можете видеть, что когда вы наводите зеленый элемент слева направо, ваш курсор меняется.
Я сделал несколько схем (да, они уродливы;)), чтобы проиллюстрировать проблему. Вот наши элементы представлены как они должны быть (на мой взгляд) в браузере:
Я думаю, что проблема теперь легче увидеть. Справа, зеленый элемент в синем, это то, что мы хотим. Но, слева, rotateY()
заставил синий элемент «выйти из экрана», пропуская зеленый элемент. Смотрите этот вид «сверху», если это на самом деле не ясно:
Мы можем думать, что синий элемент выходит из экрана на половину его размера. Итак, решение, которое я нашел (я думаю, что это, вероятно, НЕ лучшее решение, но эта работа и кросс-браузер, поскольку вы используете собственные версии браузера transform
, такие как -webkit-transform
.
Прокрутите страницу до второй строки скрипка, наведите зеленый элемент и посмотрите, что курсор остается тем же, НО мы полностью потеряем курсор pointer
над синим элементом. Я «просто» перевел синий элемент на оси Z на -10000px, чтобы быть уверенным, что он далеко Отметьте порядок, который здесь важен, сначала перевод translate3d(0, 0, -10000px)
, затем перспективу и, наконец, поворот, дающий ему: transform: translate3d(0, 0, -10000px) perspective(1200px) rotateY(-45deg);
. Как вы можете видеть на моей последней схеме (от выше):
Синий элемент находится сейчас далеко и не проходит по зеленому. Последней проблемой, которую мы видим, является, является то, что если синий элемент больше 10000 пикселей, он снова перейдет через зеленый элемент.
В заключение, я уверен, что это решение является более обходным решением, чем решение real. Но это было полезно в моем случае, и я надеюсь, что я не откажусь от вашей первоначальной проблемы, и это поможет вам.
Вне темы, но я хочу сообщить вам, что эти два флага перекрываются на меньших экранах, таких как мои. Возможно, вам захочется настроить некоторые вещи на основе ширины экрана пользователя. – Joeytje50
@ Joeytje50 Это будет показано в телевизоре 30-50 дюймов. Я попытаюсь сделать какой-то скрипт, чтобы автоматически изменить «зум», но пока попробуйте «уменьшить его». –
@IvanSeidel. Вы должны включить код в вопрос, чтобы помочь будущим читателям, потому что связанный страница может измениться. – Oriol