前提・実現したいこと
em指定された値を用いて、指定要素から高さを引きたいです。
自分で書いたコードは以下の通りですが、
いちいちダミー要素を追加したり、それを削除したり、というの流れを不自然に感じます。
これが一般的なのか、もっと良い方法はないのかを知りたいです。
(jQueryでなくJavaScriptです。)
該当のソースコード
emを引きたい対象の要素は#card
で、1.5rem
で囲まれています。
html
1<div class="outer" style="font-size: 1.5rem"> 2<div id="card" 3 style="width: 200px; 4 height: 200px; 5 background: pink;"></div> 6</div>
js
1const getNewHeight = function( card, em ){ 2 3 // 元のサイズを取得 4 const cardHeight = card.offsetHeight; 5 const cardWidth = card.offsetWidth; 6 7 // ダミー要素を生成 8 var newDiv = document.createElement('div'); 9 newDiv.setAttribute('id','dammy'); 10 11 // CSSを設定 12 Object.assign(newDiv.style,{ 13 height: 'calc('+cardHeight+'px - '+em+'em)', // ex: 'calc(200px - 1.5em)' 14 width : cardWidth + 'px', 15 }); 16 17 // ダミー要素を挿入 18 document.body.appendChild(newDiv); 19 const dammy = document.getElementById('dammy'); 20 21 // 引かれた高さを取得 22 const newHeight = dammy.offsetHeight; 23 24 // 削除して結果を返す 25 dammy.remove(); 26 return newHeight; 27} 28 29const card = document.getElementById('card'); 30const em = 1.5; 31const newHeight = getNewHeight( card, em ); 32console.log('newHeight=',newHeight);
試したこと
ダミー要素の生成と削除が特に不自然に感じるのですが、それ以外に方法が思いつきません。
強いて挙げれば以下のように書いてみましたが、まぁ…案の定できませんでした。
js
1const getNewHeight = function( card, em ){ 2 return parseInt( card.offsetHeight+'px' - em+'em' ); 3} 4 5const card = document.getElementById('card'); 6const em = 1.5; 7const newHeight = getNewHeight( card, em ); 8console.log('newHeight=',newHeight); 9 10
回答1件
あなたの回答
tips
プレビュー