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!

This article details uni-app's local storage APIs (uni.setStorageSync(), uni.getStorageSync(), and their async counterparts), emphasizing best practices like using descriptive keys, limiting data size, and handling JSON parsing. It stresses that lo

This article details workarounds for renaming downloaded files in UniApp, lacking direct API support. Android/iOS require native plugins for post-download renaming, while H5 solutions are limited to suggesting filenames. The process involves tempor

This article addresses file encoding issues in UniApp downloads. It emphasizes the importance of server-side Content-Type headers and using JavaScript's TextDecoder for client-side decoding based on these headers. Solutions for common encoding prob

This article details uni-app's geolocation APIs, focusing on uni.getLocation(). It addresses common pitfalls like incorrect coordinate systems (gcj02 vs. wgs84) and permission issues. Improving location accuracy via averaging readings and handling

This article compares Vuex and Pinia for state management in uni-app. It details their features, implementation, and best practices, highlighting Pinia's simplicity versus Vuex's structure. The choice depends on project complexity, with Pinia suita

This article details making and securing API requests within uni-app using uni.request or Axios. It covers handling JSON responses, best security practices (HTTPS, authentication, input validation), troubleshooting failures (network issues, CORS, s

The article details how to integrate social sharing into uni-app projects using uni.share API, covering setup, configuration, and testing across platforms like WeChat and Weibo.

This article explains uni-app's easycom feature, automating component registration. It details configuration, including autoscan and custom component mapping, highlighting benefits like reduced boilerplate, improved speed, and enhanced readability.


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

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Dreamweaver CS6
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

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