#Wrapper
だから、固定幅のDIVがあります。その DIV 内に、#Panel
幅が固定された別の DIV があります。
<div id="Wrapper">
<p>...</p>
<div id="Panel">Panel</div>
<p>...</p>
</div>
Panel の幅が Wrapper の幅よりも大きい場合があります。そのような場合、Panel を完全にラップするように、JavaScript を介して Wrapper を広げたいと思います。
ライブデモ: http://jsfiddle.net/H6rML/
.scrollWidth
Panel の幅を決定するために Wrapper で使用するつもりでした。ただし、問題は、Wrapper に水平パディングがあり、.scrollWidth
何らかの理由でラッパーの左パディングしか含まれていないことです。そう:
Wrapper.scrollWidth === Wrapper.LeftPadding + Panel.Width
したがって、与えられた:
#Wrapper {
width: 200px;
padding: 10px;
}
#Panel {
width: 300px;
}
Wrapper.scrollWidth
を返しますが310px
、これはあまり役に立ちません。パディングが含まれておらず、パネルの幅のみが返された場合.scrollWidth
は、それで作業できます (パディングをその値に手動で追加します)。両方のパディングが含まれていれば、それも使用できます。しかし、なぜ左のパディングだけが含まれているのでしょうか? (ちなみに、この動作はクロスブラウザーのようです。)
いくつかの追加メモ:
Wrapper で幅を直接設定することはできません。実際のコードでは、Wrapper の数レベル上にある祖先要素に幅を設定し、カスタム API を使用して幅を設定しています。
320px
これが、完全な値を取得する必要がある理由です。Wrapper の内容に依存しない解決策を希望します。私のデモでは Panel ですが、他のシナリオでは、オーバーフローする別の要素や複数の要素が存在する可能性があります。それが私が
.scrollWidth
Wrapperを使った理由です。
320px
値に適切なパディングを手動で追加せずに値を取得する方法はあり.scrollWidth
ますか?
ところで、標準によれば、適切なパディングを含める必要があります。
scrollWidth 属性は、次の手順を実行した結果を返す必要があります。
要素に CSS レイアウト ボックスが関連付けられていない場合は、0 を返し、これらの手順を終了します。
要素がルート要素で、ドキュメントが互換モードでない場合は、max(ドキュメント コンテンツの幅、innerWidth の値) を返します。
要素が HTML body 要素であり、Document が quirks モードの場合は、max(ドキュメント コンテンツの幅、innerWidth の値) を返します。
'padding-left' プロパティの計算値、'padding-right' の計算値、および要素のコンテンツ幅を返します。
ソース: http://www.w3.org/TR/cssom-view/
ブラウザがそれに応じて動作しないのはなぜですか?
私の投稿をさらに明確にするために、2 つの主な質問をまとめてみましょう。
(1) 標準で値に適切なパディングを含める必要があると規定されている.scrollWidth
場合、ブラウザがそれに応じて動作しないのはなぜですか?
320px
(2)正しいパディングを手動で追加しなくても、正しい値(私の場合)を取得することは可能ですか?
この質問は別のスレッドで回答されています
この質問に対する答えはここにあります:子要素が水平方向にオーバーフローする場合、親の右側のパディングが無視されるのはなぜですか?
</p>