【js文字大小自适应】原生js实现文字大小自适应(附完整源码)

news2024/11/25 9:25:53

目录

  • 1、先睹为快
  • 2、代码实现
    • 第一步、搭建页面
    • 第二步、设置样式
    • 第三步、JS实现字体自适应
  • 3、源码直通车(百度云下载)

【写在前面】之前写过一个大屏的项目,其中里面最头疼的应该是图片,文字,图表(echarts)等元素的自适应大小了,尤其是当窗口自己去改变的时候,字体大小一动不动的,不同分辨率的查看效果是不同的,今天我重点给大家讲解一下字体自适应的这个话题。
**涉及知识点:**px和em、rem的区别;getElementById,style.fontSize,onload,onresize

1、先睹为快

效果如下所示:
在这里插入图片描述

2、代码实现

第一步、搭建页面

核心在于onload和onresize事件的绑定去触发文字大小的调整。
具体页面代码如下:

<body onload="scaleWidth();" onresize="scaleWidth();">
<div id="widthContainer">
    <div id="options">
        <a href="#" onclick="textSize('smaller'); return false;">Text smaller</a> |
        <a href="#" onclick="textSize('bigger'); return false;">Text bigger</a>
    </div>
    <!-- END options -->
    <div id="header">
        <h1>黄大大真的好帅啊</h1>
    </div>
    <!-- END header -->
    <div id="content">
        <!-- END rightContent -->
        <div id="leftContent">
            <p>
                Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed lobortis ullamcorper augue. Praesent vel
                felis vitae purus ornare pretium. Nullam porta sollicitudin lectus. Integer non arcu eu neque tincidunt
                tincidunt. Nullam sapien arcu, ullamcorper sed, hendrerit in, rutrum in, nibh. Aliquam sed enim. Cras
                rhoncus ullamcorper justo. Aenean quam dolor, consectetuer sed, dapibus quis, iaculis id, diam.
                Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut lacinia
                velit ac elit. Etiam id nulla. Phasellus at arcu ac mauris hendrerit ullamcorper. Quisque posuere
                sodales risus. Sed nunc nibh, egestas a, blandit eget, facilisis vel, dolor. Cras metus urna, feugiat
                et, iaculis quis, lacinia a, elit. Etiam enim. Maecenas viverra, est non tincidunt euismod, diam urna
                volutpat mi, in luctus pede ante sit amet risus.
            </p>

            <p>
                Nulla metus. Ut sodales, tortor nec sollicitudin convallis, diam diam vulputate ligula, lobortis
                tincidunt urna purus at urna. Pellentesque laoreet. Nulla et dolor. Praesent vestibulum quam convallis
                neque. Praesent sit amet odio a dui iaculis dignissim. In vel nunc a tellus vulputate pellentesque.
                Maecenas bibendum. Donec mi nibh, euismod in, iaculis a, eleifend et, enim. In eget lectus vitae pede
                nonummy elementum. Mauris accumsan, lacus ut euismod varius, odio neque egestas quam, non aliquam velit
                purus et purus. Vestibulum at elit nec felis suscipit pulvinar. Suspendisse at enim quis lacus mattis
                condimentum. Proin arcu arcu, imperdiet vitae, aliquam non, congue id, ipsum.
            </p>
            <p>
                Aliquam eu dolor nec risus luctus faucibus. Aenean condimentum, tortor in blandit cursus, dolor magna
                sagittis orci, vel vehicula dolor ante at lacus. Donec vel felis in enim aliquam molestie. Sed non velit
                id velit pulvinar consequat. Mauris luctus. Phasellus faucibus turpis nec purus. Mauris eget ante. Donec
                orci enim, luctus eu, posuere at, luctus quis, pede. In in lectus. Quisque blandit, ipsum eget tincidunt
                scelerisque, mauris ante accumsan erat, quis congue odio erat vitae diam. Donec ut felis fermentum sem
                viverra pulvinar. Sed neque lorem, adipiscing ut, placerat a, ornare et, dolor. Vestibulum pretium
                vehicula nibh. Etiam feugiat, ligula sed pulvinar fringilla, eros arcu placerat urna, nec eleifend nisl
                leo sit amet urna. Suspendisse quis augue ut nibh venenatis nonummy. Nunc ut augue. In fermentum, neque
                eget eleifend rutrum, nulla lorem fermentum massa, eu cursus lectus mi id libero.
            </p>
            <p>
                Nam congue ligula quis magna. Vivamus porttitor nunc non dui. Aliquam posuere dapibus tortor. Quisque
                facilisis, quam in semper luctus, lacus dolor gravida massa, ultrices consectetuer risus arcu nec nibh.
                Nulla facilisi. In a eros id eros lobortis ultrices. Vivamus sit amet neque eu magna venenatis nonummy.
                Pellentesque consequat. Etiam ut ipsum. Nulla consectetuer est vel quam.
            </p>
            <p>

                Integer eu diam vitae augue sollicitudin congue. Praesent vulputate pede vel velit. Maecenas dapibus
                tempus lacus. Quisque lectus metus, pretium ac, mollis nec, dignissim quis, mi. Aliquam purus risus,
                pharetra eget, condimentum ut, blandit sit amet, leo. Suspendisse iaculis purus sed tellus. Nunc sem
                justo, porttitor ut, pretium eu, hendrerit eu, nunc. Vivamus sit amet neque in est venenatis faucibus.
                Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam rhoncus,
                eros id ultrices facilisis, pede ligula dignissim eros, sit amet tempus risus urna sed nibh. Sed massa
                eros, dapibus tristique, blandit et, molestie sed, enim. Phasellus leo. Integer vestibulum volutpat
                enim. Duis pulvinar ligula. Pellentesque luctus velit a justo. Quisque volutpat, diam quis varius
                commodo, neque elit dictum tortor, quis aliquet felis risus vitae wisi. Aliquam bibendum, elit ut
                gravida vehicula, orci turpis auctor dolor, nec tristique tortor dolor eget ipsum.
            </p>
        </div>
        <!-- END leftContent -->
        <div class="clearer">
        </div>
    </div>
    <!-- END content -->
    <div id="footer">
        <!--<a href="http://118.31.23.28:18088/inithdd/#/rewordData">喜欢博主的可以上皇榜</a>-->
    </div>
</div>
<!-- END widthContainer -->
</body>

第二步、设置样式

这里设置字体单位我是用的em,切记不可用px,不然就限制死了,还有一个rem,这个我就和大家简单的说明一下他们的区别吧。
px:是固定的大小,一旦设置无法自适应去调整
em:具有灵活性,相对于父元素来设置字体大小的,一般以body的字体大小为准
rem:也具有灵活性,开头的r你可以理解为root,也就是相对于根元素的字体大小为准,一般是针对html标签的字体大小。
具体实现代码如下:

body {
   text-align: center;
}
body * {
    margin: 0;
}
#content {
    background-color: #BBDDFF;
    background-repeat: repeat-y;
    background-position: 30em 0;
    text-align: left;
}
#content p {
}
#footer {
    background-color: #0066CC;
    text-align: left;
}
#footer a {
    color: #FFFFFF;
}
#header {
    background-color: #0066CC;
    color: #FFFFFF;
    text-align: left;
}
#leftContent {
}
#options {
    text-align: right;
}
#options a {
    color: #000000;
}
#rightContent {
    float: right;
}
#widthContainer {
    font-size: 0.8em;
    margin: auto;
}
.clearer {
    clear: both;
}

第三步、JS实现字体自适应

Js主要的核心还是在于如何用原生的js去调整字体的大小,核心在于style.fontSize,我们可以通过调整父节点(body)的文字大小渐而控制页面中的文字大小,以此方式达到一个自适应的效果。
具体实现代码如下:

function scaleWidth() {
   var optimalLineLength = "50em";
   var extraAccounting = "12em";
   var minimumTextHeight = "10px";
   var windowWidth = document.body.clientWidth;
   var optimalSize = windowWidth / (parseInt(optimalLineLength) + parseInt(extraAccounting));
   if (optimalSize >= parseInt(minimumTextHeight)) {
       document.body.style.fontSize = optimalSize + "px";
   }
   else {
       document.body.style.fontSize = parseInt(minimumTextHeight) + "px";
   }
   return true;
}
function textSize(size) {
   var theContainer = document.getElementById("widthContainer");
   var increment = 0.1
   var currentSize = parseFloat(document.getElementById("widthContainer").style.fontSize);
   if (!currentSize) {
       currentSize = 0.8;
   }
   if (size == "smaller") {
       theContainer.style.fontSize = (currentSize - increment) + "em";
   }
   else {
       theContainer.style.fontSize = (currentSize + increment) + "em";
   }
   return true;
}

3、源码直通车(百度云下载)

百度网盘直接下载,单个文件即可
链接:https://pan.baidu.com/s/1yRniy5V8yvPZl4G1VzNZhA
提取码:hdd6

如果觉得这篇文章对您有帮助的话,想支持博主的可以上皇榜看看哟,皇榜点击此处进入

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

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

相关文章

分布式事务解决方案——TCC

TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)&#xff0c;此阶段仅是一个初步操作&#xff0c;它和后续的Confirm一起才能真正构成…

Win11系统如何安装Ubuntu20.04(WSL版本)并安装docker

终于还是下定决心去换电脑了……这次采用轻量级的WSL&#xff0c;发现虽然没有占内存的GUI界面&#xff0c;但是编码和阅读文档还是非常nice的 1、首先开启Win11的虚拟机服务 2、下载你期望的Ubuntu服务器&#xff08;这里以20.04为例&#xff09; 安装成功后&#xff0c;发现…

发布的软文如何提高阅读量?

软文文章是一种带有宣传性质的文章&#xff0c;旨在宣传某个产品、品牌或者公司。然而&#xff0c;要想有效地宣传&#xff0c;就必须要让读者真正的阅读并了解软文中的内容。因此&#xff0c;提高软文文章阅读量是非常重要的。下面是一些有助于提高软文文章阅读量的方法&#…

简单记录简单记录

目录1.注册Gmail2.注册ChatGPT3.验证“真人”使用4.开始使用1.注册Gmail 第一步先注册一个谷歌邮箱&#xff0c;你也可以使用微软账号&#xff0c;大部分人选择使用gmail。 申请谷歌邮箱 选择个人用途创建账号即可。 &#x1f4cc;温馨提示&#xff1a; 你直接使用guo内的网…

react路由详解

在学习react路由之前&#xff0c;我们肯定需要安装路由。大家先运行如下命令安装路由。安装之后随我一起探索react路由。 安装 版本v6 npm i react-router-dom -S 页面准备 创建两个文件夹 pages和 router pages文件夹里面放的是页面 router文件夹里面是进行路由配置 路由…

【MySQL】聚合函数和GROUP BY

文章目录1、聚合函数2、GROUP BY3、HAVING4、SELECT的执行过程1、聚合函数 聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。聚合函数类型&#xff1a;AVG()、SUM()、MAX()、MIN()、COUNT()。不能在 WHERE 子句中使用聚合函数。 SELECT AVG(salary), MAX(salary)…

从0到1一步一步玩转openEuler--14 openEuler DNF(YUM)配置管理

文章目录14.1 DNF配置文件14.1.1 配置main部分14.1.2 配置repository部分14.1.3 显示当前配置14.2 创建本地软件源仓库14.3 添加、启用和禁用软件源14.3.1 添加软件源14.3.2 禁用软件源14.3.3 启用软件源DNF是一款Linux软件包管理工具&#xff0c;用于管理RPM软件包。DNF可以查…

论文笔记: Monocular Depth Estimation: a Review of the 2022 State of the Art

中文标题&#xff1a;单目深度估计&#xff1a;回顾2022年最先进技术 本文对比了物种最近的基于深度学习的单目深度估计方法&#xff1a; GPLDepth(2022)[15]: Global-Local Path Networks for Monocular Depth Estimation with Vertical CutDepthAdabins(2021)[1]: Adabins:…

操作系统:文件系统的实现

一、文件系统结构 磁盘的逻辑单元为块&#xff0c;内存和磁盘之间的I/O传输以块为单位执行。 磁盘的特点 1可以原地重写&#xff0c;可以从磁盘上读一块儿&#xff0c;修改该块&#xff0c;并将它写回到原来的位置可以直接访问磁盘上的任意一块。因此&#xff0c;可以方便地…

浅析SCSI协议(2)命令模型

SCSI命令模型 SCSI协议对链路传输没有进行严格的限制&#xff0c;但约束了SCSI的命令模型。协议允许使用SAS、FC以及以太网等不同的链路实现&#xff0c;但对所有的SCSI传输层实现而言&#xff0c;都必须遵循统一的SCSI命令模型。SCSI命令模型约束了SCSI命令执行过程、命令请求…

《底层逻辑:看清这个世界的底牌》读后感

书名《底层逻辑&#xff1a;看清这个世界的底牌》作者刘润简介如果只教给你各行各业的“干货”&#xff08;方法论&#xff09;&#xff0c;那只是“授人以鱼”&#xff0c;一旦环境出现任何变化&#xff0c;“干货”就不再适用。但如果教给你的是底层逻辑&#xff0c;那就是“…

初入测试如何编写测试用例?从3个方面带你写一个合格的测试用例

前言 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很头疼&#xff0c;无法接触需求&#xff0c;只能根据站在用户的角度去做测试&#xff0c;但是这样情况会导致不能全方位的测试APP&#xff0c;这种情况就需要一份测试用例了&#xff0c;但是不…

亿级高并发电商项目-- 实战篇 --万达商城项目 七(品牌模块、商品类型模块等开发)

专栏&#xff1a;高并发---分布式 在管理商品时&#xff0c;除了商品名、价格、商品介绍等基本参数外。还需 要给商品添加品牌、商品类型、商品规格等参数。比如Iphone13的 品牌是苹果。商品类型属于手机通讯>手机>手机。规格有机身颜色: 星光色、版本:128G。品牌、商品…

暗网与深网:5 个主要区别

在互联网上&#xff0c;深网不会被网络爬虫索引&#xff0c;而暗网是故意隐藏的。 文章目录前言一、暗网与深网二、什么是暗网&#xff1f;什么是深网&#xff1f;暗网和深网之间的 5 个主要区别1. 范围和操作暗网深网2. 尺寸暗网&#xff1a;深网&#xff1a;3. 访问暗网深网4…

数据的分组聚合

1&#xff1a;分组 t.groupby #coding:utf-8 import pandas as pd import numpy as np file_path./starbucks_store_worldwide.csv dfpd.read_csv(file_path) #print(df.head(1)) #print(df.info()) groupeddf.groupby(byCountry) print(grouped) #DataFrameGroupBy #可以遍历…

1.2配置OSPF包文分析和验证

1.2.2实验2:配置OSPF包文分析和验证 [1] 实验目的通过抓包分析OSPF的包文实现OSPF区域认证的配置实验拓扑实验拓扑图如图1-3所示。 图1-3 配置OSPF包文分析和验证 实验步骤 IP地址的配置、运行OSPF的步骤与实验1相同,此处略。[2] 在R1的g0/0/0抓包

Redis 集群搭建及集群管理工具

目录一、简介二、架构图三、搭建集群3.1、下载3.2、编译安装3.3、配置文件修改3.4、创建集群四、集群管理工具redis-cli4.1、查看集群信息4.2、检查集群4.3、修复槽错误4.4、重分片4.5、负载均衡4.6、添加节点4.7、删除节点4.8、设置超时4.9、导入数据4.10、重建集群一、简介 本…

【JavaWeb】网络编程概念 + Socket套接字 + UDP/TCP编程

目录 网络编程基础概念 发送端与接受端 请求与响应 客户端与服务器 常见的客户端服务器模型 Socket套接字 回显(echo)程序 UDP版的回显程序 服务器代码 客户端代码 结果 TCP版的回显程序 服务器代码 客户端代码 结果 网络编程基础概念 网络编程&#xff0c;指网…

2.5|物联网应用系统设计|复习提纲|提问背诵

基础概念总结掌握Linux常用的基本命令功能、语法结构&#xff0c;用法等。具体命令参考实验指导书、相关PPT等资料内容。什么是操作系统&#xff08;OS&#xff09;&#xff1f;操作系统是用以控制和管理计算机系统资源&#xff0c;方便用户使用的程序和数据结构的集合。在所有…

零基础学习Python的一点建议

Python语言的火爆程度&#xff0c;真的是超过了任何一门计算机语言&#xff0c;当然火爆程度里面含有赶上了人工智能这个领域的风口&#xff0c;但是大部分的原因是Python易学&#xff0c;语法对小白非常友好&#xff0c;总结一句话&#xff0c;Python语言能做很多事情&#xf…