固定元素宽度根据文本的长度缩小字号,超出缩小字号

简介: 固定元素宽度根据文本的长度缩小字号,超出缩小字号

image.png


最终效果


image.png


这是具体的代码片段


image.png


具体实现


这里我使用vue2来进行实现

先给一个盒子固定的长和高,在给他一个边框,便于观察

<div class="app">
        <div class="content" ref='content'>
                掘金
        </div>
</div>
// css
.app {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
}
.content {
    width: 160px;
    height: 60px;
    box-sizeing: border-box;
    border: 4px solid blue;
    font-size: 48px;
    color: rgb(0, 213, 255);
    display: flex;
    align-items: center;
}

顺便把问题大小和布局也写上 效果就是这样:


image.png


如果内容字数再多一点就会超出来,变成这样:


image.png


添加css,让文本不换行

white-space: nowrap;


image.png


此时文本就会超出边框

添加超出隐藏的代码

overflow: hidden;

这个时候就会导致文本显示不全


image.png


重要的一步来了,如果我给他添加一个横向的滚动

overflow-x: auto;

此时虽然可以拖动滚动条显示,但是也不能完全显示到页面上


image.png


重点来了:当有滚动条时,我们可以监听到DOM元素的滚动长度

  1. 1.使用scrollWidth可以获取的DOM元素的长度
  2. 2.使用offsetWidth获取元素的固定宽度

如果当scrollWidth值大于offsetWidth时,那就说明文本过长,出现了滚动条了

此时就可以用(文本宽度-padding宽度)/ 滚动长度 * 字体基数就可以获取到最佳的字体大小,把这个字体大小赋值给dom元素,就能使文本正常显示在可视区域内

字体基数可以根据初始字体大小设置,为了确保安全,字体基数需要比初始字体大小(40px)小就行了

setFontSize(){
    // 获取dom元素
  const dom = this.$refs.content
  // 获取padding-left值
  const {paddingLeft} = getComputedStyle(dom);
  // paddingLeft 是一个包含 px 的字符串,转化为数字
  const padding = parseFloat(paddingLeft) || 0
  if(dom.scrollWidth > dom.offsetWidth){
      // 设置新的字体大小
    dom.style.fontSize = `${(dom.offsetWidth-padding*2 ) / dom.scrollWidth * 38}px`;
  }
}

在挂载元素的时候调用这个方法,就可以将文本正常显示到页面中了


image.png


需要注意的是,字体字号最小就是12px,超过这个字号,即使再小也会显示12px的大小

动手尝试一下吧:


image.png


知识点


  • getComputedStyle该方法需要传入一个dom节点,并且会返回一个对象,该对象包含所有 CSS 属性的值。 私有的 CSS 属性值可以通过对象提供的 API 或通过简单地使用 CSS 属性名称进行索引来访问。
  • offsetWidth 属性是一个只读属性,它返回该元素的像素宽度


image.png


  • scrollWidth属性是一个只读属性,它返回该元素的像素宽度,高度包含内边距(padding)


image.png




目录
相关文章
vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录
本文介绍了在Vue 3中使用Element UI Plus的Carousel组件实现跑马灯效果的方法,并分享了在实现过程中遇到的常见问题和解决方案。
vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录
|
10月前
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
551 2
|
开发工具 git
github clone Failed to connect to github.com port 443 after xxx ms
github clone Failed to connect to github.com port 443 after xxx ms
1291 2
解决win11开启移动热点共享手机连上后无法上网的问题
本文提供了解决Windows 11开启移动热点后手机无法上网问题的步骤:通过控制面板进入网络和共享中心,在以太网属性中勾选“允许其他网络用户通过此计算机的Internet连接来连接”,然后手机重新连接共享热点即可上网。
|
前端开发 小程序
微信小程序绘制canvas时在不同 设备上的大小不同的问题
微信小程序绘制canvas时在不同 设备上的大小不同的问题
466 0
|
前端开发 IDE 开发工具
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
278 6
|
前端开发 C++ 容器
CSS【详解】居中对齐 (水平居中 vs 垂直居中)
CSS【详解】居中对齐 (水平居中 vs 垂直居中)
236 0
|
前端开发
ES6 如何动态加载 import
ES6 如何动态加载 import
315 1
window.addEventListener注册滚动scroll事件不生效
window.addEventListener注册滚动scroll事件不生效
|
存储 缓存 JavaScript
小满Vue3第四十四章(Vue3 性能优化)
FCP (First Contentful Paint):首次内容绘制的时间,浏览器第一次绘制DOM相关的内容,也是用户第一次看到页面内容的时间。
332 0
小满Vue3第四十四章(Vue3 性能优化)