我正在尝试建立一个像纸张折叠这样的过渡菜单,有点像这样:
实时测试:http://www.cssplay.co.uk/menus/cssplay-3d-unfolding-menu.html
这是我的代码:
HTML
<nav>
<li class="hov">Hover Me!
<ul class="main">
<li>Item1</li>
<li>Item2</li>
<li>Item3</li>
<li>Item4</li>
</ul>
</li>
</nav>
CSS
nav{
}
ul,li{
margin: 0;
padding: 0;
}
.main{
position:absolute;
z-index:1;
}
.main li{
list-style:none;
background: blue;
width:100px;
padding: 0 5px;
border: 1px solid black;
height: 30px;
line-height: 30px;
/*margin-top: -30px;*/
-webkit-transition: all .5s ease-in-out;
}
.main li:nth-child(odd){
-webkit-transform-origin: top;
-webkit-transform: perspective(350px) rotateX(-90deg);
}
.main li:nth-child(even){
-webkit-transform-origin: bottom;
-webkit-transform: perspective(350px) rotateX(90deg);
}
.main {
-webkit-transition: all .5s ease-in-out;
-webkit-transform-origin: 50% 0%;
-webkit-transform: perspective(350px) rotateX(-90deg);
}
.hov:hover .main {
-webkit-transform-origin: top;
-webkit-transform: perspective(350px) rotateX(0deg);
}
.hov:hover li:nth-child(odd){
-webkit-transform-origin: top;
-webkit-transform: perspective(350px) rotateX(0deg);
margin-top:0;
}
.hov:hover li:nth-child(even){
-webkit-transform-origin: bottom;
-webkit-transform: perspective(350px) rotateX(0deg);
margin-top:0;
}
.main li:first-child{
margin-top:0;
}
.hov{
position:relative;
height: 40px;
width:112px;
background: green;
color: white;
font-size: 13px;
font-family: Helvetica;
font-weight:bold;
text-align: center;
line-height: 40px;
list-style:none;
z-index:2;
}
现场演示
http://codepen.io/razvan-tudosa/pen/BxgJl
问题:
如何使子菜单粘在一起,如示例所示?
答案 0 :(得分:3)
他想要调整子菜单。
为此,请编辑这些css类,如下所示:
.main li:nth-child(even){
margin-top:-65px;
-webkit-transform-origin: bottom;
-webkit-transform: perspective(350px) rotateX(90deg);
}
.hov:hover li:nth-child(odd){
-webkit-transform-origin: top;
-webkit-transform: perspective(30px) rotateX(0deg);
margin-top:0;
}
.hov:hover li:nth-child(even){
-webkit-transform-origin: bottom;
-webkit-transform: perspective(30px) rotateX(0deg);
margin-top:0;
}
然后它似乎非常接近其他效果。
更新:
示例here。
nav{
}
ul,li{
margin: 0;
padding: 0;
}
.main{
position:absolute;
z-index:1;
}
.main li{
list-style:none;
background: blue;
width:100px;
padding: 0 5px;
border: 1px solid black;
height: 30px;
line-height: 30px;
/*margin-top: -30px;*/
-webkit-transition: all .5s ease-in-out;
}
.main li:nth-child(odd){
-webkit-transform-origin: top;
-webkit-transform: perspective(350px) rotateX(-90deg);
}
.main li:nth-child(even){
margin-top:-65px;
-webkit-transform-origin: bottom;
-webkit-transform: perspective(350px) rotateX(90deg);
}
.main {
-webkit-transition: all .5s ease-in-out;
-webkit-transform-origin: 50% 0%;
-webkit-transform: perspective(350px) rotateX(-90deg);
}
.hov:hover .main {
-webkit-transform-origin: top;
-webkit-transform: perspective(350px) rotateX(0deg);
}
.hov:hover li:nth-child(odd){
-webkit-transform-origin: top;
-webkit-transform: perspective(30px) rotateX(0deg);
margin-top:0;
}
.hov:hover li:nth-child(even){
-webkit-transform-origin: bottom;
-webkit-transform: perspective(30px) rotateX(0deg);
margin-top:0;
}
.main li:first-child{
margin-top:0;
}
.hov{
position:relative;
height: 40px;
width:112px;
background: green;
color: white;
font-size: 13px;
font-family: Helvetica;
font-weight:bold;
text-align: center;
line-height: 40px;
list-style:none;
z-index:2;
}
<nav>
<li class="hov">Hover Me!
<ul class="main">
<li>Item1</li>
<li>Item2</li>
<li>Item3</li>
<li>Item4</li>
</ul>
</li>
</nav>
答案 1 :(得分:-1)
如果您在cssplay网站上查看来源,您会注意到Stu Nicols正在为每个项目使用div - 而不是li
<div class="odd first">...
<div class="even">...
<div class="odd">...
<div class="even">...
<div class="odd last">...
</div></div></div></div></div>
CSS使用HTML5转换处理每个类
.concertina div.odd {background:#ddd;
-webkit-transform:perspective(350px) rotateX(-90deg);
-o-transform:perspective(350px) rotateX(-90deg);
transform: perspective(350px) rotateX(-90deg);
}
.concertina div.even {background:#ccc;
-webkit-transform:perspective(350px) rotateX(90deg);
-o-transform:perspective(350px) rotateX(90deg);
transform: perspective(350px) rotateX(90deg);
}
检查www.caniuse.com以查看浏览器兼容性。