当前位置: 首页 > news >正文

前端让一个div的高度为屏幕的高度减去其他所有元素的高度(包括它们的margin和padding),并自适应。

前端让一个div的高度为屏幕的高度减去其他所有元素的高度(包括它们的margin和padding),并自适应。

项目需求是让.adaptive-height的高度在不同的移动端中高度自适应。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a8c6311cfba34a1481ae898f78e45adc.pn

template

    <div class="bigBox"><div class="title1"></div><div class="title1"></div><div class="languageSwitch"></div><div class="notesMsg"></div><div class="tijiao"></div></div>

方法一、js

onMounted(() => {// 初始设置setAdaptiveHeight();// 窗口大小变化时重新计算window.addEventListener("resize", setAdaptiveHeight);
});// 设置CSS变量
function calculateTotalHeight(elements) {let totalHeight = 0;elements.forEach((element) => {const el = document.querySelector(element);if (el) {const style = window.getComputedStyle(el);const height = el.offsetHeight;const marginTop = parseFloat(style.marginTop) || 0;const marginBottom = parseFloat(style.marginBottom) || 0;const paddingTop = parseFloat(style.paddingTop) || 0;const paddingBottom = parseFloat(style.paddingBottom) || 0;totalHeight += height + marginTop + marginBottom + paddingTop + paddingBottom;}});return totalHeight;
}function setAdaptiveHeight() {// 选择所有需要计算高度的元素(使用CSS选择器)const elementsToMeasure = [".title1",".title1",".languageSwitch",".notesMsg",".tijiao",]; // 添加更多元素选择器const totalHeight = calculateTotalHeight(elementsToMeasure);const adaptiveDiv = document.querySelector(".adaptive-height");if (adaptiveDiv) {adaptiveDiv.style.height = `calc(96vh - ${totalHeight}px)`;//我的.bigBox是96vh,这里可以自己按div的高度来取值}
}

说明

calculateTotalHeight函数:这个函数接收一个元素选择器数组,遍历每个元素,计算其总高度(包括内容高度、margin和padding)。
setAdaptiveHeight函数:这个函数使用上述计算的总高度来设置自适应div的高度。
事件监听器:添加了窗口大小变化的事件监听器,以便在窗口大小改变时重新计算高度。

注意事项

确保在elementsToMeasure数组中包含所有需要计算高度的元素的选择器。
如果页面中有动态内容(例如,元素高度会变化),需要在内容变化后调用setAdaptiveHeight函数。
这种方法考虑了margin和padding,确保计算的高度是精确的。
对于复杂的布局,可能需要进一步调整计算逻辑。

这种方法提供了最大的灵活性,可以处理分散在页面各处的多个元素的高度计算。

方法二:css

.bigBox {display: flex;flex-direction: column;height: 94vh;
}
.adaptive-height {flex: 1; /* 占据剩余空间 */overflow: auto; /* 如果内容超出,添加滚动条 */
}

相关文章:

  • ubuntu 20.04 编译运行lio-sam,并保存为pcd
  • C#高级语法--接口
  • 前端如何连接tcp 服务,接收数据
  • 服务器集群都有哪些优势?
  • 电子病历高质量语料库构建方法与架构项目(提示词设计篇)
  • OAuth2TokenEndpointFilter类介绍、应用场景和示例代码
  • 89.WPF 中实现便捷的数字输入框:DecimalUpDown 控件的使用 WPF例子 C#例子.
  • 新!在 podman-machine-default 中安装 CUDA、cuDNN、Anaconda、PyTorch 等并验证安装
  • PyCharm 中 FREECAD 二次开发:从基础建模到深度定制
  • fpga系列 HDL:verilog latch在fpga中的作用 避免latch的常见做法
  • 可以在电脑上使用的备忘录记事工具评测
  • 第2讲:R语言中的色彩美学——科研图表配色指南
  • 爬虫练习 js 逆向
  • c++进阶——类与继承
  • 牛客小白月赛115-B题:签到题
  • Hot100方法及易错点总结2
  • 1.2-1.3考研408计算机组成原理第一章 计算机系统概述
  • Java 安全:如何防止 DDoS 攻击?
  • 广安理工学院(暂定名)华清远见校企合作签约揭牌,共建实习实训基地
  • 软考中级-软件设计师 知识点速过1(手写笔记)
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩
  • 魔都眼丨人形机器人“华山论剑”:拳击赛缺席,足球赛抢镜
  • 昆明一小区电梯突然从40楼降到负4楼,回应:临时断电引起
  • 经济日报:美离间国际关系注定徒劳无功
  • 上海黄浦一季度实到外资总量全市第二,同比增速领先全市
  • 阿联酋首个AI博士项目设立,助力人才培养与科技转型