余白、境界線、パディングのない要素の正確なサイズ、最も内側のボックスの幅と高さだけを知りたいです(下の画像を参照)。
現在、境界線とパディングを含むサイズを与える関数「getBoundingClientRect」を知っています。パディングを含むRectを返す「client」プロパティもあります。
だから問題は、パディングなしで幅と高さを取得するにはどうすればよいですか?
余白、境界線、パディングのない要素の正確なサイズ、最も内側のボックスの幅と高さだけを知りたいです(下の画像を参照)。
現在、境界線とパディングを含むサイズを与える関数「getBoundingClientRect」を知っています。パディングを含むRectを返す「client」プロパティもあります。
だから問題は、パディングなしで幅と高さを取得するにはどうすればよいですか?
残念ながら、DOMはそのような機能を提供していません。そのため、jQuery、ExtJSなどのほとんどのライブラリはヘルパーメソッドを提供します。彼らは本質的にスタイルを解析し、それを理解します。
次に例を示します。
<div style="width: 100px; height: 100px; padding: 5px; border: 1px solid #000"></div>
int getWidth(Element element) {
var paddingLeft = element.style.paddingLeft.replaceAll('px', ''); // You may want to deal with different units.
var paddingRight = element.style.paddingLeft.replaceAll('px', '');
return element.clientWidth - int.parse(paddingLeft) - int.parse(paddingRight);
}
そして使用法:
print(getWidth(query('#test')));
結果:
100
ノート:
box-sizing
確認したい効果もあります。私やあなたがたまたま時間を見つけたら、おそらくPubパッケージか何かをリリースしてください。:)
このpubパッケージは、DOMにまだ存在しないテキストのサイズ(余白、境界線、パディングなし)を予測できます: https ://pub.dartlang.org/packages/textent
比較的最近導入されたElement.contentEdgeを試してみてください。これは、まさにあなたが望むもののようです。
Googleの従業員からのこのコメントには、さらに追加された関連メソッドがいくつかリストされています。それらの少なくとも一部は、APIドキュメントでまだ実験的としてマークされていますが、それでも役立つ可能性があることに注意してください。