根据html容器大小和显示文字多少调节字体大小
在做html相关的东西的时候经常会遇到这样的问题,容器大小(长x宽)固定,容器包含内容(特指文字)多少不固定,这个时候就让人很苦恼了,将字体大小设置成多少才合适呢?下面看看我的解决思路:
首先要知道网页中所说的字体大小的px指的是字体的宽和高,也就是说在35px显示一个中文字符,该字符占去35x35的空间。知道这个之后,我们就可以想办法动态的根据容器大小和包含内容多少显示文字了。
首先要做的就是计算一个字符串的长短(一个中文字符记1个,一个英文字符记0.5个),我这里使用了简单的判断,当蚊子Unicode编码大于255的时候计算一个汉字字符,小于255的时候计算0.5个汉字字符:
var L=0.0;
for(var i in str){
L+=(str.charCodeAt(i)>255)?1:0.5;
}
L=Match.ceil(L);
也许机制的你已经注意到了,在最后我对长度进行了向上舍入,如果不进行这个操作也可以,但是为了不要那么多麻烦的小数直接给他向上舍入。
下一步就是进行计算字体大小了,我将每一个字体看做一个小方块,容器看做一个大方块,接下来就是计算如何更合理的用小方块填满大方块了。首先,直接数学思维计算出字体大小:
var font_size=Math.floor(Math.sqrt(parseInt(width)*parseInt(height)/L));
这里计算的font_size是一个刚好合适的情况,如下面图2014-11-11 1所示
| in | in | in | in | in |
| in | in | in | in | in |
| in | in | in | in | in |
但往往情况会是这样的
| in | in | in | in | in |
| in | in | in | in | in |
| in | in | in |
这样的情况就会导致容器被这些字的体积加两个空闲位置撑破了,因此就要进行接下来这一步,进行修正,调整字体大小,准确的说是减小,知道刚好装得下位置:
var rows=Math.floor(width/font_size);
var lines=Math.ceil(L/rows);
while(lines*rows*font_size*font_size>width*height){
font_size--;
rows=Math.floor(width/font_size);
lines=Math.ceil(L/rows);
}
这里是检测所有位置大小的总和(包括用到的位置和空闲位置),直到它刚好小于等于容器体积,此时的字体就是满足要求的字体。
下面看看完整程序:
fontSize=function(width,height,str,maxSize){
var L=0.0;
for(var i in str){
//汉字大于255,英文小于255,也可以使用/[\u4e00-\u9aff]/g.test(str[i])
L+=(str.charCodeAt(i)>255)?1.0:0.5;
}
L=Math.ceil(L);
var font_size=Math.floor(Math.sqrt(parseInt(width)*parseInt(height)/L));
//看下是否真的放得下
var rows=Math.floor(width/font_size);
var lines=Math.ceil(L/rows);
while(lines*rows*font_size*font_size>width*height){
font_size--;
rows=Math.floor(width/font_size);
lines=Math.ceil(L/rows);
}
return font_size>maxSize?maxSize:font_size;
}
这里面还进行了最大字体设置,免得只有一个字的时候,字体过分的大。
好了今天就到这里。
根据html容器大小和显示文字多少调节字体大小的更多相关文章
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- Xshell调节字体大小和样式
有时候没有看着字体太小的,好难受, 调节字体大小: ALT+P快捷键打开
- Python+PyCharm的一些基本设置:安装使用、注册码、显示行号、字体大小和快捷键等常用设置
一 下载与安装 软件下载,软件文档下载:http://www.jetbrains.com/pycharm/download/ 如下图: 官方网站下载:http://www.oschina.net/p/ ...
- Ubuntu 12.10 Tty (字符终端) 显示中文,和字体大小设置
Tty通过修改默认的中文编码字符,和安装zhcon都无法显示中文.可安装fbterm来显示中文,命令:sudo apt-get install fbterm安装即可,进入Tty: (Ctrl+Alt+ ...
- 嵌入式Qt-4.8.6显示中文并且改变字体大小和应用自己制作的字体库
问题: QT4.8.6在移植到开发板上的时候,中文支持是必不可少的,如何让QT支持中文,如何制作QT支持的字体文件,如何使QT UI编辑器中的字号与开发板中的字号一致. 详解: 1>如何让QT支 ...
- <转>Android APP字体大小,不随系统的字体大小变化而变化的方法
从android4.0起系统设置的”显示“提供设置字体大小的选项.这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统字体后瞬间变得面目全非.下面是解决方案 Resources r ...
- 切换myEclipse工作空间后设置,myEclipse添加注释/设置豆沙背景颜色/调节字体大小
一.添加注释 操作位置: 注释规范 Files/** * @文件名称: ${file_name} * @文件路径: ${package_name} * @功能描述: ${todo} * @作者: ${ ...
- 固定textview大小,根据文字多少调整字体自适应textview大小
/** * 文件名 AutoResizeTextView.java * 包含类名列表 com.haier.internet.conditioner.haierinternetconditioner2. ...
- IAR调节字体大小
在主面板上点击tools->Options,然后点开Editor,选择下面的Colors and Fonts选项,最后选右上方的Font,选择要设置的字体就OK了.
随机推荐
- Bink Player
class CBIKMaterial { public: CBIKMaterial(); ~CBIKMaterial(); bool Init(const char *pFileName); void ...
- Theano1.1-安装
之前一直想弄theano,可是python不是很懂,在学习了一段时间之后开始安装theano.当然官网上的安装资料是全,可是也太繁琐了.这里介绍的是最简单,最方面的安装theano的方法.官网首页:h ...
- 如何在 ie6 中使用 "localStorage"
好吧,我只是个标题党,ie6 下根本无法使用跟 h5 沾边的 localStorage.今天要向大家介绍的是 ie 特有的 userData 的存储方式,并且对它进行封装,使得不支持 localSto ...
- leetcode - 位运算题目汇总(上)
最近在看位运算的知识,十分感叹于位运算的博大精深,正好leetcode有 Bit Manipulation 的专题,正好拿来练练手. Subsets 给出一个由不同的数字组成的数组,枚举它的子数组(子 ...
- Canvas之打字机游戏
最近针对粒子化作了一点点的探究,决定结合其做个小游戏,于是这个简单的打字游戏出世了. 试玩地址:Typewriter game 仅在chrome下测试,请谨慎使用其他浏览器(特别是ff):加载速度有 ...
- 基于DDD的.NET开发框架 - ABP日志Logger集成
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- bootstrap的popover插件在focus模式时在Safari浏览器无法使用的bug解决方案
前言 最近在使用bootstrap的popover插件,效果如下: popover插件的focus模式时表现为当点击按钮时弹出浮动层,在点击浮动层外的任何一处,都隐藏浮动层. 但是在mac下的Safa ...
- 用自己的话描述wcf中的传输安全与消息安全的区别(三)
消息交换安全模式 PS:很多书上把transfer security和transport security都翻译成“传输安全”,这样易混淆.我这里把transfer说成消息交换安全. 安全的含义分为验 ...
- JNI系列——常见错误
1.本地方法没有找到 原因一:在Java代码中没有加载对应的类 原因二:在.c文件中将本地的方法名转换错误 2.本地库返回为空 原因一:加载的库名称错误 原因二:生成的库与部署设备平台错误
- Learning jQuery, 4th Edition 勘误表
来源于:http://book.learningjquery.com/3145/errata/ Chapter 1 page 14 The CSS snippet is correct, but it ...