样式

在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)样式的更多相关文章

  1. Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

    DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...

  2. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  3. Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历

    遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...

  4. Javascript高级编程学习笔记(54)—— DOM2和DOM3(6)范围选择

    范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以 ...

  5. Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小

    在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...

  6. Javascript高级编程学习笔记(56)—— DOM2和DOM3(8)低版本IE范围

    虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body ...

  7. Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围

    操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少 ...

  8. Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表

    操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...

  9. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

随机推荐

  1. selenium启动谷歌浏览器

    谷歌浏览器可以是任意版本. 根据谷歌浏览器的版本,下载响应的浏览器驱动(百度:谷歌驱动与谷歌浏览器版本映射表). 我用的是win7 ,下载win32就行了.下载解压之后可以放在python的安装目录下 ...

  2. php实现仿百度分页

    本文主要和大家分享php实现仿百度分页的实例,先来看一下效果图. 基本策略 1, 首先要查询总记录数 2, 设置每页显示的数量并计算总页数 3, 增加一个get传值num代表当前访问的是哪一页,如果没 ...

  3. n的m划分 整数拆分问题

    n的m划分 将n划分成若干个不超过m的数(正整数)的和,问有几种划分情况. 现在根据n和m的关系,考虑下面几种情况: 当n=1时,不论m的值为多少,只有一种划分,即{1}: 当m=1时,不论n的值为多 ...

  4. 摹客iDoc的PS插件全新改版!—— 智能检测不对应的设计稿

    一.简洁美观——iDoc的PS插件全新界面 iDoc对PS插件的界面进行了全新设计,无论是登录.上传.还是设置界面,都变得更精致.简洁美观,功能分布也非常明确,是一款轻巧且实用的小插件. 二.同步上传 ...

  5. Python 的经典设计格言,格言来源于 Python 但不限于 Python

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

  6. composer require aliyuncs/oss-sdk-php

    composer require aliyuncs/oss-sdk-php composer install require_once __DIR__ . '/vendor/autoload.php' ...

  7. C#读取word内容实践

    C#读取word文档是如何实现的呢?我们可以使用FileStream对象来把文本文件里面的信息读取出来,但是对于word文档来说就不能使用这样的方法了. 这种情况下C#读取word文档的实现我们需要使 ...

  8. mysql5.7高版本加载低版本sql文件,时间不能为0000-00-00格式错误

    错误代码:ERROR 1067 (42000): Invalid default value for 解决方式 1. show session variables like '%sql_mode%'; ...

  9. uni-app 顶部导航点击更换图标

    更换顶部导航的iconfont.ttf图标,先在配置文件配置好按钮: pages.json文件 "buttons": [ { "text": "\ue ...

  10. html/css 表格元素以及表格布局

    一,html之表格 1,一个完整的html表格所包含的元素 <!--一个完整的html表格--> <!--cellpadding代表单元格内的文字和单元格边框之间的间距--> ...