每个 DOM 节点都有一个 style 属性,这个属性本身也是个对象,包含了应用于节点的 CSS 样式信息。
遗憾的是,虽然这种方式在用于内联样式时很正常,但如果是在页面 <head>
部分里使用 <style>
元素,或是使用外部样式表来设置页面元素的样式, DOM 的 style
对象就不能访问它们了
CSS 的很多属性名称包含连字符,比如 background-color 、 font-size 、 text-align 等。但 JavaScript 不允许在属性或方法名称里使用连字符,因此需要调整这些名称的书写方式。方法是删除其中的连字符,并且把连字符后面的字母大写,于是 font-size 变成 fontSize , text-align 变成 textAlign ,以此类推
利用元素的 className 属性,可以通过修改 class 属性的值来调整应用于元素的样式。
document 对象的 styleSheets 属性是一个数组,包含了页面上全部样式表(无论样式表是包含在外部文件中,还是在页面 <head>
部分里用 <style>
和 </style>
标签声明)。 styleSheets 数组里的项目以数值索引,第一个出现的样式表索引为 0 。
启用、禁用和切换样式表
getComputedStyle() 方法返回一个对象,该对象有各种方法,包括 getPropertyValue(property) ——该方法返回给定的 CSS 属性名称的当前值。
使用 offsetWidth 和 offsetHeight 两个属性可以获取元素的尺寸,其中 offsetWidth 标识元素在页面的总宽度, offsetHeight 表示元素在页面的总高度。
使用 scrollLeft 和 scrollTop 可以读写移除可视区域外面的宽度和高度。
使用这两个属性可读写滚动条的位置,或者获取滚动区域外的尺寸。
元素尺寸属性 | 说 |
---|---|
clientWidth | 获取元素的可视部分的宽度,即 CSS 的 width 和 padding 属性值之和,元素边框和滚动条不包括在内,也不包括任何可能的滚动区域 |
clientHeight | 获取元素的可视部分的高度,即 CSS 的 height 和 padding 属性值之和,元素边框和滚动条不包括在内,也不包括任何可能的滚动区域 |
offsetWidth | 元素在页面中占据的宽度的总和,包括 width 、 padding 、 border 以及滚动条的宽度 |
offsetHeight | 元素在页面中占据的高度的总和,包括 height 、 padding 、 border 以及滚动条的高度 |
scrollWidth | 当元素设置了 overflow : visible 样式属性时,元素的总宽度,也称滚动宽度。在默认状态下,如果该元素值大于 clientWidth 属性值,则元素会显示滚动条,以便能够翻阅被隐藏的区域 |
|
| scrollHeight | 当元素设置了 overflow : visible 样式属性时,元素的总高度,也称滚动高度。在默认状态下,如果该元素值大于 clientHeight 属性值,则元素会显示滚动条,以便能够翻阅被隐藏的区域
|
clientHeight= padding-top
offsetHeight= border-top-width
scrollHeight= padding-top
获取 <html>
标签的 clientWidth 和 clientHeight 属性,既可以知道浏览器窗口的可视宽度和高度,而 <html>
标签在脚本中表示为
document.documentElement 。
var w = document.documentElement.clientWidth;
var h = document.document.clientHeight;
在怪异模式下, body 是最顶成的可视元素,而 html 元素保持隐藏。只有通过 <body>
标签的 clientWidth 和 clientHeight 属性才可以知道浏览器窗口的可视宽度和高度,而
<body
> 标签在脚本中表示为 document.body 。
offsetLeft 和 offsetTop 属性返回当前元素的偏移位置, IE 的怪异模式以父元素为参照物进行偏移的位置, DOM 标准模式以最近定位元素为参照进行偏移的位置。
<head>
<style type="text/css">
div {
width: 200px;
height: 100px;
border: solid 1px red;
padding: 50px;
}
#wrap {
position: relative;
border-width: 20px;
}
</style>
</head>
<body>
<div id="wrap">
<div id="sub">
<div id="box"></div>
</div>
</div>
<script>
var box = document.getElementById('box');
console.log(box.offsetLeft);
console.log(box.offsetParent.id);
</script>
</body>
offsetParent 属性表示最近的上级定位的元素。要获取相对相应的父级元素的位置,可以先判断 offsetParent 属性是否指向父元素,如果是,则直接使用 offsetLeft 和 offsetTop 属性获取元素相对于父元素的距离,否则分别获取当前元素和父元素距离窗口的坐标,然后求差