私は、お互いに後に続く小さなボックスを持ち、ユーザーがこれらの要素の表示/非表示を切り替えることができるようにしたいという状況があります。私は彼らが私の望むように働いているが、それぞれのボックスが折りたたまれている/隠されているときは、その下のコンテンツは上向きに崩壊しない。トランスフォームを使用してコンテンツを非表示にすると、次のコンテンツが崩壊する
私はこれがなぜあるのか理解していますが、transform
を使用すると、元の位置から変換した要素のスペースが割り当てられるためです。しかし、何かの理由でmargin-top
という否定記号を使用するのと同じように、変換のようにスムーズにアニメートできなかったのと同じ方法で別の方法を実行することができませんでした。
CodePen:http://codepen.io/gutterboy/pen/GqRoJY
CodePen(マージントップバージョン):http://codepen.io/gutterboy/pen/WxNGVG
HTML:
<div class="foo">
<header>
Header
<a href="#" class="toggle" data-content-id="1">Toggle</a>
</header>
<div class="content-wrap">
<div id="content-1" class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
</div>
</div>
</div>
<div class="foo">
<header>
Header
<a href="#" class="toggle" data-content-id="2">Toggle</a>
</header>
<div class="content-wrap">
<div id="content-2" class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
</div>
</div>
</div>
<div class="foo">
<header>
Header
<a href="#" class="toggle" data-content-id="3">Toggle</a>
</header>
<div class="content-wrap">
<div id="content-3" class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
</div>
</div>
</div>
CSS(SCSS):
の.foo {
margin: 10px;
width: 400px;
header {
padding: 10px;
border: 1px solid #000;
border-bottom: 2px solid #000;
}
.content-wrap {
overflow-y: hidden;
transform-style: preserve-3d;
}
.content {
padding: 10px;
background-color: gray;
transform: translateY(0);
border: 1px solid #000;
border-top: none;
transition: 1s;
&.closed {
transform: translateY(-100%);
}
}
}
JS(jQueryの):
$(document).ready(function() {
$('.toggle').on('click', function(e) {
e.preventDefault();
var content_id = $(this).data('content-id');
$('#content-' + content_id).toggleClass('closed');
});
});
進行ボックスが行うと同時に、スムーズに崩壊するには、以下のボックスを取得するために、とにかくありますか?
ボックスは可変な高さであるため、height
を使用することはできません。本当に高いmax-height
を使用するようなハッキーソリューションは避けてください。
を更新しましたか? 2番目のバージョンは私にとって完璧に機能しました。 (最新のChrome) – IdeaMan
崩壊しているdivに関連するすべてのdivを移動すると、いくつかの遅れが発生する可能性があると私は推測しています。これが問題であれば、それほど多くのことはできません。 – IdeaMan
@IdeaMan FireFox。しかし、私はChromeで試してみましたが、それは同じでした。それはダウンよりもはるかに速く変化します。また、それを再び表示するためにクリックすると、開始前に何らかの形の遅れがあるようです。 – Brett