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

yizhihongxing

要获取一个元素的宽度和高度并不难,但如果该元素具有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日

相关文章

  • JavaScript实现表格表单的随机选择和简单的随机点名

    接下来我将为大家详细讲解“JavaScript实现表格表单的随机选择和简单的随机点名”的攻略。 一、JavaScript实现表格表单的随机选择 首先,在HTML文件中创建表格及表格中的选项,并为选项设置相同的class。 “`html 选项一 选项二 选项三 选项四 “` 在JavaScript中获取所有选项并存储。 javascript let opt…

    css 2023年6月10日
    00
  • JavaWeb表单注册界面的实现方法

    让我来详细讲解一下“JavaWeb表单注册界面的实现方法”的完整攻略。 1. 概述 JavaWeb表单注册界面的实现方法主要包括以下几步: 设计前端页面,包括表单和提交按钮; 创建Java Servlet处理表单数据,将数据存储到数据库中; 创建数据库并设计用户表,用于存储注册用户的信息; 使用JDBC连接数据库,并编写Java代码实现数据的增删改查。 接下…

    css 2023年6月10日
    00
  • line-height 和 vertical-align 行高与行对齐精解 (图文)

    关于“line-height和vertical-align行高与行对齐精解”的攻略,我会分为以下几个部分来进行详细讲解: 什么是行高和行对齐 line-height属性的使用 vertical-align属性的使用 优化行对齐的技巧 什么是行高和行对齐 在网页中,每一行的文本或者其他内容都是通过一个包裹元素来进行呈现的,这个包裹元素就是行框(line box…

    css 2023年6月10日
    00
  • Webstorm常用快捷键备忘(Webstorm入门指南)

    Webstorm是一款非常强大的JavaScript IDE,快捷键是提高效率的重要手段。下面是Webstorm常用快捷键备忘: 编辑相关 Shift + Enter: 在当前行下面插入一行空白行。 Ctrl + D : 复制当前行,复制的行会粘贴在当前行下面。 Ctrl + Y : 删除当前行。 Ctrl + Z : 撤销上一步操作。 Ctrl + Shi…

    css 2023年6月9日
    00
  • CSS 实现侧滑显示留言面板的网页组件功能

    要实现侧滑显示留言面板的网页组件功能,需要考虑以下几个步骤: 1. 界面设计 首先需要设计留言面板的界面,一般情况下需要在主界面的一侧添加一个按钮或者图标来触发侧滑显示留言面板。 代码示例1: <div class="wrapper"> <div class="main"> <button…

    css 2023年6月10日
    00
  • Html5大屏数据可视化开发的实现

    我们来详细讲解一下 “HTML5大屏数据可视化开发的实现” 的完整攻略。 1. 介绍 随着数据可视化和大屏幕应用的日益普及,HTML5作为一种移动优先的技术解决方案开始受到人们的追捧。本文将详细讲解HTML5大屏数据可视化开发的实现,并给出两个示例说明。 2. 开发环境配置 2.1 安装node.js和npm node.js是一个开源、跨平台、高性能的Jav…

    css 2023年6月10日
    00
  • 关于table表格中的内容溢出布局方法

    好的!下面是针对table表格中内容溢出的解决方法的攻略。 问题描述 在table表格中,如果一行中某一列的内容过长,就会导致整个表格排版错乱,内容溢出,影响页面的美观度和用户的体验感。 解决方法 1. 使用CSS属性:text-overflow CSS属性text-overflow可以控制元素中溢出部分的文本如何呈现,常用于处理较长文本在较小空间内显示时溢…

    css 2023年6月10日
    00
  • 用javascript css实现GridView行背景色交替、鼠标划过行变色,点击行变色选中

    下面是详细的JavaScript和CSS实现GridView行背景色交替、鼠标划过行变色,点击行变色选中的攻略。 1. 实现思路 GridView是一个常用的表格组件,为了提升用户体验,我们可以通过JavaScript和CSS来实现GridView行背景色交替、鼠标划过行变色以及点击行变色选中的功能。具体的实现思路如下: 使用CSS选择器:nth-child…

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