首页 > 其他分享 >js 计算元素的行高与字体大小,单位px

js 计算元素的行高与字体大小,单位px

时间:2023-01-06 17:00:40浏览次数:38  
标签:字体大小 px ret ele else fontSize lineHeight const js


const getTagFontSize = (tag: string): number => {
const ele = document.createElement(tag);
document.body.append(ele);
const { fontSize } = getComputedStyle(ele);
document.body.removeChild(ele);
  return parseInt(fontSize);
}

// 单位px const getFontSizePx = (ele: any): number => { // medium:于16px(h4预设值) // xx-small:medium的0.6倍(h6预设值) // x-small:medium的0.75倍 // small:medium的0.8倍(h5预设值,W3C定义为0.89,实测约为0.8) // large:medium的1.1倍(h3预设值,W3C定义为1.2,实测约为1.1) // x-large:medium的1.5倍(h2预设值) // xx-large:medium的2倍(h1预设值) // smaller:约为父层的80% // larger:约为父层的120% let ret = 0; const {fontSize} = getComputedStyle(ele); if (['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'].includes(fontSize)) { switch (fontSize) { case 'medium': ret = getTagFontSize('h4'); break; case 'xx-small': ret = getTagFontSize('h6'); break; case 'x-small': ret = getTagFontSize('h4') * 0.75; break; case 'small': ret = getTagFontSize('h5'); break; case 'large': ret = getTagFontSize('h3'); break; case 'x-large': ret = getTagFontSize('h2'); break; case 'xx-large': ret = getTagFontSize('h1'); break; } } else if (/^\d[\d]+(px)$/.test(fontSize)) { ret = parseInt(fontSize); } else if (/^\d[\d]+(em)$/.test(fontSize)) { const parentFontSize = getFontSizePx(ele.parentElement); ret = parentFontSize * parseInt(fontSize); } else if (/^\d[\d]+(rem)$/.test(fontSize)) { const rootFontSize = getComputedStyle(document.body.parentElement || document.body).fontSize; ret = parseInt(rootFontSize) * parseInt(fontSize); } else if (/^\d[\d]+(vh)$/.test(fontSize)) { ret = window.innerHeight; } else if (/^\d[\d]+(vw)$/.test(fontSize)) { ret = window.innerWidth; } else if (/^\d[\d]+(%)$/.test(fontSize)) { const fs = getFontSizePx(ele); ret = fs * parseInt(fontSize) / 100; } else if (fontSize === 'inherit') { ret = getFontSizePx(ele.parentElement); } return ret; } // 单位px const getLineHeightPx = (ele: any): number => { // vh/vw/px/em/rem/normal/inherit/数值/百分比 let ret = 0; const {lineHeight} = getComputedStyle(ele); if (/^\d[\d]+(px)$/.test(lineHeight)) { ret = parseInt(lineHeight); } else if (/^\d[\d]+(em)$/.test(lineHeight)) { const parentFontSize = getFontSizePx(ele.parentElement); ret = parentFontSize * parseInt(lineHeight); } else if (/^\d[\d]+(rem)$/.test(lineHeight)) { const rootFontSize = getComputedStyle(document.body.parentElement || document.body).fontSize; ret = parseInt(rootFontSize) * parseInt(lineHeight); } else if (/^\d[\d]+(vh)$/.test(lineHeight)) { ret = window.innerHeight; } else if (/^\d[\d]+(vw)$/.test(lineHeight)) { ret = window.innerWidth; } else if (/^\d[\d]+(%)$/.test(lineHeight)) { const fontSize = getFontSizePx(ele); ret = fontSize * parseInt(lineHeight) / 100; } else if (/^\d[\d]+\d$/.test(lineHeight)) { const fontSize = getFontSizePx(ele); ret = fontSize * parseInt(lineHeight); } else if (lineHeight === 'normal') { const fontSize = getFontSizePx(ele); ret = 4/3 * fontSize; } else if (lineHeight === 'inherit') { ret = getLineHeightPx(ele.parentElement); } return ret; }

 

标签:字体大小,px,ret,ele,else,fontSize,lineHeight,const,js
From: https://www.cnblogs.com/hello-dummy/p/17030989.html

相关文章

  • 第一节:环境准备、项目结构详解、App.vue/main.js/uni.scss详解、各种引用(组件/js/css
    一. 环境准备1. HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 微信开发工具 下载地址:https://developers.weixin.qq.com/miniprogram/dev......
  • 原生js常用操作
    元素#创建一个元素document.createElement("a")#附加到父元素的最后pararentEle.appendChild(childEle);#查找document.getElementById("aa")document.querySel......
  • js 数组的splice
    splice():删除、插入和替换1、删除:指定2个参数:要删除的第一项的位置和要删除的项数。书写格式:arr.splice(0,2)2、插入:可以向指定位置插入任意数量的项,只需提供3......
  • 使用ExcelJS处理Excel
    官方中文文档在浏览器环境下,用Excel.js读取excel文件使用ExcelJS的原因因为SheetJS读取样式的那一部分是收费的(具体原因是因为有人花钱找他们开发的,再免费对花钱的人......
  • JS精粹--匿名函数与自执行匿名函数
    1.函数也是一种类型要理解匿名函数,首先需要理解函数也是一种类型。所以函数可以赋值给变量,如下://将数字类型值赋给变量varnum=1;//将......
  • three.js场景地形导出到物理引擎
    太长不看版遍历场景地形里的Mesh,从geometry里抽取index和position,通过这两个数组构建物理引擎里的Trimesh。 背景最近在试制网页MMORPG,内核用最顺手的three.js,资产使......
  • 更改json节点key
    json节点key更改,给朋友写的小tool,顺便记录一下/***需要转义的key对象*原key:新key*/constjsonKeysTo={'a':'new_a','b':'new_b','c>0......
  • 解决react typescript项目中引入js库项目打包报错问题
    描述在reacttypescript项目中,在打包的过程中会报错抛出couldnotfindadeclarationfileformodule的错误,报错内容如图所示原因JS库无法在TS中正常的加载,需要修改......
  • .Net Core Mvc控制器返回JsonResult 序列化数据循环依赖问题
     开始找的解决方案发现并行不通services.AddControllers().AddNewtonsoftJson((options)=>{//忽略循环引用options.Ser......
  • ExtJS - UI组件 - TabPanel
    ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587500.html更新记录2023年1月2日从笔记迁移到......