CSS3动画幻灯片/隐藏导航以影响其他元素

时间:2014-10-16 08:22:24

标签: html css css3 css-animations

Animated navigation slide to display/hide needs to push content down the page

我想有一个平滑的动画过渡1& 2,触发1时显示。我在这里完成了这个:http://codepen.io/jacksonbeale/pen/epjcs使用负上边距,但问题是1的高度会根据导航中的项目数量而有所不同,所以这对我不起作用。

nav {
    margin-top:-95px;
    width:100%;
    box-sizing:border-box;
    z-index:5;
    -webkit-transition: all 1s ease-in-out;
    -moz-transition: all 1s ease-in-out;
    -o-transition: all 1s ease-in-out;
    transition: all 1s ease-in-out;
    &.showmenu {
      margin-top:0;
    }
  }

我当前的项目不允许我使用jQuery,并且任何js都需要由其他开发人员编写。我只控制html& CSS。我似乎有点讨论这个问题所以如果有人能提出一个关于纯css方法的建议来完成我需要的东西,那将会很棒。

2 个答案:

答案 0 :(得分:4)

你可以这样做:

  • 在菜单和内容周围添加容器
  • 绝对定位您的内容
  • 然后,由于容器只有菜单的高度(内容与position:absolute;不一致),您可以使用translateY通过translateY(-100%) / {{1}来切换菜单。 }

<强> DEMO

HTML:

translateY(0)

CSS:(抱歉,我不熟悉SCSS)

<div class="test">
  <div><span class="menulink">Menu</span></div>
  <div class="content">
    <nav>
      <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Three</li>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Three</li>
      </ul>
    </nav>
    <div>content</div>
  </div>
</div>

jQuery:

.test {
  width:400px;
  position:relative;
  > div, nav {
    border:3px solid #CCC;
  }
  > div:first-child {
    height:30px;
    z-index:10;
    background:teal;
    position:relative;
    z-index:1;
    span {
      float:right;
      display:table;
      height:100%;
      &:hover {
        cursor:pointer;
      }
    }
  }
  nav {
    width:100%;
    box-sizing:border-box;
    z-index:5;
    &.showmenu {
      margin-top:0;
    }
  }
}
.content > div{
  min-height:200px;
    position:absolute;
    left:-3px; top:100%;
    width:100%;
  border:3px solid #ccc;
}
.content{
  z-index:0;
  transform: translateY(-100%);
  -webkit-transform: translateY(-100%);
  -webkit-transition: all 1s ease-in-out;
    -moz-transition: all 1s ease-in-out;
    -o-transition: all 1s ease-in-out;
    transition: all 1s ease-in-out;
}
.content.showmenu{
  transform: translateY(0);
  -webkit-transform: translateY(0);
}

答案 1 :(得分:0)

在项目中添加此代码。

jsfiddle Demo

像这样设置css样式。

<style>
    .menu {
        max-width: 500px;
        background-color: #000;
    }
    .menu a{
        color: #fff;
        text-decoration: none;
    }
.menu ul{
        padding:0px;
        position:relative;
        z-index:999;            
}
    .menu > ul > li{
        display: inline;    
        position: relative;
    }
    .menu > ul > li a{
        display: inline-block;
        padding: 8px 15px;
    }
    .menu li ul{
        top: 120%;
        opacity: 0;
        visibility: hidden;
        position: absolute;
        top: 0;
        width:100%;
        max-width: 150px;
        transition: all 0.5s ease 0s;
        -webkit-transition: all 0.5s ease 0s;
        background-color: rgba(0, 0, 0, 0.8);
    }
    .menu li ul li{
        position: relative;
        list-style: none;
    }        
    .menu li:hover > ul{
            opacity:1;  
            visibility:visible;
            top:100%;
    }
    .menu ul ul > li > ul{
        top: 0% !important;
        left: 120%;
    }
    .menu ul ul li:hover > ul{
        left: 100%;
    }
.no-padding{
        padding-left: 0px;
        padding-right: 0px;
    }

</style

设置HTML代码就像这样。

<nav class="menu">
            <ul>
                <li><a href="#">Home</a>
                    <ul>
                        <li><a href="#">Submenu</a></li>
                        <li><a href="#">Submenu</a></li>
                        <li><a href="#">Submenu</a></li>
                        <li><a href="#">Submenu</a>
                            <ul>
                                <li><a href="#">Submenu</a></li>
                                <li><a href="#">Submenu</a></li>
                                <li><a href="#">Submenu</a></li>
                                <li><a href="#">Submenu</a></li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li><a href="#">About</a></li>
                <li><a href="#">contact</a></li>
            </ul>
    </nav>