记一次谷歌chrome浏览器 18 以上和 18 以下,最小字号不一致,导致的样式兼容问题解决过程

news2024/12/23 13:56:36

**记录一次谷歌chrome浏览器 18 以上和 18 以下,最小字号不一致,导致的样式兼容问题解决过程:**

    • 定位问题
    • 尝试解决方案
      • 第一时间想到的解决方案:方案一
      • 尝试方案二:scale 缩放
      • 方案三:rem、em
        • 测试
      • 方案四 SVG
      • 最终方案
        • 结果
          • demo

在Chrome的早期版本中,默认情况下最小字体大小被限制为12px,小于12px的设置会被重置为12px。然而,从Chrome 118版本开始,这一限制被解除。

新同事做老项目的时候,使用的浏览器版本是 130+了,最小字号限制已经解除,但是项目是老项目,并且一部分员工的电脑上用的还是 Win7 系统,根本安装不了 109以上版本的 chrome 浏览器,同事已离职,只能咱来解决了…

定位问题

在这里插入图片描述

在这里插入图片描述
很明显,样式写死,字号设置的太小,被默认字号重置,导致设置的字号无效

尝试解决方案

第一时间想到的解决方案:方案一

使用 javascript 修改浏览器默认字号,查找半天…没有,不让修改,除非用户主动自主修改 PASS掉

尝试方案二:scale 缩放

使用 transform: scale 做缩放
未缩放前:font-size: 20px; transform: scale(1);
在这里插入图片描述
缩放后:transform: scale(0.5) 模拟 font-size: 10px;
在这里插入图片描述
测试代码:
在这里插入图片描述

可以看到,缩放后原本的占位并不变,只是看起来确实小了,要是很少或者一整块一个整体还行,但是我们这里的合同是一段段硬拼起来的,我可没功夫去一点点调样式,忒费劲,继续 暂时先PASS掉,其实我以前常用的也是 scale 这种方式突破最小限制
其他类似方案同理:比如 canvas 缩放 转image

方案三:rem、em

想一想做响应式的时候是怎么做的?浏览器上多小的字体都能显示出来
发动自己的小脑袋瓜子想一想 pxremem 的用法:

  • px(像素)‌:像素是屏幕上显示的最小单位,大小固定,不随页面缩放而改变。在响应式设计中,使用像素单位可能会导致布局在不同屏幕尺寸上显示不一致‌
  • em‌:相对长度单位,相对于父元素的字体大小。如果父元素的字体大小为16px,1em就等于16px。缺点是当嵌套元素多层时,计算起来可能会变得复杂‌
  • rem‌:相对长度单位,相对于根元素(html元素)字体大小的倍数。1rem始终等于根元素的字体大小,不受父元素影响,适合用于响应式设计‌

思考:
调试的时候,发现这里的合同样式字体大小是直接设置到一个个段落上的,根元素以前也没做过适配

  1. 默认是多少呢?
  2. 会不会也是浏览器版本不一样的时候根元素默认字体大小也不一致呢?
  3. 如果现在设置默认字体大小合适吗?

在大多数浏览器中默认字体都是 16px ,在没给 html元素 指定字体大小的时候默认都是 16px
像火狐浏览器,默认字体大小是 小型 ,而且不同版本之间默认大小也不一定一致,所以这个感觉不靠谱
现在给 html 根元素设置默认大小?别扯了,成型的项目,现在设置了影响多大啊

最终思考了一下,感觉还是 em 比较合适
理由
相对父元素字体大小,而且当前的合同样式是已经成型的,最好是改动越小越好,涉及的地方越少越好

测试

直接 父元素设置 font-size: 20px;
在这里插入图片描述
然后 子元素添加 font-size: 0.5em;
在这里插入图片描述
但是感觉怎么好像没有 transform: scale(0.5); 的小呢,再测试一下:
直接设置为 0.2em
在这里插入图片描述
果然,em 没能突破浏览器最小字号的限制rem不用测试了,原理一样的东西,也突破不了浏览器最小字号的限制。晕~~,难道非得逼着用 scale 吗?再研究研究…

测试代码:
在这里插入图片描述

方案四 SVG

回想一下 element-plus 里的 图标,使用的是 svg 实现的,就突破了最小字号大小限制,这里也做个测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
svg方案可以,但是这里要改动的话,就需要在最外层整个包裹一层 svg,并且内部元素都需要改造,暂时 PASS 掉

最终方案

权衡再三,还是使用 方案二:scale 方案
理由:
方案一方案三 无效,只方案二方案四,而 SVG 是我所不熟悉的,只能考虑用我所熟悉scale 来实施了,整体放大1倍,然后再使用 scale(0.5) 来缩放,最外层还是那个盒子,用超出隐藏的方式,再让内容整体居中,再做微调,这样虽然比较笨,但是可以保证这种方案可行,并且兼容性也好

不过 SVG 方案后续有时间了也会实现一份尝试一下

结果

最后实现效果:
在这里插入图片描述
完美,挺好

demo

弄个 demo 放这里,就当是讲解了
先看 demo 运行结果:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
            line-height: 1;
        }
        body {
            padding: 100px;
        }
        .compare{
            font-size: 12px;
        }
        .out {
            background: #efefef;
            width: 800px;
            height: 1200px;
            overflow: hidden;
        }
        .twice {
            width: 1600px;
            height: 2400px;
            font-size: 20px;
            transform: scale(0.5);
            position: relative;
            top: -50%;
            left: -50%;
        }
        .content {
            display: inline-block;
            background: #0ff;
        }
    </style>
</head>
<body>
    <div class="compare">我是 12px 的文字,和下方文字大小做比较用</div>
    <div class="out">
        <div class="twice">
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">我是 10px 的文字,和上方文字大小做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666,我是 10px 文字大小,和上方做比较用</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
            <div class="content">你好,我是喜大普奔666</div>
        </div>
    </div>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!

作者&#xff1a;来自 Elastic Platform Product Team Elastic Search AI 平台&#xff08;Elasticsearch、Kibana 和机器学习&#xff09;的 8.16 版本包含大量新功能&#xff0c;可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…

HarmonyOS Next星河版笔记--界面开发(5)

1.字符串 1.1.字符串拼接 作用&#xff1a;把两个或多个字符串&#xff0c;拼成一个字符串。&#xff08;通常是用来拼接字符串和变量&#xff09; hello world > helloworld 加好作用&#xff1a;拼接 let name:string 小明 console.log(简介信息,名字是 name) …

kafka中topic的数据抽取不到hdfs上问题解决

在上一个博客中有一个案例&#xff1a; 将json文件抽取到kafka的消息队列&#xff08;topic&#xff09;中&#xff0c;再从topic中将数据抽取到hdfs https://blog.csdn.net/qq_62984376/article/details/143759037?spm1001.2014.3001.5501 我们在从kafka中topic的数据抽到hdf…

scala中的case class

package test_27 //Set的特点&#xff1a;唯一&#xff08;元素不同&#xff09;&#xff1b;无序 //case class定义一组数据 case class Book(var bookName:String,var author:String,var price:Double){} object caseclass {def main(args: Array[String]): Unit {//定义一个…

【Excel】数据透视表分析方法大全

数据透视表的最常用的功能是分类汇总&#xff0c;其实它还有很强大的数据分析功能。在数据透视表右键菜单的值显示方式中&#xff0c;可以看到有14个很实用的分析选项。 1、总计的百分比 作用&#xff1a;透视表中每一个数字&#xff08;包括汇总行、总计行&#xff09;占右…

交互新体验:Axure动态面板下的图片拖动技巧

交互新体验&#xff1a;Axure动态面板下的图片拖动技巧 前言 在数字产品的设计过程中&#xff0c;用户体验的每一个细节都至关重要。 动态交互效果&#xff0c;如拖动按钮控制图片展示区域&#xff0c;不仅能够提升用户的参与度&#xff0c;还能增强界面的直观性和互动性。 …

批量将MySQL中的MyISAM引擎,改成InnoDB引擎

一、InnoDB和MyISAM的区别 MySQL中InnoDB和MyISAM是两种常用的存储引擎&#xff0c;具有以下不同的特点&#xff1a; 序号InnoDBMyISAM说明事务支持支持不支持InnoDB可以处理更复杂的业务逻辑&#xff0c;而MyISAM在处理大量并发写入时可能会遇到问题‌锁定机制行级锁定表级锁…

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成&#xff0c;且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串&#xff0c;对于其中的…

灵神 刷题DAY1

Python与java的刷题的区别 1. Python没有分号 2. Python不能return的时候赋值 3. Python没有小括号和花括号 4. Python的循环很奇怪&#xff0c;没有for(int i0;i<32;i)这种形式 而是直接用的是for i in range(n)这种 5. Python中没有 6. Python中没有&& 是an…

Servlet三小时速成

Servlet三小时速成 实例驱动的速成教程。自己敲一遍的话入门还是没问题的。如有错误请读着多多包涵。 Serlet的前辈&#xff1a;CGI 通用网关接口 CGI通过调用外部程序来处理HTTP请求&#xff0c;对于每个请求都会启动一个新的进程。 这就导致了许多问题&#xff0c;首先是…

Qt主线程把数据发给子线程,主线程会阻塞吗

演示&#xff1a; #include <QCoreApplication> #include <QThread> #include <QObject> #include <QDebug>// 子线程类 class Worker : public QObject {Q_OBJECT public slots:void processData(int data) {qDebug() << "Processing dat…

「QT」文件类 之 QTemporaryFile 临时文件类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

探索Python的HTTP利器:Requests库的神秘面纱

文章目录 **探索Python的HTTP利器&#xff1a;Requests库的神秘面纱**一、背景&#xff1a;为何选择Requests库&#xff1f;二、Requests库是什么&#xff1f;三、如何安装Requests库&#xff1f;四、Requests库的五个简单函数使用方法1. GET请求2. POST请求3. PUT请求4. DELET…

【Java语言】String类

在C语言中字符串用字符可以表示&#xff0c;可在Java中有单独的类来表示字符串&#xff08;就是String&#xff09;&#xff0c;现在我来介绍介绍String类。 字符串构造 一般字符串都是直接赋值构造的&#xff0c;像这样&#xff1a; 还可以这样构造&#xff1a; 图更能直观的…

jmeter常用配置元件介绍总结之线程组

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之线程组 1.线程组(用户)1.1线程组1.1.setUp线程组和tearDown线程组1.2.Open Model Thread Group(开放模型线程组)1.3.bzm - Arrivals Thread Group(到达线程组)1.4.jpgc - Ultimate Thread Group(终极线程组)1.5.jpgc - St…

电工电子原理笔记

这一篇手记会记录我硬件开发过程中遇到的一些底层电学原理&#xff0c;并且结合实际场景作为“例题”&#xff08;出于篇幅和保密考虑会进行部分简化&#xff09;。 叠加定理 基本介绍 在线性电路中&#xff0c;任一支路的电流&#xff08;或电压&#xff09;可以看成是电路…

Python与其他语言比较·练习题 --- 《跟着小王学Python》

Python与其他语言比较练习题 — 《跟着小王学Python》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的核心…

STM32 使用 STM32CubeMX HAL库实现低功耗模式

STM32 使用 HAL 库的低功耗模式测试使用 ...... 矜辰所致前言 上次画了一个 STM32L010F4 最小系统的板子&#xff0c;也做了一些基本测试&#xff0c;但是最重要的低功耗一直拖到现在&#xff0c;以前在使用 STM32L151 的时候用标准库做过低功耗的项目&#xff0c;现在都使…

接口自动化代码编写规范

命名规范 文件命名&#xff1a;测试文件应该以 test_ 开头&#xff0c;以 _test.py 结尾&#xff0c;例如&#xff1a;test_my_module_test.py。 函数命名&#xff1a;测试函数应该以 test_ 开头&#xff0c;描述清楚被测试的功能或行为&#xff0c;使用下划线分隔单词&#…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具&#xff0c;可以帮助我们发现和修复代码中的问题&#xff0c;保持代码风格的一致性。然而&#xff0c;ESLint的最佳实践不仅仅在于了解其功能&#xff0c;更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…