样式
在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的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...
随机推荐
-
session生命周期(一)
Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Session在用户访问第一次访问服务器时创建,需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问 ...
-
(四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
-
不输入密码ssh直接登录阿里云Linux主机
服务器环境:阿里云云服务器,Linux版本 - CentOS 客户端环境:Mac OSX Terminal 注意: 如果有3个账号都要无密码登录, 则3个账号都要这么操作 在Terminal中用ssh ...
-
【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
-
信息摘要算法之三:SHA256算法分析与实现
前面一篇中我们分析了SHA的原理,并且以SHA1为例实现了相关的算法,在这一片中我们将进一步分析SHA2并实现之. 1.SHA简述 前面的篇章中我们已经说明过,SHA实际包括有一系列算法,分别是SHA ...
-
mysql-笔记--增删改查
查看数据库:可以使用 show databases; 命令查看已经创建了哪些数据库 指定数据库:在登录后使用 use 语句指定, 命令: use 数据库名;要对一个数据库进行操作, 必须先选择该数据库 ...
-
基于 Python 和 Pandas 的数据分析(6) --- Joining and Merging
这一节我们将看一下如何通过 join 和 merge 来合并 dataframe. import pandas as pd df1 = pd.DataFrame({'HPI':[80,85,88,85 ...
-
iOS 提交应用过程出现的错误及#解决方案#images can't contain alpha channels or transparencies
本文永久地址为http://www.cnblogs.com/ChenYilong/p/3977542.html ,转载请注明出处. 当你试图通过<预览>"导出&qu ...
-
NET-知识点:C#中Equals和==比较
第一.相等性比较 其实这个问题的的本质就是C#的相等比较,相等比较可以分两类: 1.引用相等性,引用相等性指两个对象引用均引用同一基础对象. 2.值相等性,值相等性指两个对象包含相同的一个或多个值,其 ...
-
Linux进入-adsdfsd目录
Linux进入-adsdfsd目录 如果某个目录名称是短线(短横线)开头的 要想在命令行中进入目录,使用如下命令: cd -- -adsdfsd 延伸: 其他非寻常操作: http://www.cnb ...