【发布时间】:2016-08-25 01:17:45
【问题描述】:
我有一个CSS 动画效果,由于分层 问题而难以实现。请参阅下面的 sn-p:
var toggle = document.getElementById('toggle');
function toggleF() {
'use strict';
document.querySelector('nav').classList.add('fuzzyState');
}
toggle.addEventListener('click', toggleF);
body {
height: 90%;
color: #222;
text-align: center overflow:hidden;
}
button {
outline: 0;
cursor: pointer
}
#toggle {
float: left;
width: 38px;
height: 38px;
padding: 5px;
margin: auto;
background: #fff;
color: #666;
border: 0;
font-size: 150%
}
#toggle:hover {
background: #222;
color: #eee;
user-select: none;
-webkit-user-select: none
}
#toggle:active {
background: #022;
color: #fff
}
nav ul:after {
content"";
display: block;
clear: both
}
nav ul {
height: 150px;
margin: 0;
padding: 0;
font-size: 150%
}
nav li {
width: 140px;
height: 140px;
margin: 5px;
float: left;
list-style: none;
user-select: none;
-webkit-user-select: none
}
nav button {
display: block;
position: relative;
top: 50%;
width: 100%;
height: 100%;
background: transparent;
border: 0;
text-transform: uppercase;
transform: translateY(-50%)
}
nav button:hover {
background: #022;
color: #eee
}
nav button:active {
background: #033;
color: #fff
}
ul hr {
position: relative;
top: 50%;
width: 1px;
height: 90px;
margin: 10px;
background: #eee;
border: 0;
float: left;
transform: translateY(-50%);
z-index: 2
}
nav.fuzzyState #dos {
transform: translateX(230px)
}
nav.fuzzyState #uno {
transform: translateX(400px);
-webkit-filter: blur(1px)
}
nav.fuzzyState #tres {
/*transform:translateX(-230px)*/
}
nav #tres {
position: relative;
z-index: 1
}
#leftNavMask {
background: #fff;
position: absolute;
top: 15%;
right: 0;
left: 356px;
width: 200px;
height: 190px;
text-align: justify;
transform: translateY(-50%);
}
#rightNavMask {
background: #fff;
position: absolute;
top: 15%;
right: 0;
left: 156px;
width: 200px;
height: 190px;
text-align: justify;
transform: translateY(-50%);
z-index: -1
}
#dos,
#tres {
transition: transform 0.7s ease-in-out
}
#uno {
transition: transform 1s ease-in-out, -webkit-filter 1s ease-in-out;
}
<button id="toggle">+</button>
<nav>
<ul>
<li id="uno"><button>uno</button></li>
<li id="dos"><button>dos</button></li>
<hr>
<li id="tres"><button>tres</button></li>
<div id="leftNavMask"></div>
<div id="rightNavMask"></div>
</ul>
</nav>
单击+ 按钮后,我的目标是使tres 按钮向左滑动,同时像uno 和dos 按钮一样被屏蔽,但方向相反。似乎不可能成功,因为无论z-index 我给出任何元素,都无法将左掩码放在正确元素的顶部,同时让右掩码发挥作用。没有jQuery,有什么简单的方法可以做到这一点吗?谢谢。
澄清:uno 和 dos 按钮当前位于div 下方,该div 的颜色与背景相匹配。我需要 tres 按钮向左滑动 under 第二个 div 以某种方式位于 tres 按钮的顶部以掩盖它,但也在 uno 和 dos 按钮的下方,所以他们一开始并没有被阻止。
【问题讨论】:
-
所以 1 和 2 的行为是正确的,但是你想让 3 滑到那条线后面的左边吗?
-
@Leeish,没错。如果您在我的 CSS 中为
nav.fuzzyState #tres取消注释代码,您将能够看到会发生什么。 #3 刚好超过其他 div。 -
我不认为它可以做到,但我正在投票看看是否有人可以。您想要使用 z-index 的堆叠顺序是不可能的。你可能会用 javascript 做一些疯狂的时间安排,但我很想看看是否有人可以在没有 JS 的情况下完成它。
-
@Leeish 看起来我们赢了。
-
呃。我被困在尝试像你一样使用堆叠。溢出工作正常。
标签: javascript html css animation