CSS弹性盒子布局图标的展示效果优化技巧

简介: 本文介绍前端开发中一个弹性布局的优化问题:小屏幕下图标错位影响美观。通过媒体查询和ResizeObserver API两种方案,实现容器宽度不足时隐藏图标,提升响应式体验。重点讲解ResizeObserver对单个元素的精准监听与Vue中的实践应用,兼顾用户体验与代码性能。

目录

前言

在前端开发的日常工作中,CSS布局用到很多。有时候设计师考虑不够充分,没有针对不同设备尺寸,做布局显示上的优化,但作为前端开发,必须要考虑这些,需要对自己开发的页面负责。正好我在工作中遇到了一个CSS布局的小问题。本文将介绍这个问题的来源,以及我的解决思路。

问题描述

在我公司某个项目中,存在一个弹性布局的问题。有一个首页有多个统计展示内容,这些内容以块的方式展示。我在查看这个页面的时候,发现页面块在小尺寸下存在一些不美观的情况。

比方说下面这个区域内容,原本正常显示是这样的:

请在此添加图片描述

但当我把窗口宽度缩小后,出现了 icon 图标掉下来的情况,时间和icon挤压在了一起,看着很不美观。

请在此添加图片描述

为了解决这个问题,我研究了一下,找到了比较好的解决方案。

解决方案

我的思路其实很简单,就是当容器盒子宽度不够的时候,隐藏icon图标,只显示必要的文字和数字。这样对小尺寸的屏幕或者窗口来说,会比较友好。下面我将介绍两个解决方案。

方案一:媒体查询

可以设置当前窗口,小于一个固定尺寸宽度的时候,比方说 1200px,则隐藏子元素。

/* 媒体查询:当父盒子宽度小于300px时,子元素的icon不显示 */
@media (max-width: 1200px) {
  .parent-box .child-element {
    display: none;
  }
}

这种方法比较常规,但监测屏幕范围过大,没有针对单个 DOM 元素检测精确,部分情况下可能不适用。于是就有了方案二。

方案二:ResizeObserver API

这个是 2020 年2月11 日发布的 API,比较新,对现代浏览器支持较为友好,可以看看 caniuse 上的支持情况。

请在此添加图片描述

还是针对这个案例,具体的用法示例如下:

// 监测 DOM 元素尺寸 变化
this.resizeObserver = new ResizeObserver(entries => {
  console.log('监听DOM元素尺寸发生了变化', entries)
  // 尺寸大于 235px 则显示 icon
  this.showIcon = entries[0].contentRect.width >= 235
})
// 把需要监测的 DOM 元素添加进去
this.resizeObserver.observe(document.querySelector('.child-element'))

showIcon是 Vue 中 data 的新定义的变量,通过它配合 v-show,可以控制是否显示隐藏 icon 图标。resizeObserver记得也要在 data 中定义一下。

修改后的效果如下:

请在此添加图片描述

针对项目,还可以更完善一下,比方说Vue路由跳转销毁当前页面前,做一个取消观察的操作。

beforeDestroy() {
  this.resizeObserver.unobserve(document.querySelector('.child-element'))
  // 将实例设置为 null,方便 JavaScript 垃圾回收
  this.resizeObserver = null;
}

还有个方法,取消可以所有的观察活动,如果之前添加的观察事件比较多,也可以用这个。

this.resizeObserver.disconnect()

总结

虽然这个问题看似不起眼,但找到合适的解决方案对用户体验至关重要。通过本文的介绍,希望能给大家在处理类似问题时提供一些思路和启发。使用媒体查询可以快速解决大多数简单问题,而使用ResizeObserver API则可以实现更精确的控制,特别是在需要针对单个元素进行尺寸监控时。

参考

监听DOM尺寸变化 - ResizeObserver_监听dom元素大小变化-CSDN博客

Resize Observer

"ResizeObserver" | Can I use... Support tables for HTML5, CSS3, etc

目录
相关文章
|
6天前
|
JavaScript 前端开发 开发工具
前端开发必备的 VSCode 插件推荐(第三期)
本文推荐两款提升Vue开发效率的VSCode插件:vue-helper,支持代码扩选、快速跳转与变量定位;别名路径跳转插件,解决@路径无法跳转问题。配置简单,实用高效,助力前端开发提速。
135 0
|
6天前
|
JavaScript 前端开发 定位技术
Vue项目中的虚拟滚动:提升页面渲染性能的最佳实践
本文介绍虚拟滚动技术及其在Vue项目中的应用,通过vue-virtual-scroller实现大数据量下长列表的高性能渲染,提升页面流畅度与用户体验,适用于地图轨迹等业务场景。
90 0
|
6天前
|
前端开发 JavaScript 定位技术
前端表单输入框自动填充和覆盖逻辑的实现
本文介绍Web开发中表单联动的实现方案,针对输入框与下拉框的数据填充需求,提出两种解决思路:一是通过比对选项label判断是否覆盖,二是监听用户输入行为设置flag开关。结合Vue与Element-UI实战代码,详解如何智能控制数据填充逻辑,避免覆盖用户手动输入内容,提升表单交互体验。
55 0
前端表单输入框自动填充和覆盖逻辑的实现
|
2天前
|
人工智能 前端开发 程序员
前端天塌啦,后端程序员福利,这个开源UI/UX外挂,给 Cursor/Windsurf 加个 审美插件
小华同学推荐开源项目UI UX Pro Max:为AI生成UI提供设计数据库支持,解决配色、风格、UX规范混乱难题。集成主流AI编程工具,一键调用,提升开发效率50%以上,10万+开发者已订阅!
223 3
|
3天前
|
人工智能 小程序 JavaScript
uni-app微信小程序相机组件二次拍照白屏问题的排查与解决
本文分享了在uni-app开发微信小程序时,因状态管理不当导致拍照后图片不显示的bug排查过程。问题根源在于删除照片时将变量设为“#”(truthy值),导致条件渲染逻辑错误。通过彻底清空相关状态并遵循最佳实践,最终解决问题。
46 2
|
3天前
|
JavaScript 前端开发 iOS开发
NVS:一款简洁高效的 Node.js 版本管理工具
本文由前端开发者喵喵侠分享,介绍轻量级Node.js版本管理工具nvs的使用方法。涵盖Windows安装、常用命令(如add、link、use、ls、rm)、全局与局部版本切换技巧,并详细说明macOS下卸载nvs的完整步骤。相比nvm,nvs在Windows上体验更稳定,操作简洁高效,适合多项目开发场景。
58 1
|
3天前
|
前端开发 JavaScript iOS开发
Volta:一款优秀的前端开发 JavaScript 项目管理器
前端开发者喵喵侠分享使用 Volta 管理 Node.js 版本的实战经验。Volta 可跨平台统一管理 Node、npm、pnpm 等工具版本,支持在 `package.json` 中锁定依赖,实现项目级环境自动切换,尤其解决了 Windows 下 nvm/nvs 的兼容问题,提升团队协作效率。
39 1
|
6天前
|
监控 数据可视化 安全
发布周期计划工具:低代码结构化发布管理体系的工程实践
系统探讨发布周期管理的挑战与解决方案,剖析责任模糊、信息不透明、反馈缺失等根源问题,提出以工具化、数据驱动为核心的现代化管理体系。涵盖责任绑定、智能依赖、自动化同步与健康度评估四大设计原理,指导技术选型、架构部署与文化构建,助力团队实现高效、可靠、可持续的软件交付,打造数字时代的敏捷竞争力。
|
6天前
|
文字识别 程序员 数据安全/隐私保护
macOS 上值得推荐的软件(第一弹)
本文推荐三款提升macOS使用效率的优质软件:Longshot(支持滚动截图的截图工具)、Mos(优化鼠标平滑滚动与方向设置)、NetNewsWire(免费开源RSS阅读器)。涵盖截图、系统操作与信息获取场景,助力程序员高效工作。无广告,可免费试用,欢迎体验与分享。
48 0
macOS 上值得推荐的软件(第一弹)
|
6天前
|
文字识别 开发者 Windows
Windows 上值得推荐的软件(第一弹)
本文推荐两款提升Windows使用效率的神器:Listary,实现文件快速搜索与路径跳转;uTools,集快捷启动、剪贴板智能识别与丰富插件于一体,助力高效办公。
58 0
Windows 上值得推荐的软件(第一弹)