我有类似的代码:
var a = document.createElement('div');
a.style.width = '200px';
a.style.fontSize = fontSize(a.offsetWidth, 5);
a.innerHTML = 'Example';
document.body.appendChild(a);
function fontSize(reference, factor){
return (reference*factor)/100 + 'px';
}
但是当我运行它时,元素字体大小似乎是0px。 console.log
返回期望值tho。
类似的代码适用于我尝试过的javascript对象:
var Object = function(target){
var default = {
fontSize: fontSize(target.clientWidth, 5);
}
}
我做错了什么?
答案 0 :(得分:1)
HTMLElement.offsetWidth只读属性返回元素的布局宽度。通常,元素的offsetWidth是一个度量,它包括元素边框,元素水平填充,元素垂直滚动条(如果存在,如果呈现)和元素CSS宽度。
当您尝试阅读div
时,新创建的offsetWidth
元素尚未附加到文档中,因此其布局宽度为0
,因此您最终会得到一种字体 - 0px
的大小。
在测量文档中占用的空间之前,您需要将div放在文档中。
或者,您需要使用offsetWidth
以外的值(例如style.width
。
答案 1 :(得分:0)
您的逻辑很好,但是您应该在尝试检索其大小之前将元素附加到DOM :
var a = document.createElement('div');
a.style.width = '200px';
a.innerHTML = 'Example';
document.body.appendChild(a);
a.style.fontSize = fontSize(a.offsetWidth, 5);
function fontSize(reference, factor) {
return (reference * factor) / 100 + 'px';
}
答案 2 :(得分:0)
只需将a.style.fontSize = fontSize(a.offsetWidth, 5);
放在document.body.appendChild(a);
之后。
var a = document.createElement('div');
a.style.width = '200px';
a.innerHTML = 'Example';
document.body.appendChild(a);
a.style.fontSize = fontSize(a.offsetWidth, 5); // <--- Move here
function fontSize(reference, factor){
return (reference*factor)/100 + 'px';
}
事实上,当元素未添加到DOM时,您无法编辑CSS属性。字体大小就是其中之一。
答案 3 :(得分:0)
在计算offsetWidth之前,您需要先将“a”附加到文档。
参考 - http://www.w3schools.com/jsref/prop_element_offsetwidth.asp
var a = document.createElement('div');
a.style.width = '200px';
document.body.appendChild(a);
a.style.fontSize = fontSize(a.offsetWidth, 5);
a.innerHTML = 'Example';
function fontSize(reference, factor){
return (reference*factor)/100 + 'px';
}