隐藏带过渡的div

时间:2015-06-02 14:38:12

标签: javascript jquery html css css3

我有一个移动菜单,它占用了所有屏幕,我想隐藏并以淡入淡出过渡显示它。

问题在于我使用不透明度来执行此效果,当不透明度设置为0时,链接不可见但仍然可以点击,我尝试使用z-indexdisplay解决此问题但过渡的结果并不相同。

你知道我该怎么办?

这是我的代码fiddle



$(window).ready(function() {
  //MENU MOBILE
   $('#menu-switch').click(function() {
   $( this ).toggleClass('switch-on');
   $('#menu-mobile').toggleClass('animated');
});
});    

.content{
    height:100vh;
    width:100vw;
}
.cmn-toggle-switch {
  z-index: 999;
  display: block;
  position: fixed;
  top:0;
  left:0;
  overflow: hidden;
  margin: 0;
  padding: 0;
  width: 60px;
  height: 50px;
  font-size: 0;
  text-indent: -9999px;
  box-shadow: none;
  border-radius:0;
  border: none;
  cursor: pointer;
  background:transparent;
  
}
.cmn-toggle-switch:focus {
  outline: none;
}
.cmn-toggle-switch span {
  display: block;
  position: absolute;
  top: 20px;
  left: 10px;
  right: 10px;
  height: 5px;
  border-radius: 15px;
  background: black;
    -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.cmn-toggle-switch span::before,
.cmn-toggle-switch span::after {
  position: absolute;
  display: block;
  left: 0;
  width: 120%;
  border-radius: 15px;
  height: 6px;
  background-color: black;
  content: "";
}
.cmn-toggle-switch span::before {
  top: -12px;
  -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.cmn-toggle-switch span::after {
  bottom: -12px;
  -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.cmn-toggle-switch.switch-on span {
  position: absolute;
  top: 20px;
  left: 12px;
  right: 12px;
  height: 4px;
  background: none;
  
}
.cmn-toggle-switch.switch-on span::before {
  opacity:1;
  top:0px;
 background-color:white;
  -moz-transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}

.cmn-toggle-switch.switch-on span::after {
  opacity:1;
 bottom:-2px;
 background-color:white;
  -moz-transform: rotate(-45deg);
  -webkit-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  transform: rotate(-45deg);
}
div#menu-mobile{
    width:100vw;
    height:100vh;
    position:fixed;
    top:0;
    bottom:0;
    opacity:0.95;
    background-color: #BF4139;
    -webkit-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
div#menu-mobile.animated{
    opacity:0;
}
div#menu-mobile ul:first-child{
    margin-top:60px;
}
div#menu-mobile ul{
    margin-left:15%;
}
div#menu-mobile ul li{
    list-style:none;
    padding:8px 0px;
}
div#menu-mobile ul li a{
    color:white !important;
    font-size:16px;
}
div#menu-mobile ul li a:hover{
    color: #001e4e !important;
    font-size:16px;
}
div#menu-mobile span{
    display: block;
  position: absolute;
  margin:0;
  font-size:0;
  top: 165px;
  left: 1px;
  right: 1px;
  height: 4px;
  background: white;
}
div#menu-mobile p{
    font-size:18px;
    color:white;
    text-align:center;
}
#menu-switch {
       display: block;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="content"></div>
<button id="menu-switch" class="cmn-toggle-switch">
   <span>toggle menu</span>
</button>
  <div id="menu-mobile" class="animated">
    <ul>
      <li class="home"><a href="/">Accueil</a></li>
      <li class="publiee"><a href="/pages/publiee">Idée publiée</a></li>
      <li class="en-place"><a href="/pages/enplace">Idée mise en place</a></li>
    </ul>
    <span>sperator</span>
    <p class="name">Nom Prénom</p>
    <ul>
      <li class="profil"><a href="/">Mon Profil</a></li>
      <li class="admin"><a href="/">Espace Administrateur</a></li>
      <li class="deco"><a href="/">Déconnexion</a></li>
    </ul>

  </div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

您还应该在visibility: hidden中使用transition,因为事件仍适用于opacity: 0(请阅读更多here)。

JSFiddle

&#13;
&#13;
$(window).ready(function() {
  //MENU MOBILE
   $('#menu-switch').click(function() {
   $( this ).toggleClass('switch-on');
   $('#menu-mobile').toggleClass('animated');
});
});
&#13;
.content{
    height:100vh;
    width:100vw;
}
.cmn-toggle-switch {
  z-index: 999;
  display: block;
  position: fixed;
  top:0;
  left:0;
  overflow: hidden;
  margin: 0;
  padding: 0;
  width: 60px;
  height: 50px;
  font-size: 0;
  text-indent: -9999px;
  box-shadow: none;
  border-radius:0;
  border: none;
  cursor: pointer;
  background:transparent;
  
}
.cmn-toggle-switch:focus {
  outline: none;
}
.cmn-toggle-switch span {
  display: block;
  position: absolute;
  top: 20px;
  left: 10px;
  right: 10px;
  height: 5px;
  border-radius: 15px;
  background: black;
    -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.cmn-toggle-switch span::before,
.cmn-toggle-switch span::after {
  position: absolute;
  display: block;
  left: 0;
  width: 120%;
  border-radius: 15px;
  height: 6px;
  background-color: black;
  content: "";
}
.cmn-toggle-switch span::before {
  top: -12px;
  -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.cmn-toggle-switch span::after {
  bottom: -12px;
  -webkit-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: all 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.cmn-toggle-switch.switch-on span {
  position: absolute;
  top: 20px;
  left: 12px;
  right: 12px;
  height: 4px;
  background: none;
  
}
.cmn-toggle-switch.switch-on span::before {
  opacity:1;
  top:0px;
 background-color:white;
  -moz-transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}

.cmn-toggle-switch.switch-on span::after {
  opacity:1;
 bottom:-2px;
 background-color:white;
  -moz-transform: rotate(-45deg);
  -webkit-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  transform: rotate(-45deg);
}
div#menu-mobile{
    width:100vw;
    height:100vh;
    position:fixed;
    top:0;
    bottom:0;
    opacity:0.95;
    background-color: #BF4139;
    -webkit-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
   -moz-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
     -o-transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000); 
        transition: opacity 400ms cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
div#menu-mobile.animated{
    opacity: 0;
    visibility: hidden;
}
div#menu-mobile ul:first-child{
    margin-top:60px;
}
div#menu-mobile ul{
    margin-left:15%;
}
div#menu-mobile ul li{
    list-style:none;
    padding:8px 0px;
}
div#menu-mobile ul li a{
    color:white !important;
    font-size:16px;
}
div#menu-mobile ul li a:hover{
    color: #001e4e !important;
    font-size:16px;
}
div#menu-mobile span{
    display: block;
  position: absolute;
  margin:0;
  font-size:0;
  top: 165px;
  left: 1px;
  right: 1px;
  height: 4px;
  background: white;
}
div#menu-mobile p{
    font-size:18px;
    color:white;
    text-align:center;
}
#menu-switch {
       display: block;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="content"></div>
<button id="menu-switch" class="cmn-toggle-switch">
   <span>toggle menu</span>
</button>
  <div id="menu-mobile" class="animated">
    <ul>
      <li class="home"><a href="/">Accueil</a></li>
      <li class="publiee"><a href="/pages/publiee">Idée publiée</a></li>
      <li class="en-place"><a href="/pages/enplace">Idée mise en place</a></li>
    </ul>
    <span>sperator</span>
    <p class="name">Nom Prénom</p>
    <ul>
      <li class="profil"><a href="/">Mon Profil</a></li>
      <li class="admin"><a href="/">Espace Administrateur</a></li>
      <li class="deco"><a href="/">Déconnexion</a></li>
    </ul>

  </div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以将--- title: "Model 1 Coefficients" output: pdf_document twoside: inner=1.25in, outer=0.25in --- 更改为max-height并隐藏溢出。它只是一个可通行的解决方案。

0

FIDDLE

答案 2 :(得分:0)

您可以使用关键帧并为不透明度设置动画,后跟宽度或高度。在这里摆弄https://jsfiddle.net/otvpL8xp/4/

@-moz-keyframes hideMenu {
    0% {
        opacity:1;
    }
    100% {
        opacity: 0;
    }
}
@-moz-keyframes widthMenu {
    0% {
        width:100%;
    }
    100% {
        width: 0;
    }
}
div#menu-mobile.animated {
    animation: hideMenu .4s ease forwards, 
                widthMenu 0s .5s forwards;
}