当前位置: 首页 > news >正文

对于盒模型的宽高获取填坑

        最近,在做一个项目的时候,要获取一个盒模型的宽度,那么当时想到的方法就是el.style.width.我们先看一段代码。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>juke</title>
 5     <style type="text/css">
 6         #box {
 7             width: 300px;
 8             height: 300px;
 9             border: 1px solid #000;
10         }
11     </style>
12 </head>
13 <body>
14 <div id="box"></div>
15 
16 <script type="text/javascript">
17     var width = document.getElementById("box").style.width;
18     console.log(width);  // ""
19 </script>
20 </body>
21 </html>

        最后输出的是"",很诧异为什么获取不到宽度呢?当我们把第14行的代码改动一下,<div id="box" style="width=300px"></div>这时候我们就获取到了宽度值,那么对于这种获取的方法,我们可以看出,只能获取到内嵌样式的宽高,而对于其他的形式是获取不到的。

        现在,我们来思考一下,我们要怎么去获取到不是内嵌样式的宽高呢?看了很多资料,有这些办法使我们能使用的。

 1 el.currentStyle.width; // 但是这个方法有局限性,那就是只有IE才支持 

        那么还有没有其他的办法呢,当然有。window.getComputedStyle(dom),这个方法能获取当前元素css的最终属性值,那么这个方法就没有局限性了吗,答案是当然是有的,这个方法我们只能用来获取,不能用来设置,这就是这个方法的局限性。

        还有一种方法,请看下面的代码:

1 var box=document.getElementById('box');
2 //  这个属性有四个值top、right、left、bottom
3 //  它是代表和页面上边和左边的距离
4 box.getBoundingClientRect().top;  //  元素上边到视窗上边的距离
5 box.getBoundingClientRect().right //  元素右边到视窗左边的距离
6 box.getBoundingClientRect().bottom; //  元素下边到视窗上边的距离
7 box.getBoundingClientRect().left; //  元素左边到视窗左边的距离
8 
9 //  获得元素的宽高,说一点在标准盒子模型下,他获取到的盒子的宽度是content-width+border+padding  而在IE盒子模型下他获取到的是你设置的宽度,因为在IE盒子模型下padding和border是算在width里的
10
box.getBoundingClientRect().width;

这是对这周工作中遇到的一个小问题的总结。

 

转载于:https://www.cnblogs.com/zhangjuke/p/7353484.html

相关文章:

  • 普通程序员如何入门AI
  • 技术分享之AQS——内容提要
  • ansible基本使用教程
  • Kafka【第一篇】Kafka集群搭建
  • vue2.0 新手教程(一)
  • POJ 3104 Drying 二分
  • hihocoder-1546-集合计数
  • JTemplates + $.Ajax
  • 面向对象编程思想-命令模式
  • C#自定义事件模拟风吹草摇摆
  • 仿真反射详解(二)
  • alwayson01-搭建域环境
  • freemark基础知识
  • avaweb(三十二)——JDBC学习入门
  • 希尔排序之C++实现(初级版)
  • 【面试系列】之二:关于js原型
  • 2017-08-04 前端日报
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java比较器对数组,集合排序
  • Java反射-动态类加载和重新加载
  • java取消线程实例
  • JS专题之继承
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • mac修复ab及siege安装
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Promise初体验
  • ReactNativeweexDeviceOne对比
  • 类orAPI - 收藏集 - 掘金
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 思维导图—你不知道的JavaScript中卷
  • 探索 JS 中的模块化
  • 网络应用优化——时延与带宽
  • C# - 为值类型重定义相等性
  • 阿里云移动端播放器高级功能介绍
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (接口封装)
  • (六)c52学习之旅-独立按键
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)Java对象在Hibernate持久化层的状态
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (新)网络工程师考点串讲与真题详解
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (原創) 未来三学期想要修的课 (日記)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)【Hibernate总结系列】使用举例
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)(官方)UE4--图像编程----着色器开发
  • .Family_物联网
  • .NET Core 中的路径问题
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 反射 Reflect
  • .net快速开发框架源码分享
  • .Net组件程序设计之线程、并发管理(一)
  • [ JavaScript ] JSON方法