Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式
样式
在HTML中定义元素的方式有以下三种:
1.link标签引入外部样式表
2.style标签定义嵌入样式
3.通过JS中对style特性定义元素样式(行内样式)
“DOM2级样式”围绕上述样式机制提供了一套API
若需要检测CSS2是否可用可以使用以下代码(虽然现在应该是用不着,毕竟CSS4都快普及了emmm)
var supportsDOM2CSS = document.implementation.hasFeature("CSS","2.0");
var suportsDOM2CSS2 = document.implementation.hasFeature("CSS2","2.0");
访问元素样式
任何支持style特性的元素,在JS中都有一个对应的style特性
该style属性是 CSSStyleDeclaration 的实例
但是该属性只包含通过style特性设置的样式信息(行内样式),但不包括外部样式表与层叠样式表引入的样式
至于JS中的style属性,一般来说只需要将其原本短横线的形式改写为驼峰命名即可在JS中对其进行访问
如下所示
background-image style.backgroundImage
color style.color
但是还有一些样式不能通过上面这样简单的转换来获取
比如 float 样式,由于 float 在CSS中属于保留字所以不能用作属性名
而在JS中设置、访问float则需要使用 cssFloat 在IE中则需要使用 styleFloat
有了DOM2对样式API的支持,我们只需要取得一个有效的DOM元素引用,就可以通过JS代码来设置元素的样式
在通过JS修改元素的外观时元素的外观会自动刷新
PS.如果没有为元素设置style特性,那么style对象中则会包含一些默认的值,但是这些默认值并不能准确地反映当前元素的准确信息
DOM样式属性和方法
DOM2为style对象提供了以下属性和方法:
cssText:可以访问到style特性(行内样式)中的CSS代码
length:应用给当前元素的CSS属性数量
parentRule:表示CSS信息的CSSRule对象
getPropertyValue(属性名):返回包含给定属性值的CSSValue对象
getPropertyPriority(属性名):若该属性使用了 !important 则返回 "important" 否则返回空字符串
getPropertyName(属性名):返回指定属性的字符串
item(下标):返回指定位置的CSS属性名称
removeProperty(属性名):从样式中删除给定属性
setProperty(属性名,属性值,优先级):设置属性,优先级传入”important“或空字符串
PS.以上属性中对CSSText的重写将会覆盖原来style特性的值
计算的样式
之前我们提到了,style对象的属性都只包含style特性的值,也就是行内样式
这样可以让我们JS代码对元素样式的修改以较高的优先级覆盖掉外部样式和嵌入样式的影响
但是这样为我们获取元素的样式带来了困难,所以DOM2增强了document.defaultView,新增了getComputedStyle方法用于获取元素的准确样式
getComputedStyle方法传入两个参数:1、要取得样式的元素 2、伪元素字符串(如":after",若不需要伪元素信息则可以传入null)
该方法返回一个 CSSStyleDeclaration对象
该对象包含当前元素所有计算后的样式,也就是呈现在页面上的样式信息
PS.虽然大多数浏览器都支持但是不同浏览器表示值的方式可能有所出入,所以在使用时需要注意
IE中不支持该方法,但是通过 currentStyle属性提供了相同功能的实现
最后要记住的是:不论在哪个浏览器中,计算后的样式都是只读的,不能对其进行修改来改变元素最终的样式呈现
Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式的更多相关文章
- Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历
遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...
- Javascript高级编程学习笔记(54)—— DOM2和DOM3(6)范围选择
范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以 ...
- Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小
在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...
- Javascript高级编程学习笔记(56)—— DOM2和DOM3(8)低版本IE范围
虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body ...
- Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围
操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少 ...
- Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表
操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...
- Javascript高级编程学习笔记(57)—— 事件(1)事件流
事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...
随机推荐
- CentOS7下开放端口
memcached等服务启动后,外网默认是无法访问的,因为防火墙不允许,所以要开启防火墙,让其可以访问这些端口号. 方法一:使用firewall 1.运行命令:firewall-cmd --get-a ...
- VC++安装及使用
1.在浏览器上下载后不能安装 2.黄振古QQ发原文件,依然不能安装 3.考虑后,想通过360压缩安装 4.浏览器上下载的360压缩大多有病毒,无奈下,删掉鲁大师,下载360安全卫士,通过360下载36 ...
- centos安装python3.7和yum报错解决方法
参考网址 https://www.cnblogs.com/simuhunluo/p/7704765.html https://www.cnblogs.com/linkxu1989/p/6955137. ...
- CentOS7 查看操作系统版本信息
CentOS 查看操作系统版本信息1.使用cat /proc/version .uname 查看内核版本 [root@CentOS7 ~]# cat /proc/version Linux versi ...
- MongoDB、PyMongo数据操作
MongoDB 命令 C:\Program Files\MongoDB\Server\4.0\bin mongo 客户端 mongod 服务端 mongoexport 导出 普通格式,每条记录一行,整 ...
- 关于Promise的记录和理解
在JavaScript中,所有的代码都是单线程执行的,这就导致了其所有的网络请求,IO操作,浏览器时间等都是异步非阻塞的模式执行的,这就使得代码的执行顺序可能会超出我们的掌控. 尤其是当多个异步操作待 ...
- python websocket 客户端连接
# -*- coding: utf-8 -*-import jsonimport websocketimport _thread as thread # try:# import thread# ex ...
- P2158 [SDOI2008] 仪仗队(欧拉函数模板)
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- docker_sd
docker exec --user jovyan -d jupyter nohup jupyter nbconvert --ExecutePreprocessor.timeout=-1 --Code ...
- vue生命周期-mounted和created的区别
详情请查看:https://blog.csdn.net/xdnloveme/article/details/78035065 自己做个总结: beforeCreate 创建之前:已经完成了 初始化事件 ...