2017-12-29 22 views
-1

私は、純粋なCSSベースのメニューに取り組んでいます。メニューのスライドを作成しようとしましたが、動作させることができませんでした。私はオンラインで多くのソリューションを見ていましたが、私の場合はどれも解決しませんでした。cssアニメーションを使用してメニューをアニメーション化する方法は?

ここに私の場合のレイダウンがあります。

  • メニューには、タイトルとサブアイテム(サブメニュー)があります。このメニューは1つのレベルに過ぎません。
  • メニュータイトルの背後にあるように、サブメニューの高さが必要です。
  • サブアイテムの数は動的なので、特定の高さを使用せずにこれを達成したいと思います。
  • transform:translateYはより良いオプションのようですが、メニュー項目はタイトルの上に表示されます。
  • メニュー項目がメニューのタイトルの上に表示されず、翻訳などを使用する必要はありません。

正しいトラックにいるのか、何か初心者が欠けているのか分かりません。

$(function() { 
 
    $('.accordion-tabs__header').click(function() { 
 
    $('.accordion-tabs__body').toggleClass('collapsed'); 
 
    $('.accordion-tabs__body').toggleClass('expanded'); 
 
    }); 
 
});
.accordion-tabs { 
 
    position: relative; 
 
    top: 2rem; 
 
    width: 60%; 
 
} 
 
.accordion-tabs__header { 
 
    transition-delay: 1s; 
 
    display: flex; 
 
    align-items: center; 
 
    padding: 1rem 0.5rem; 
 
    z-index: 10; 
 
    position: relative; 
 
    background-color: azure; 
 
} 
 
.accordion-tabs__header__title { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.accordion-tabs__body { 
 
    position: absolute; 
 
    width: 100%; 
 
    transition: 200ms transform ease-in-out; 
 
} 
 
.accordion-tabs__body.expanded { 
 
    z-index: 1; 
 
    transform: translateY(0%); 
 
} 
 
.accordion-tabs__body.collapsed { 
 
    z-index: 1; 
 
    transform: translateY(-100%); 
 
} 
 

 
.accordion-tabs__body .accordion-tabs__body__link { 
 
    display: flex; 
 
    align-items: center; 
 
    padding: 0.875rem; 
 
    background-color: antiquewhite; 
 
} 
 

 
.accordion-tabs__body .accordion-tabs__body__link a{ 
 
    text-decoration: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='wrapper'> 
 
    <div class="accordion-tabs"> 
 
    <div class="accordion-tabs__header"> 
 
     <div class="accordion-tabs__header__title">Menu Title Looong</div> 
 
    </div> 
 
    <div class="accordion-tabs__body collapsed"> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item One</a></div> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item One</a></div> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item Three</a></div> 
 
    </div> 
 
    </div> 
 
</div>

ここに私のコードにcodepenだ - https://codepen.io/flexdinesh/pen/VybwwE

+1

あなたは、自動高さで正しくそれをアニメーション化することはできません。最大高さをアニメートし、メニューの最大高を設定することができます。これを見てください:https://stackoverflow.com/questions/3508605/how-can-i-transition-height-0-to-height-auto-using-css – Phiter

+0

@Phiter私は最大高さを試しました。これは期待通りに機能しますが、アニメーションはReact-Reduxでトリガするまでに時間がかかります。反応と最大高さのバーチャルドームと関係があります。 –

+0

固定高さを設定しても構わない場合は、オーバーフロー隠しで使用できます。 – Phiter

答えて

0

私は、最大高さでこれを達成するために管理。

リアクションでこのコードを使用すると、スライドアップアニメーションが少し遅くなりました。しかし、私はそれを簡単に過ぎ去って見えるようにしました。

$(function() { 
 
    $('.accordion-tabs__header').click(function() { 
 
    $('.accordion-tabs__body').toggleClass('collapsed'); 
 
    $('.accordion-tabs__body').toggleClass('expanded'); 
 
    }); 
 
});
.accordion-tabs { 
 
    position: relative; 
 
    top: 2rem; 
 
    width: 60%; 
 
} 
 
.accordion-tabs__header { 
 
    transition-delay: 1s; 
 
    display: flex; 
 
    align-items: center; 
 
    padding: 1rem 0.5rem; 
 
    position: relative; 
 
    background-color: azure; 
 
} 
 
.accordion-tabs__header__title { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.accordion-tabs__header.expanded { 
 
    border-bottom: none; 
 
} 
 
.accordion-tabs__body { 
 
    overflow: hidden; 
 
    position: absolute; 
 
    width: 100%; 
 
    border-bottom-width: 2px; 
 
    border-bottom-style: solid; 
 
} 
 
.accordion-tabs__body.expanded { 
 
    max-height: 100vh; 
 
    transition: max-height 500ms ease-in; 
 
} 
 
.accordion-tabs__body.collapsed { 
 
    max-height: 0; 
 
    transition: max-height 200ms ease-out; 
 
} 
 
.accordion-tabs__body__link { 
 
    display: flex; 
 
    align-items: center; 
 
    padding: 0.875rem; 
 
    border-top-width: 1px; 
 
    border-top-style: solid; 
 
    background-color: antiquewhite; 
 
} 
 
.accordion-tabs__body__link a { 
 
    text-decoration: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='wrapper'> 
 
    <div class="accordion-tabs"> 
 
    <div class="accordion-tabs__header"> 
 
     <div class="accordion-tabs__header__title">Menu Title Looong</div> 
 
    </div> 
 
    <div class="accordion-tabs__body collapsed"> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item One</a></div> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item One</a></div> 
 
     <div class="accordion-tabs__body__link"><a class="link" href="#">Item Three</a></div> 
 
    </div> 
 
    </div> 
 
</div>

ここで働く更新codepenだ - https://codepen.io/flexdinesh/pen/VyWzKo

関連する問題