新年第一弹:js、css与高度(宽度)共享

article/2025/10/24 18:51:14

高度共享,是高度共享和宽度共享的总称。是笔者总结的一个针对某些问题解决的思路。并不是一个新的技术点或模式 —— 至少目前来说。甚至可能你已经在项目中用过类似的。
它的核心就是:降低 js 复杂计算和耗时操作在类似场景中的比重。

没啥说的,通过两个业务场景描述一下即可。

宽度共享

有一个很常见的场景:侧边栏。侧边栏一般都是 fixed 定位,脱离了文档流会造成可能影响旁边的元素内容。
toy微前端框架初始页面-fixed遮挡后面文字
fixed 元素不管怎么说,脱离了文档流已经“不可控”。于是大多数网站采用了这样的方式:侧边栏固定大小。但是对一种情况来说不是很好:响应式。

这时候有两种方法,而且都是和 js 相关的:

  1. 根据侧边栏大小的改变,动态改变右边内容的 margin-left 大小;
  2. 有一个元素能够作为 fixed 元素的“影子”,它的大小和 fixed 元素大小保持一致,并且不脱离文档流存在

先说,这两种方法在这个场景下是基本一致的,但是第二种方法可以封装组件复用,甚至可以不侵入右边内容的业务逻辑。
而且,侧边栏不一定在左边,还可能在右边;还可能是顶部或底部的 fixed。

我随手写了一个组件,可以根据传参进行判断:

<template><section class="highly-s-content" :class="{'highly-s-content-column': side[0]=='height'}"><div class="highly-shadow" v-if="showSlide" :style='highlyShadowStyle'></div><div :class="['highly-body', highlyShadowClass]" ref="highlyRef"><slot name="highlyslide"></slot></div><!-- 要么把右边/左边内容放到slot中,要么必须保证这个组件引用位置的父组件有display flex或者行内设置 --><slot name="content"></slot></section>
</template><script>export default {props: {showSlide: { //外部传进来的,在外部是控制slide是否显示,传进来后控制slide的“影子组件”是否显示type: Boolean,default: false},side: {type: Array,default: ()=> { return ['width', 'left'] }}},data() {return {noHeighlyBox: false,innerShareWidth: "100px",}},computed: {highlyShadowClass() {return this.side[0] == 'width' ? `highly-width-${this.side[1]}-body` : `highly-height-${this.side[1]}-body`;},highlyShadowStyle() {if(this.side[0] == 'width') {return { width: this.innerShareWidth, overflow: "hidden", flex: `0 0 ${this.innerShareWidth}`, maxWidth: this.innerShareWidth, minWidth: this.innerShareWidth, transition: "background-color 0.3s ease 0s, min-width 0.3s ease 0s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) 0s" }} else {return { height: this.innerShareWidth, overflow: "hidden", flex: `0 0 ${this.innerShareWidth}`, maxHeight: this.innerShareWidth, minHeight: this.innerShareWidth, transition: "background-color 0.3s ease 0s, min-height 0.3s ease 0s, max-height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) 0s" }}}},mounted() {console.log('高度共享组件-初次实践')if(this.$refs.highlyRef.children[0]) {this.innerShareWidth = window.getComputedStyle(this.$refs.highlyRef.children[0],null)["width"]}},methods: {$_resizeBox() {if(this.$refs.highlyRef.children[0]) {this.innerShareWidth = window.getComputedStyle(this.$refs.highlyRef.children[0],null)["width"]}}}}
</script><style lang="scss">.highly-s-content {display: flex;&.highly-s-content-column {flex-direction: column;}&>.highly-body {position: fixed;z-index: 2;&.highly-width-left-body {top: 0;left: 0;height: 100%;}&.highly-width-right-body {top: 0;right: 0;height: 100%;}&.highly-height-top-body {top: 0;left: 0;width: 100%;}&.highly-height-bottom-body {bottom: 0;left: 0;width: 100%;}}}
</style>

如果页面改变,可以调用组件的 $_resizeBox 方法更新大小。
toy微前端框架初始页面-解决遮挡问题

高度共享

和上面宽度共享是一个道理。拿上面的项目截图来说,顶部的内容其实就做了高度共享。而且上面封装的组件是可以通过参数传入决定是高度共享还是宽度共享的。
toy微前端框架初始页面-高度共享
但是高度共享不止于此。

我前同事曾经告诉我一个场景(虽然我至今都想不出设计是怎么想出这个方案的):一个商品列表项,每行有两列,如果某行其中一个有 sku,而另一个没有,则没有的那个商品展示的高度要和有 sku 的商品展示的高度一致。
简单来说就是,每行展示两个商品,高度保持一致。
前东家-微店买家侧-test数据

他是这么做的:利用 js 遍历商品数组,然后判断他们有没有sku,再根据是第几个商品返回 true 或 false,比如第一个商品有 sku,那第一个商品和第二个商品都返回 true。

现在这个需求要求的比较简单,几个商品即可,这种写法还能支持,若是后面迭代要展示几十个或者不限制呢?毫无疑问这种写法是不可能上线的。

当时我就已经在进行有关“高度共享”的想法了,我当即想到:为什么不能在 HTML 结构中以“每一行”为一个整体,它拥有一个 min-height,然后在 js 中初始时遍历商品数组将一维数组转变成 2 为基数的二维数组呢?这样对每一行的每一项都设置 height: 100% 即可轻松解决问题。

so easy~


细想,这种思路还可以用在更多的业务场景中,解决结构问题、提高代码效率。

我上次文章中提到的toy-micro-web微前端项目已开源至 gitee:toy-microWeb项目 !欢迎star!
本框架是一次test,采用“以主应用为主,总控所有应用”的方式,以“页面级”为维度,是我对微前端的探索和第一版产出。
本框架除了尝试微前端,还将作为作者提出的“新组件库”和“css架构”想法的试验模板。


http://chatgpt.dhexx.cn/article/FttciwEe.shtml

相关文章

这个 api 管理工具悄悄开源了,快来看看

说到开源的 API 管理工具&#xff0c;大家可能很容易想到 Postman 的妹妹 Postwoman,如果你也喜欢开源产品&#xff0c;那接下来这个工具你可不能错过~ Eoapi 是一款类 Postman 的开源 API 管理工具&#xff0c;它更轻量&#xff0c;同时可拓展。 支持基础的 API 文档和测试功…

Apipost和 Apifox 哪个好用?两大国产API管理工具深度对比

Apipost和 Apifox 哪个好&#xff1f;这两款国产API 管理工具的推广力度那叫一个猛&#xff0c;就鬼打墙似的&#xff0c;我在哪个公众号都能看到他们两家的推广。 我内心OS 就是&#xff1a; 只有充分内卷&#xff0c;才能够把厂商们的平均水平提上来&#xff0c;真正的强者…

好用的开源 API 接口测试工具

一提到 API 接口测试的工具&#xff0c;对于有经验的程序员可能会想起的是 Postman、 Jmeter、SoapUI,但众所周知&#xff0c;他们也会有一些缺点&#xff0c;导致他们在使用上体验不是特别好。 比如 Postman 的文档功能可能没那么强大&#xff0c;以及商业版定价太高了&#x…

盘点好用的API管理软件,API管理开发工具Postman

Postman是一款简单高效的api管理开发工具&#xff0c;你可以在组织良好的图形用户界面中管理&#xff0c;组织和测试API&#xff0c;并加速新应用程序的开发。Postman破解版为您提供了为API创建和组织HTTP请求的可能性&#xff0c;同时还集成了测试功能。您可以创建自定义方案并…

【高效开发工具系列】API工具

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

开源免费API管理系统

项目地址&#xff1a; https://github.com/sharemen/api-admin 本项目是以XXL-API v1.1.1 为基础进行二次开发的 原始项目地址&#xff1a;https://github.com/xuxueli/xxl-api 在原功能基础之上增加了&#xff1a; 独立DEV环境的接口根地址默认添加guest账号&#xff0c;以…

开源 API 管理工具,新版本 V1.3.0:前后置脚本、查看所有....

这是我们的第 2 篇月报&#xff0c;以后我会在这里和每一位来之不易的开发者分享产品故事以及产品进展。 我们的 1.3.0 版本功能伴随着炎热的天气如火如荼地发布了&#xff0c;UI 进行了升级&#xff0c;更清爽、更简单。 看得出改了哪里么&#xff1f; 发布了几个大功能&#…

功能强大的国产API管理神器 Eolink,亲测好用

目录 前言一、Eolink 工具介绍1.Eolink是什么2.Eolink独创的DTDD3.API 全生命周期管理4.Eolink 的使用 二、Eolink 功能使用1.Eolink 基础界面详解2.用例一键测试提升效率3.状态码文档将API快速归类4.项目概览将所有数据一览无余5.团队协作提升开发测试效率6.支持一键导入各类其…

推荐一个简单好用的开源 API 管理工具

一、什么是 Eoapi Eoapi 是一个可扩展的 API 开发工具。Eoapi 集合基础的 API 管理和测试功能&#xff0c;并且可以通过插件简化你的 API 开发工作&#xff0c;让你可以更快更好地创建 API。 二、特点 轻巧的 ❤️ 轻巧&#xff1a;采用简约的UI设计制作-简单的设计是最好的…

8 款在线 API 接口文档管理工具;好用!

1、Postman Postman是被大家所熟知的网页调试Chrome插件&#xff0c;我们常常用它来进行临时的http请求调试。幸运的是&#xff0c;Postman可以将调试过的请求保存到Collection中。形成的Collection就可以作为一份简单有效且支持在线测试的接口文档&#xff0c;使用同一账号登录…

盘点 8 款好用的 API 接口文档管理工具

随着互联网的普及和发展&#xff0c;API 接口已经无处不在。它已经在 Web 应用程序、移动应用程序、云计算、物联网、人工智能等领域中得到广泛应用。 例如&#xff0c;在金融行业中&#xff0c;API 接口可以被用于构建支付服务、银行服务和证券交易服务等&#xff1b;在医疗行…

Word基本操作之论文格式调整

Word文档 论文排版 页码 摘要目录罗马数字&#xff0c;正文阿拉伯数字 在摘要和目录页尾插入分节符&#xff0c;在罗马数字节和阿拉伯数字节中分别设置页码格式 光标定位在摘要和目录页尾处&#xff0c;点击菜单栏【页面布局】点击【分隔符】&#xff0c;选择【分节符】中的…

论文写作格式设置

做毕业设计时最麻烦的就是论文写好了却被告知格式不过关。 毕设封面&#xff0c;摘要&#xff0c;目录&#xff0c;正文、参考文献、致谢写在一个文档中打印起来方便 毕设论文格式要求如下 毕业设计&#xff08;论文&#xff09;写作规范 论文或设计说明书内容一般应由八个…

学术论文的标准格式是什么?写论文有哪些小技巧?

看到这里的各位同学&#xff0c;恭喜你们成功通关&#xff01;现在距离一篇成功的论文就只有一步之遥啦&#xff01;想必完成前面的步骤已经耗费了你们大量的脑细胞&#xff0c;那么剩下的格式问题就交给我吧&#xff01; 学术论文的格式主要分为两大部分&#xff1a; 1. 内容…

论文书写各类常见格式汇总Word版

论文书写各类常见格式汇总&#xff08;Word版&#xff09; 这个是word版&#xff0c;以word2010为例&#xff0c;其他版本类似&#xff08;都2020年了&#xff0c;我还在用2010版&#xff09;1. Word样式及格式标记介绍1.1 样式1.1.1 查看当前文字的样式1.1.2 新建样式1.1.3 修…

论文格式排版技巧(word版)

前言 由于本人在论文排版过程中走了不少弯路&#xff0c;耗费了许多时间&#xff0c;所以本文记录一下自己踩过的一些坑以及一点经验&#xff0c;希望能帮助到一些跟我一样的小白&#xff0c;一起看看吧。 首先&#xff0c;期刊论文一般都有自己的排版要求&#xff0c;比如页…

word论文格式修改

目录 WORD1.自定义目录格式2.目录中有Tab3.修改图表目录格式4.引用连续的文献标注5.将word中unknown格式的图转成正常图片&#xff08;png&#xff09;6.word打出方框里的勾7.WORD打字有延迟8.Word插入图表名&#xff1a;图3-19.所有参考文献一次性上标10. 目录中编号与文字之间…

MathType在word自动编号(学位论文格式)

步骤1:给论文各章节编号 第一步将鼠标放置在每章节的正文开始部分&#xff0c;第二步点击mathtype工具栏下的公式编号中的章&节&#xff0c;第三步点击插入分隔符&#xff0c;第四步点击插入分隔符后&#xff0c;会跳出Insert Chapter窗口&#xff0c;然后点击New Chapter选…

论文中的格式设置

1.以正文为首页添加页码&#xff0c;目录、封皮无页码 首先&#xff0c;鼠标光标放在正文第一行。 点击页面布局->分隔符->下一页&#xff0c;在当前页之前会出现一张空白页&#xff0c;若未出现空白页&#xff0c;则再次点击下一页&#xff0c;直到出现一张空白页为止。…

EndNote编辑毕业论文格式

Ref:https://baijiahao.baidu.com/s?id1661402332515304063&wfrspider&forpc https://jingyan.baidu.com/article/a3761b2b99c50d5477f9aa2e.html http://blog.sina.com.cn/s/blog_b43ab1510102yvu5.html 0. 在编辑->输出样式中打开样式管理器&#xff0c;编辑Scie…