在尝试创建一个Angular指令,使其内容的大小适应容器的大小时,我偶然发现了以下问题:
最小的HTML代码段:
<my-tag id="testWidth">
<div>some text</div>
</my-tag>
在阅读my-tag
的宽度时,我在Chrome中获得了0
的结果,而Firefox则返回了正确的结果。在Chrome中,如果我将my-tag
替换为div
,结果也是正确的。
这是我用来获取宽度的表达式:
document.getElementById('testWidth').offsetWidth
据我所知,my-tag
应该是valid custom element name。还有其他我做错了,或者这只是Chrome中的一个错误?
Chrome版本:49.0.2623.112 m
jsfiddle用于快速测试
我试图了解Chrome的行为是否正确或是否是错误。
HTMLElement.offsetWidth只读属性返回布局 元素的宽度。
据我所知,并不是说这仅适用于具有块显示的元素。我还通过Firefox返回我期望的事实来支持我的理解。
span
代码也可以观察到相同的行为差异,请参阅this fiddle。
答案 0 :(得分:6)
您需要使用display: block
答案 1 :(得分:0)
您还可以像这样获取自定义元素内容的宽度:
document.querySelector('custom-element').shadowRoot.querySelector('#content').offsetWidth