コンテンツが異なる複数のdivがあります(ユーザー固有)。これらのdivは、10emの高さに折りたたまれています。その高さはヘッダーの高さと同じです。クリックすると、コンテンツ全体が展開されて表示されます。 "height:auto"のプレーンCSSマジックを使用できない理由は、スクロールの展開と折りたたみのアニメーションです。 Max-Heightとさまざまなソリューションは、私が望むやり方ではうまく動作しないので、javascriptを使って行う必要があります。リサイズでdivsコンテンツの高さを取得する - バニラのjavascript
Javascriptを
//expand & collapse paper
var paperHead = document.getElementsByClassName('paperHead');
for (var i = 0; i < paperHead.length; i++) {
paperHead[i].addEventListener('click', function() {
var selectedPaper = this.parentElement;
var sectionHeight = selectedPaper.scrollHeight;
var expanded = selectedPaper.getAttribute('expanded') === 'true';
if (expanded) {
this.parentElement.style.height = '10em';
this.parentElement.removeAttribute('expanded');
} else {
selectedPaper.style.height = sectionHeight + 'px';
selectedPaper.setAttribute('expanded', 'true');
}
});
*here is the resize code included*
}
すべてが正常に動作し、どのように私はそれを期待されています。しかし、このコードでは十分ではない場合があります。ユーザーがウィンドウのサイズを変更すると、高さはコンテンツにはもう収まりません。だから私はサイズ変更機能を追加しようとしたが、私は問題になってポイントを取得しないでください。
リサイズ-コード:
window.addEventListener('resize', function() {
var selectedPaper = document.querySelectorAll("[expanded='true']");
for (var i = 0; i < selectedPaper.length; i++) {
var actualHeight = selectedPaper[i].scrollHeight;
selectedPaper[i].style.height = actualHeight + 'px';
}
});
このコードは、例の50%に適しています。私のウィンドウの幅を小さくすると、すべて問題ありません。展開されているdivは高さが増します。しかし、ウィンドウの幅を広げてdivの高さを下げると、反対方向は機能しません。そうではありません。
"scrollHeight"のように、コンテンツに必要な最小の高さを得ることができましたが、それはすでに必要としている余分なスペースは考慮されません。 私はoffsetHeight、innerHeight、outerHeightを試してみましたが、それらのどれも私のために働いていないので、コード自体に何か問題があると思います。
あらかじめ、バニラのjavascriptをお願いします。
'expanded'は有効な属性ですか?ここで属性を「取得」または「設定」しようとしていますか? 'selectedPaper.getAttribute( 'expanded')=== 'true''最小限の例を作ることができればいいです。 [**最小限で完全で検証可能なサンプルを作成する方法**](https://stackoverflow.com/help/mcve) – NewToJS
私はjavascriptを初めて使うので、有効な属性かどうかわかりません。この "拡張されたケース"のためだけに設定すれば、HTML有効でなければなりませんか?私の理解のために、私は確かに、この属性を設定したい。しかし、私がselectedPaper.setAttribute( 'expanded')=== 'true'を選択すると、なぜ動作しないのかわかりません。 – Flo
独自の属性を作成することができます。また、それらの属性を使用/アクセスできるセレクタもありますが、** 'data-expanded' **属性を使用するカスタム属性の場合は正しい方法です。ここにはいくつかの[**データ属性のドキュメント**](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) – NewToJS