无法获取隐藏元素宽度和高度的解决方案

要获取一个元素的宽度和高度并不难,但如果该元素具有CSS属性 display: none 或者使用 opacity: 0 隐藏的话,我们就无法通过直接获取元素的宽度和高度来获取其准确值。那么如何解决这个问题呢?

解决方案

方案一:使用visibility属性

这个方案相对比较简单,只需要使用 visibility 属性替换 display 属性,并将其设置为 hidden 即可。

.hidden-element {
  visibility: hidden;
}
var element = document.querySelector('.hidden-element');
var width = element.offsetWidth;
var height = element.offsetHeight;

这样就可以正常获取到该元素的宽度和高度了。

方案二:使用clone元素

这个方案需要将元素克隆一份出来,然后将克隆出来的元素插入到文档中,再通过获取克隆元素的宽度和高度来获取原始元素的宽度和高度。

<div class="clone-me">
  <p>Hello World!</p>
</div>
var element = document.querySelector('.clone-me');
var clone = element.cloneNode(true);
clone.style.position = 'fixed';
clone.style.top = '-9999px';
clone.style.left = '-9999px';
document.body.appendChild(clone);

var width = clone.offsetWidth;
var height = clone.offsetHeight;

document.body.removeChild(clone);

以上代码中,我们将 clone-me 元素克隆出来,并将其样式设置为不可见,然后将其插入到文档的一个不可见位置。这样我们就可以通过 clone 元素获取到 element 元素的宽度和高度了。

示例说明

示例一:使用visibility属性

假设我们有一个元素,其样式如下:

.hide-me {
  display: none;
}

我们无法通过获取该元素的宽度和高度:

var element = document.querySelector('.hide-me');
var width = element.offsetWidth;    // 返回0
var height = element.offsetHeight;  // 返回0

此时我们可以将 display 属性替换为 visibility 属性,将其设置为 hidden

.hide-me {
  visibility: hidden;
}

然后就可以正常获取到该元素的宽度和高度了:

var element = document.querySelector('.hide-me');
var width = element.offsetWidth;    // 正确获取元素宽度
var height = element.offsetHeight;  // 正确获取元素高度

示例二:使用clone元素

假设我们有一个元素,其样式如下:

.hide-me {
  opacity: 0;
}

我们无法通过获取该元素的宽度和高度:

var element = document.querySelector('.hide-me');
var width = element.offsetWidth;    // 返回0
var height = element.offsetHeight;  // 返回0

此时我们可以将该元素克隆一份,并将克隆出来的元素插入到文档中:

var element = document.querySelector('.hide-me');
var clone = element.cloneNode(true);
clone.style.position = 'fixed';
clone.style.top = '-9999px';
clone.style.left = '-9999px';
document.body.appendChild(clone);

var width = clone.offsetWidth;
var height = clone.offsetHeight;

document.body.removeChild(clone);

这样我们就可以通过 clone 元素获取到 element 元素的宽度和高度了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:无法获取隐藏元素宽度和高度的解决方案 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS3混合模式mix-blend-mode/background-blend-mode简介

    CSS3混合模式mix-blend-mode/background-blend-mode简介 mix-blend-mode CSS3混合模式是在CSS2的基础上增加的新特性,用于控制在两个图层重叠时如何混合它们的颜色值。mix-blend-mode属性控制元素的内容与其父元素的背景混合模式,它指定元素内容的混合方式,即将前景层和背景层的颜色进行混合。 混合模…

    css 2023年6月9日
    00
  • 该不该使用ID选择器?浅谈对CSS的ID选择器的使用建议

    我来为大家详细讲解一下“该不该使用ID选择器?浅谈对CSS的ID选择器的使用建议”。 什么是ID选择器? ID选择器是CSS选择器的一种,用于选取具有特定ID属性的HTML元素。 在CSS中,我们使用#符号+ID名称的形式来表示ID选择器,例如:#header表示选取ID为header的HTML元素。 ID选择器的优缺点 优点: 精准度高:ID选择器的优点在…

    css 2023年6月9日
    00
  • 深入剖析从输入URL到页面显示过程原理

    下面我将详细讲解“深入剖析从输入URL到页面显示过程原理”的完整攻略。 1.域名解析(DNS解析) 当用户在浏览器中输入一个URL时,浏览器首先需要将URL中的域名解析为IP地址,从而定位到服务器。这个解析的过程叫做DNS解析。具体过程如下: 浏览器首先会检查浏览器缓存中是否保存了该域名的IP地址。 如果浏览器缓存中没有,那么浏览器会向本地DNS服务器发送一…

    css 2023年6月10日
    00
  • 日常收藏的jquery技巧

    下面我会详细讲解“日常收藏的jquery技巧”的完整攻略。 日常收藏的jquery技巧 选择器 基本选择器 在jQuery中,选择器可以帮助我们找到HTML页面中指定的元素。在使用选择器时,我们可以使用以下几个基本选择器: * (星号):选择所有元素 element:选择指定元素名的元素,例如p、h1、div #id:选择指定id的元素,例如#header …

    css 2023年6月11日
    00
  • css 边框添加四个角的实现代码

    对于如何添加 CSS 边框的四个角,以下是完整攻略: 1. 使用 border-radius 属性 CSS3 引入了 border-radius 属性,可以用于圆角效果的实现,而 border-radius 同时也可以用于添加边框的四个角。通过设置 border-radius 的值,我们可以使边框的角变为圆角。 /* 实现四个角都为圆角 */ .div { …

    css 2023年6月10日
    00
  • 关于vue.js过渡css类名的理解(推荐)

    关于vue.js过渡css类名的理解(推荐)这个主题,我可以给您提供以下完整攻略。 1.背景概述 Vue.js是一个渐进式JavaScript框架,它提供了过渡功能,使得我们可以在组件的状态或者父组件和子组件之间的切换时,清晰地呈现过渡动画的过程。这个过程中,Vue.js提供了丰富的css类名控制,帮助我们实现更加复杂和细致的动画效果。 2.过渡类名 Vue…

    css 2023年6月10日
    00
  • 三个很特别的CSS小技巧分享

    以下就是“三个很特别的CSS小技巧分享”的完整攻略。 弹性盒子让两个子元素等分父容器 要实现让两个子元素等分父容器,我们需要用到Flex布局。首先,将父容器的display属性设置为flex,然后再通过flex-grow属性将子元素占据父容器的比例设置为1,这样两个子元素就等分了父容器。 示例代码: <div class="container…

    css 2023年6月10日
    00
  • vue 项目常用加载器及配置详解

    下面是关于“vue 项目常用加载器及配置详解”的完整攻略: 一、概述 在Vue.js工程中,有许多工具可使你方便地开发,如Webpack、vue-loader、babel-loader等。 在这篇文章中,我们将介绍Vue.js的常用加载器以及如何配置它们,以便于将其用于Vue.js工程中。 二、vue-loader vue-loader是一个Webpack的…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部