JavaScript盒子模型及其属性

JavaScript盒子模型,指的是通过JavaScript中提供的一系列的属性和方法,获取页面中元素的样式信息值。

**内容的宽度和高度: **设置的width/height这两个样式就是内容的宽和高,如果没有设置height值,容器的高度会根据里面的内容进行自适应,这样获取的值就是真实的内容的高; 如果设置了固定的高度了,不管内容是多了还是少了,其实我们内容的高度指的都是设定的那个值。
真实内容的宽度和高度: 这个代指的是实际内容的宽高,和自己设置的width/height没有必然的联系。例如: 设置高度为200px,如果内容有溢出,那么真实内容的高度是要把溢出的内容宽高也要加进去。

client系列 (当前元素的几个私有属性)
clientWidth/ clientHeight: 内容的宽/高+左右/上下padding,和内容溢出是没有关系的。
clientLeft: 左边框的宽度;
clientTop: 上边框的高度 (borderLeftWidth/ borderTopWidth)。

offset系列
offsetWidth/ offsetHeight: clientWidth/clientHeight + 左右/上下边框,和内容溢出无关。
offsetParent: 当前元素的父级参照物。
offsetTop/ offsetLeft: 当前元素的外边框距离父级参照物内边框的偏移量。

scroll系列
scrollWidth/ scrollHeight: 和clientWidth/ clientHeight一模一样,其前提: 容器的内容没有溢出。
如果容器中的内容有溢出,获取的结果是如下规则:
1). scrollWidth: 真实内容的宽度(包含溢出) + 左padding。
2). scrollHeight: 真实内容的高度(包含溢出) + 上padding。
获取到的结果都是约等于的值, 因为: 同一个浏览器, 是否设置overflow='hidden'对于最终的结果是有影响的; 在不同的浏览器中,获取到的结果也是不相同的。
scrollLeft/ scrollTop: 滚动条卷去的宽度/高度。


关于JavaScript盒子模型属性取值的问题
通过这13个属性值获取的结果永远不可能出现小数,都是整数; 浏览器在获取结果的时候, 会在原来真实的结果上进行四舍五入。


关于操作浏览器本身的盒子模型信息
clientWidth/ clientHeight: 是当前浏览器可视窗口(一屏幕的)的宽度和高度。
scrollWidth/ scrollHeight: 是当前页面的实际宽度和高度(所有屏加起来的宽度和高度), 这些是约等于的值。
不管哪些属性,也不管是什么浏览器,也不管是获取还是设置,想要都兼容,需要写两套:
document.documentElement[attr]||document.body[attr]; 必须document.documentElement在前
设置,获取都要写两套。

    document.documentElement.clientWidth || document.body.clientWidth;
    document.documentElement.scrollTop || document.body.scrollTop;
    document.documentElement.scrollTop = 0;
    document.body.scrollTop = 0;

编写一个有关于操作浏览器盒子模型的方法

    // win: 编写一个有关于操作浏览器盒子模型的方法
    // 如果值传递了attr, 没有传递value, 默认的意识是获取样式值。
    // 如果两个参数都传递了, 意思是设置某一个样式属性的值。
    function win(attr, value) {
        if (typeof value === 'undefined') { // 说明没有传递value
            return document.documentElement[attr] || document.body[attr];
        }

        document.documentElement[attr] = value;
        document.body[attr] = value;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,679评论 1 92
  • HTML标签解释大全 一、HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(D...
    米塔塔阅读 8,635评论 1 41
  • JS盒子模型指的是通过JS中提供的一系列的属性和方法,获取页面中元素的样式信息值 client系列/offset系...
    gaoqizhuhui阅读 3,207评论 0 0
  • 一.首先介绍常用的属性: HTML精确定位:scrollLeft,scrollWidth,clientWidth,...
    silingling阅读 8,206评论 0 1
  • 文/微尘 七夕这天不见了喜鹊 它们又在银河搭桥 这天,相爱的人 眼泪 忧伤化作 天边最美的彩虹 见,也凄凉 悲切 ...
    绵绵乡愁阅读 1,865评论 0 0