我用HTML5做手机网页,如何设置字体大小以适合各种设备?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用HTML5做手机网页,如何设置字体大小以适合各种设备?相关的知识,希望对你有一定的参考价值。

我用html5做手机网页,如何设置字体大小以适合各种设备? 我查了一下有viewport ,但字体还是用px吗?

一般你在用电脑做手机网页的时候,浏览器显示的比例和手机的比例为50%,就是说你在浏览器上面正常的内容在手机上只有50%的整体大小适配,所以说在浏览器做调试的时候把预览图缩小50%,然后调试各种属性的大小,显示正常后放到手机上就完美了 参考技术A HTML5做手机网页所用的字体可以有2种单位:
1)使用px 像素:使用14号字体即可
2)使用em :随着屏幕大小而改变1em=16px
如果只是做手机设备的话,完全可以使用px像素就可以了。不过不要使用12px 在手机上显示太小了,用户看不清楚。一般使用 14px 或 16px 。
参考技术B 有新的rem单位,有的地方不支持,用px好些,

如何设置 SKLabelNode 的字体大小以适应固定大小(Swift)

【中文标题】如何设置 SKLabelNode 的字体大小以适应固定大小(Swift)【英文标题】:How to set font size of SKLabelNode to fit in fixed size (Swift) 【发布时间】:2015-09-07 23:04:50 【问题描述】:

我有一个正方形 (200X200),里面有一个 SKLabelNode。标签显示分数,它可能会达到一个很大的数字。我想把数字放在正方形里。

如何更改 SKLabelNode 的文本大小(或大小)以使其适合固定大小。

【问题讨论】:

【参考方案1】:

mike663 答案的这种扩展对我有用,而且比一次 1 个像素快得多。

// Find the right size by trial & error...
var testingSize: CGFloat = 0    // start from here
var currentStep: CGFloat = 16   // go up by this much. It will be reduced each time we overshoot.
var foundMatch = false

while !foundMatch 
    var overShot = false
    while !overShot 
        testingSize += currentStep
        labelNode.fontSize = testingSize
        // How much bigger the text should be to perfectly fit in the given rectangle.
        let scalingFactor = min(rect.width / labelNode.frame.width, rect.height / labelNode.frame.height)

        if scalingFactor < 1          overShot   = true   // Never go over the space
        else if scalingFactor < 1.01  foundMatch = true   // Stop when over 99% of the space is filled
    
    testingSize -= currentStep  // go back to the last one that didn't overshoot
    currentStep /= 4

labelNode.fontSize = testingSize // go back to the one we were happy with

【讨论】:

【参考方案2】:

SKLabelNode 框架的大小可以与给定的矩形进行比较。如果根据标签矩形和所需矩形的大小按比例缩放字体,则可以确定最佳字体大小以尽可能多地填充空间。最后一行方便地将标签移动到矩形的中心。 (如果文本只有小写字母或标点符号等短字符,它可能看起来偏离中心。)

斯威夫特

func adjustLabelFontSizeToFitRect(labelNode:SKLabelNode, rect:CGRect) 

    // Determine the font scaling factor that should let the label text fit in the given rectangle.
    let scalingFactor = min(rect.width / labelNode.frame.width, rect.height / labelNode.frame.height)

    // Change the fontSize.
    labelNode.fontSize *= scalingFactor

    // Optionally move the SKLabelNode to the center of the rectangle.
    labelNode.position = CGPoint(x: rect.midX, y: rect.midY - labelNode.frame.height / 2.0)

Objective-C

-(void)adjustLabelFontSizeToFitRect:(SKLabelNode*)labelNode rect:(CGRect)rect 

    // Determine the font scaling factor that should let the label text fit in the given rectangle.
    double scalingFactor = MIN(rect.size.width / labelNode.frame.size.width, rect.size.height / labelNode.frame.size.height);

    // Change the fontSize.
    labelNode.fontSize *= scalingFactor;

    // Optionally move the SKLabelNode to the center of the rectangle.
    labelNode.position = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect) - labelNode.frame.size.height / 2.0);

【讨论】:

请注意,您可能需要在标签节点和矩形之间添加额外的填充。 MIN(rect.size.width / (labelNode.frame.size.width + PADDING), rect.size.height / (labelNode.frame.size.height + PADDING)); 这在 2019 年对我不起作用,我的字体(带有表情符号的 Menlo-Bold!)fontSize 显然与占用的空间不成比例,但我已经为我的解决方案捏了这个 scalingFactor下面:) Menlo 是固定宽度的字体。 2019年你试过比例字体了吗?【参考方案3】:

我已经为宽度写了这个,但是您可以将其调整为适合您的 CGRect 的高度。在示例中, pg 是一个 SKLabelNode,使用您正在使用的字体进行初始化。参数是您的字符串和目标宽度,结果是您要分配给 SKLabelNode 的大小。当然你也可以直接放你的SKLabelNode。如果尺寸太大,则最大尺寸为 50,但这是个人的。

 func getTextSizeFromWidth(s:String, w:CGFloat)->CGFloat 

    var result:CGFloat = 0;
    var fits:Bool = false
    pg!.text=s
    if(s != "")
      while (!fits) 
        result++;
        pg!.fontSize=result
        fits = pg!.frame.size.width > w;
      
    result -= 1.0
    else
        result=0;
    

    return min(result, CGFloat(50))

编辑:实际上,我刚刚意识到我也写了这个:

extension SKLabelNode 
func fitToWidth(maxWidth:CGFloat)
    while frame.size.width >= maxWidth 
        fontSize-=1.0
    


func fitToHeight(maxHeight:CGFloat)
    while frame.size.height >= maxHeight 
        fontSize-=1.0
    

【讨论】:

以上是关于我用HTML5做手机网页,如何设置字体大小以适合各种设备?的主要内容,如果未能解决你的问题,请参考以下文章

H5页面中字体大小动态配置

急求一段JS,让网页字体大小随分辨率变化而自适应

移动端应该如何动态设置字体大小?

无论用户字体大小如何,如何使文本适合按钮?

调整 UILabel 字体大小以适合文本

html网页制作里设置表格字体和大小的语句有吗?是啥?