当前位置: 首页 > 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(手写笔记)
  • 检索网站怎么做/电商网站建设报价
  • 萝岗区营销型网站建设/网络推广一般怎么收费
  • 做网站时管理员权限的页面/百度推广没有效果怎么办
  • 政府部门建网站的目的/精准营销通俗来说是什么
  • wordpress调用网站副标题/软文营销的步骤
  • 沧州做网站/seo代理计费系统