Preface
In the process of developing small programs using uniapp, we often encounter situations where we need to obtain the height of DOM elements. However, sometimes we find that the height obtained through uni.createSelectorQuery().select().boundingClientRect() is not accurate. So how did this situation arise? How to solve it? This article will explain it to you in detail.
The problem occurs
First, let’s reproduce the problem. For example, in the simple template below, we need to get the height of the child element content
.
<template> <view> <view>内容区域</view> </view> </template>
We can get the height of the content
element in the following way:
mounted() { uni.createSelectorQuery().in(this).select('.content').boundingClientRect(rect => { console.log(rect.height) }).exec() }
So we can see the height of content
in the console .
However, when we add some styles to the content
element, such as:
.content { margin: 10px; padding: 20px; }
Run the program again, we will find that the height of the console output is the height we expected. Inconsistent and slightly less than we expected. This is the problem of "inaccurate acquisition of DOM height" that we often encounter.
Cause Analysis
So, what is the cause of the problem? After reviewing the information, we can learn the following reasons:
1. Using this style alone will cause height calculation errors and produce white edges.
2. This is because margin
and padding
occupy different spaces for elements. margin
does not occupy space, but padding
takes up space.
Since boundingClientRect
is affected by padding
and border
, but margin
is not affected, so in boundingClientRect
will reduce the height of padding
when obtaining the height.
Solution
Now that we have grasped the cause of the problem, the solution is ready to come out. We can solve this problem through the following methods:
1. Get the height of the parent element through uni.createSelectorQuery().exec()
, and then get it through getComputedStyle
The padding
and border
of the child element are used to calculate the actual height of the child element.
mounted() { uni.createSelectorQuery().in(this).select('.container').boundingClientRect(rect => { const styles = getComputedStyle(this.$refs.content.$el) const paddingTop = parseInt(styles.paddingTop) const paddingBottom = parseInt(styles.paddingBottom) const borderTop = parseInt(styles.borderTopWidth) const borderBottom = parseInt(styles.borderBottomWidth) console.log(rect.height - paddingTop - paddingBottom - borderTop - borderBottom) }).exec() }
2. Solve the problem by adding the box-sizing:border-box
style to both the child element and the parent element.
.container, .content { box-sizing: border-box; margin: 10px; padding: 20px; }
We need to pay attention to two points here:
(1) box-sizing
The style needs to be added to two elements.
(2) It is necessary to pay attention to whether the interval between the child element and the parent element is incorrect.
Conclusion
Through the above methods, we can solve the problem of high inaccuracy in obtaining DOM by uniapp. Please choose to use it according to your specific situation. I hope this article can be helpful to you.
The above is the detailed content of How to get the dom height in uniapp is inaccurate. For more information, please follow other related articles on the PHP Chinese website!

The article discusses debugging strategies for mobile and web platforms, highlighting tools like Android Studio, Xcode, and Chrome DevTools, and techniques for consistent results across OS and performance optimization.

The article discusses debugging tools and best practices for UniApp development, focusing on tools like HBuilderX, WeChat Developer Tools, and Chrome DevTools.

The article discusses end-to-end testing for UniApp applications across multiple platforms. It covers defining test scenarios, choosing tools like Appium and Cypress, setting up environments, writing and running tests, analyzing results, and integrat

The article discusses various testing types for UniApp applications, including unit, integration, functional, UI/UX, performance, cross-platform, and security testing. It also covers ensuring cross-platform compatibility and recommends tools like Jes

The article discusses common performance anti-patterns in UniApp development, such as excessive global data use and inefficient data binding, and offers strategies to identify and mitigate these issues for better app performance.

The article discusses using profiling tools to identify and resolve performance bottlenecks in UniApp, focusing on setup, data analysis, and optimization.

The article discusses strategies for optimizing network requests in UniApp, focusing on reducing latency, implementing caching, and using monitoring tools to enhance application performance.

The article discusses optimizing images in UniApp for better web performance through compression, responsive design, lazy loading, caching, and using WebP format.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Linux new version
SublimeText3 Linux latest version
