使用javascript在div内调整大小时更改字体大小

问题描述 投票:0回答:5

我对 javascript 还很陌生,但我正在尝试学习。

我有一个图像,图像上有一个 div 容器。 div 容器包含 2 个内部 div,用于标题和一些文本。标题的字体比正文大。

我用来工作和开发的屏幕宽度是768。

我想让javascript根据浏览器窗口的比例更改加载时的字体大小和调整大小...所以如果浏览器窗口大30%...字体应该比CSS中定义的大30%。 ..这是我制作的代码..但它不起作用。

  <head>
<style type="text/css">
#container{
    position: absolute;
    top:10%;
    left: 10%;
    background-color:#F30;

}

#boxtitle{
    font-size:3em;
}
#boxtxt{
    font-size:0.9em;
}
</style>
<script>
onresize=onload=function()
{ 
    var innerW = window.innerWidth;
    var boxtitle = document.getElementById("boxtitle").style.fontSize;
    var boxtxt = document.getElementById("boxtxt").style.fontSize;
    var ratio = innerW / 768;

    boxtitle = boxtitle * ratio;
    boxtxt = boxtxt * ratio;
}
</script>
</head>

<body>
<img src="main_pic3.jpg" width="100%" />
<div id="container">
<table  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><div id="boxtitle">TITLE</div></td>
  </tr>
  <tr>
    <td><div id="boxtxt">TXT</div></td>
  </tr>
</table>

</div>
</body>
javascript html css
5个回答
1
投票

您正在将变量的 value 设置为字体大小(您没有存储对 DOM 元素的引用。)此外,尝试使用

parseInt
确保从数字中获取任何字符串。

尝试:

var innerW = parseInt(window.innerWidth),
    boxtxt = parseInt(document.getElementById("boxtxt").style.fontSize),
    ratio = innerW / 768;

document.getElementById("boxtxt").style.fontSize = (boxtxt * ratio) + 'px'; //etc.

需要注意的一件事(我没有在其他浏览器中测试过)是,在 Mac 版 Firefox 中,

style.fontSize
仅返回内联到元素的字体大小,而不是样式表上的字体大小。

所以,一个选项是这样的:

function getStyle(object,prop) { if(getComputedStyle) { return getComputedStyle(object)[prop]; } else if (object.currentStyle) { return object.currentStyle[prop]; //IE } } //implement it getStyle(document.getElementById('someElement'),'fontSize'); //for example, outputs 12px

我想指出的一件事是,如果您尝试将空字符串乘以数字(例如,如果您在没有内联样式的情况下使用

style.fontSize

 并将其[现在是空字符串]乘以整数,例如您的屏幕宽度[在本例中为 768]),它将输出 
0,这会将您的字体大小设置为 0,从而使其消失:

console.log(document.getElementById('download').style.fontSize * 768); //outputs 0

此外,我注意到您正在将

resize

onload
 处理程序一起使用。我可能建议将 
resize
 放入 
onload
 处理程序中,除非您知道不会将其他代码放入 
onload
 处理程序中(因为这会导致每次调整窗口大小时发生很多事情.)

根据屏幕尺寸处理字体大小的另一个选项是 CSS 媒体查询(我建议在 Google 上搜索它。)


0
投票
onresize=onload=function() { var innerW = window.innerWidth; var boxtitle = document.getElementById("boxtitle").style.fontSize; var boxtxt = document.getElementById("boxtxt").style.fontSize; var ratio = innerW / 768; boxtitle = boxtitle * ratio; //<--- try appending px example below up to you how you append it document.getElementById("boxtitle").style.fontSize = '100px' boxtxt = boxtxt * ratio; //<--- try appending px }
    

0
投票
首先,您必须存储原始值,否则每次调整大小时都会得到不同的字体大小

然后,您只需附加它即可

onresize=onload=function() { var ratio = window.innerWidth / 768; document.getElementById("boxtitle").style.fontSize = 3*ratio + 'em'; document.getElementById("boxtxt").style.fontSize = 0.9*ratio + 'em'; }

另一种方法是使用基于视口的指标 -

http://snook.ca/archives/html_and_css/vm-vh-units


0
投票
如何使用字体大小的百分比来代替,这样所有内容也保持比例。您只需将顶层与字体大小绑定,而不是像示例中那样以百分比表示。否则,试图在 Javascript 中维护如此多的字体大小将是一场噩梦。

这是一个例子:

http://jsfiddle.net/yL89q/

HTML:

<div id="container"> <h1>Title</h2> <div class="description">Description</div> </div>

CSS:

#container{ font-size: 13px; } .container h1{ font-size: 150%; } .container .description{ font-size: 100%; }

JS:

onresize=onload=function(){ var innerW = window.innerWidth; var ratio = innerW / 768; var boxtitle = Math.round(13 * ratio); document.getElementById("container").style.fontSize = boxtitle + 'px'; }
    

0
投票
对于字体大小,只需增加框架的大小,因为现在无法将样式应用于 iframe 内的元素。 像这样:

.trustpilot-widget iframe { transform: scale(2); margin:auto; }

© www.soinside.com 2019 - 2024. All rights reserved.