如何突破浏览器12px限制

您所在的位置:网站首页 字体大小怎么识别 如何突破浏览器12px限制

如何突破浏览器12px限制

2024-07-08 07:18:26| 来源: 网络整理| 查看: 265

目前Chrome浏览器依然没有放开12px的限制,但Chrome仍然是使用人数最多的浏览器。

在笔者开发某个项目时突发奇想:如果实际需要11px的字体大小怎么办?这在Chrome中是实现不了的。关于字体,一开始想到的就是rem等非px单位。但是rem只是为了响应式适配,并不能突破这一限制。

em、rem等单位只是为了不同分辨率下展示效果提出的换算单位,常见的库px2rem也只是利用了js将px转为rem。包括微信小程序提出的rpx单位也是一样!

这条路走不通,就只剩下一个方法:改变视觉大小而非实际大小。

理论基础

css中有一个属性:transform: scale();

值的绝对值>1,就是放大,比如2,就是放大2倍 值的绝对值 0 {{couponInfo.startTimeFormat}}-{{couponInfo.endTimeFormat}} {{item}} .mmcce-valid-mj-period { max-height: 15px; transition: all .2s ease; &.mmcce-mh { max-height: 200px; } .mmcce-valid-pro { display: flex; flex-direction: column; padding-bottom: 12px; .mmcce-text { width: 200%; // ! font-size: 22px; height: 15px; line-height: 30px; color: #737373; letter-spacing: 0; transform : scale(.5); transform-origin: top left; } } } .mmcce-valid-period-child { position: relative; width : 200%; white-space: nowrap; font-size : 22px; color : #979797; line-height: 30px; transform : scale(.5); transform-origin: top left; //xxx }

微店-卡券包项目截图

可以明确说明的是,这样的 hack 需要明确规定缩放元素的height值 !!!

上面代码中为什么.mmcce-valid-mj-period类中要用max-height ?为什么对展开元素中的文字类.mmcce-text中使用height? 我将类.mmcce-text中的height去掉后,看下效果: 微店-卡券包项目截图2

(使用min-height是一样的效果)

OK,可以看到,占高没有按我们想的“被缩放”。影响到了下面的元素位置。

本质上是“视觉大小改变了但实际(占位)大小无变化”。 这时候,宽高实际也被缩放了的。这一点通过代码中width:200%也可以看出来。或者你设置了overflow:hidden;也可以有相应的效果!

这一点需要注意,一般来说,给被缩放元素显式设置一个大于等于其font-size的height值即可。

缩放带来的其它问题

可能在很多人使用的场景中是不会考虑到这个问题的:被缩放元素限制高度以后如果元素换行那么会出现文字重叠的现象。 微店-卡券包项目截图3

为此,我采用了在mounted生命周期中获取父元素宽度,然后动态计算是否需要换行以及换行的行数,最后用动态style重新渲染每一条数据的height值。 这里有三点需要注意:

这里用的是一种取巧的方法:用每个文字的视觉font-size值*字符串长度。因为笔者遇到的场景不会出现问题所以可以这么用。在不确定场景中更推荐用canvas或dom实际计算每个字符的宽度再做判断(需要知道文字、字母和数字的宽度是不一样的); 需要注意一些特殊机型的展示,比如三星的galaxy fold,这玩意是个折叠屏,它的计算会和一般的屏幕计算的不一致; 在vue生命周期中,mounted可以操作dom,但不能获取实际dom元素;你可以通过this.$el获取元素。但要注意:在这个时期被获取的元素不能用v-if(即:必须存在于虚拟tree中)。这也是上面代码中笔者使用v-show和opacity的原因。

关于第三点,这里有个时机问题。比如刚进入页面时要展示弹窗,弹窗是一个组件。那你在index.vue中是获取不到这个组件的。(这个和v-if还是v-show没有关系)但是你可以将比如header也拆分出来,然后在header组件的mounted中去调用弹窗组件暴露出的方法。

mounted(){ let thresholdStr = this.info.dropDownTextList; let minW = false; if(this.$el.querySelector('.mmcce-valid-pro').clientWidth < 140) { // 以iPhone5位准,再小于其中元素宽度的的机型就要做特殊处理了 minW = true } let mmcw = this.$el.querySelector('.mmcce-valid-pro').getBoundingClientRect().width; let mmch = []; for(let i=0;i mmcw) { if(minW) { mmch[i] = Math.floor((11*thresholdStr[i].length) / mmcw) * 15; }else { mmch[i] = Math.floor((11*(thresholdStr[i].length) + 40) / mmcw) * 15; } }else { mmch[i] = 15; } } this.mTextH = mmch; },


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭