DOM盒模型

本文深入解析CSS盒模型,包括传统盒模型与CSS3盒模型的区别,以及JavaScript如何获取元素的盒模型属性,如可视区域宽度、边框宽度等,帮助理解布局原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clipboard.png

CSS中的盒模型

  1. 传统盒模型
    在传统盒子模型中我们说的宽度和高度是指该块元素内容的宽度和高度。
    而一个块元素的宽度是

        width === width+padding(left/right)+border(left/right);

    相应的一个块元素的高度是

    height === height+padding(top/bottom)+border(top/bottom);
  2. CSS3中的盒模型
    在css3中新增加了盒子模型
    .box{

       border-sizing: border-box;

    }
    此时块元素的的width和height仅仅是这个块元素的宽度和高度。它包含了这个块元素的padding和border。在这个基础上我们在修改padding或者border块元素的宽度讲不会发生变化。改变的是内容的宽高。

JS中的盒模型

JS中也提供了一些属性和方法用来描述当前元素的样式,主要有以下几种:
备注:通过JS盒子模型属性获取的结果是不带单位的。而且只能是整数(它会自动四舍五入,进行计算)

  1. clientWidth/clientHeight
    clientWidth/clientHeight:当前盒子可视区域的宽度和高度
    可视区域是指:内容的宽高+padding

    clientWidth = width + padding(left + right);
    clientHeight = height + padding(top + bottom);

    可视区域和内容是否溢出以及我们是否设置了overflow:hidden没有关系
    在我们的项目中,我经常这样使用这两个属性

    //获取当前页面一屏幕的宽度
    W = document.documentElement.clientWidth||document.body.clientWidth;
    //获取当前页面一屏幕的高度
    H = document.documentElement.clientHeight||document.body.clientHeight;

    利用这个就可以实现让一个盒子水平和垂直居中。
    即实现相对定位,计算出来left和top就可以实现

    //width和height是盒子的宽高
    left = (W-width)/2;
    top = (H-height)/2;
  2. clientLeft/clientTop

    clientLeft:盒子左边框的宽度。
    clientTop:盒子上边框的高度。
    它俩获取的结果其实就是border-width。
    JS中只有clientLeft和clientTop,没有clientRight和clientBottom这两个属性。

  3. offsetWidth/offsetHeight

    offsetWidth/offsetHeight就是在clientWidth和clientHeight的基础上加上盒子的边框。
    即:

    offsetWidth === clientWidth + border(left/right);
    offsetHeight === clientHeight + border(top/bottom)

    和内容是否溢出没有关系。
    在我们的项目中,如果想获取一个盒子的宽度和高度,我们一般用offsetWidth(而不是clientWidth)和offsetHeight,因为border也算是当前盒子的一部分。

  4. scrollWwidth/scrollHeight

    1) 没有内容溢出情况下:

       获取的结果和clientWidth/clientHeight是一样的

    2) 有内容溢出的情况下:

     真实内容的宽度和高度(包含溢出的内容),在加上左边的padding 和上边的padding 值。
     
        //有横向滚动条时,获取当前页面的真实宽度
        document.documentElement.scrollWidth||document.body.scrollWidth;
        //有纵向滚动条时,获取当前页面的真实高度
        document.documentElement.scrollHeight||document.body.scrollHeight;
  5. window.getComputedStyle/currentStyle

    在JS中获取元素具体的样式值:例如获取某个元素的paddingLeft值。
    方法一:
    currentElement.style.XXX
    例如:

    box.style.paddingLeft

    注意这个方法是获取当前元素的行内样式。只能获取当前元素的行内样式,内嵌或者外联样式是不能获取的

    方法二:
    通过 window.getComputedStyle/currentStyle可以获取所有经过浏览器计算过的样式。

    或者当前元素的paddingLeft值,使用例子:

    window.getComputedStyle(box, null).paddingLeft
    //或者下面这个方法,box是当前元素,第二个参数是当前元素的伪类,一般为
    window.getComputedStyle(box, null)['paddingLeft']

    window.getComputedStyle在IE6~8中不兼容。不兼容的原因是因为在IE6~8下,window对象没有getComputedStyle属性发放导致的。所以在IE6~8中我们使用currentStyle属性。备注currentStyle只有IE中才有,其他浏览器中都没有这个属性。使用方法例子:

    box.currentStyle['paddingLeft'];
    //或者
    box.currentStyle.paddingLeft
关于 JavaScript 模型的概念,实际上更常见的是 CSS 模型被用来描述 HTML 元素在页面上的布局方式。然而,在 JavaScript 中可以通过操作 DOM 来间接影响这些模型的行为和特性。下面详细介绍与 JavaScript 相关的模型概念及其组成部分。 ### 一、JavaScript 对模型的影响 尽管 JavaScript 自身并没有专门定义所谓的“模型”,但它提供了强大的功能去操控由 CSS 定义的模型。开发者能够利用 JavaScript 动态调整元素尺寸、位置以及其他样式属性,从而改变网页上显示效果。 #### 修改模型属性 例如,使用 JavaScript 可以轻松更改一个元素的内容区域大小(content)、内边距(padding)、边框(border),甚至外部空白(margin)[^1]。这里给出一段简单的例子展示如何通过脚本语言访问并修改这些值: ```javascript let element = document.querySelector('.a'); // 获取目标元素 element.style.width = '200px'; // 设置宽度 element.style.height = '200px'; // 设置高度 element.style.padding = '20px'; // 调整内部间距 element.style.border = '5px solid black';// 更改边框样式 element.style.margin = '10px'; // 应用外边距 ``` 这段代码片段展示了怎样运用 JavaScript 改变 `.a` 类名所代表的那个 div 的几何特征,包括但不限于其宽高、填充量、边界线粗细以及周边留白距离等参数设置[^4]。 ### 二、组成要素解析 虽然严格意义上讲这是基于CSS理论框架下讨论的话题,但从编程实践角度来看,理解如下几个核心组件对于掌握如何借助JS控制视觉呈现至关重要: 1. **内容区(content)** - 这是最基本的部分,指定了具体文本或图像等内容的实际占用空间范围; 2. **内边距(padding)** - 将内容与其周围边界的间隔拉开一定距离形成缓冲地带; 3. **边框(border)** - 绕着内容加上一圈装饰性的线条作为分隔标志; 4. **外边距(margin)** - 提供与其他相邻对象之间的额外空隙保障整体排列整齐有序[^5]。 每个部分都可以单独设定各自的度量单位(px, % etc.) 并且相互叠加最终决定了整个容器的整体外观形态。 ### 结论 综上所述,虽然不存在独立意义上的所谓 “JavaScript 模型”,但是凭借丰富的 API 接口集合,我们完全有能力灵活定制各类复杂交互式的 UI 效果。通过对上述各个构成单元的学习研究,可以更好地把握前端开发技巧要点所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值