Я хотел бы создать парадоксальный эффект с помощью свойства z-index
CSS .
В моем коде есть пять кругов, как на изображении ниже, и все они абсолютно позиционированы без определения z-index
. Поэтому по умолчанию каждый кружок перекрывает предыдущий.
Прямо сейчас круг 5 перекрывает круг 1 (левое изображение). Парадокс, которого я хотел бы достичь, заключается в том, чтобы в то же время кружок 1 находился под кружком 2 и над кружком 5 (как на правом изображении).
(источник: schramek.cz )
Вот мой код
Разметка:
<div class="item i1">1</div>
<div class="item i2">2</div>
<div class="item i3">3</div>
<div class="item i4">4</div>
<div class="item i5">5</div>
CSS
.item {
width: 50px;
height: 50px;
line-height: 50px;
border: 1px solid red;
background: silver;
border-radius: 50%;
text-align: center;
}
.i1 { position: absolute; top: 30px; left: 0px; }
.i2 { position: absolute; top: 0px; left: 35px; }
.i3 { position: absolute; top: 30px; left: 65px; }
.i4 { position: absolute; top: 70px; left: 50px; }
.i5 { position: absolute; top: 70px; left: 15px; }
Живой пример также доступен на http://jsfiddle.net/Kx2k5/ .
Я испробовал множество техник с порядком наложения, контекстом наложения и так далее. Я читал несколько статей об этих техниках, но безуспешно. Как я могу это решить?
Ответы:
Вот моя попытка: http://jsfiddle.net/Kx2k5/1/
(успешно протестирован на
Fx27
,Ch33
,IE9
,Sf5.1.10
иOp19
)CSS
В основном я перекрыл
:after
псевдоэлемент над первым кругом (с некоторыми унаследованными свойствами), затем я обрезал его с помощьюclip()
свойства, поэтому я делаю видимым только его нижнюю часть (где круг#1
перекрывает круг#5
).Для свойств CSS , которые я использовал здесь, этот пример должен работать даже на IE8 (
box-sizing
,clip()
,inherit
, и pseudoelements поддерживается там)Скриншот полученного эффекта
источник
Моя попытка также использовать
clip
. Идея заключалась в том, чтобы получить половину и половинуdiv
. Таким образом установкаz-index
будет работать.Таким образом, вы можете установить верхнюю часть,
z-index: -1
а нижнюю -z-index: 1
.Итог:
ДЕМО ЗДЕСЬ
Примечание. Протестировано в IE 10+, FF 26+, Chrome 33+ и Safari 5.1.7+.
источник
Вот моя попытка.
Я также использую псевдоэлемент, расположенный поверх первого круга, но вместо использования клипа я сохраняю его фон прозрачным и просто даю ему вставку box-shadow, которая соответствует цвету фона кругов (серебристый), а также красный border, чтобы закрыть нижнюю правую часть границы круга.
Демо
CSS (отличается от начальной точки)
Конечный продукт
источник
К сожалению, это всего лишь теоретический ответ, так как по какой-то причине я не могу приступить
-webkit-transform-style: preserve-3d;
к работе (должно быть, совершаю очевидную ошибку, но, похоже, не могу ее понять). В любом случае, прочитав ваш вопрос, я, как и всякий парадокс, задался вопросом, почему это всего лишь кажущаяся невозможность, а не реальная. Еще через несколько секунд я понимаю, что в реальной жизни листья немного поворачиваются, что позволяет такой вещи существовать. Итак, я хотел придумать простую демонстрацию этой техники, но без предыдущего свойства это невозможно (оно переносится на плоский родительский слой). В любом случае, вот базовый код, тем не менееИ css:
И вы можете найти полный код здесь .
источник
JS Fiddle
HTML
CSS
источник
item2
иitem3
. А также переехалposition: absolute
в.ix
и#five
вitem
,item2
иitem3
Живая демонстрация JS Fiddle
Работает и на IE8.
HTML
CSS
источник