深入理解脚本化CSS系列第一篇——脚本化行内样式
前面的话
脚本化CSS,通俗点说,就是使用javascript来操作CSS。引入CSS有3种方式:外部样式,内部样式和行间样式。本文将主要介绍脚本化行间样式
基本用法
<div style="height: 40px;width: 40px;background-color: blue;"></div>
element元素节点提供style属性,用来操作CSS行间样式,style属性指向cssStyleDeclaration对象
[注意]IE7-浏览器不支持cssStyleDeclaration对象
<div id="test" style="height: 40px;width: 40px;background-color: blue;"></div>
<script>
//IE7-浏览器返回报错,其他浏览器返回true
console.log(test.style instanceof CSSStyleDeclaration);
</script>
style属性用来读写页面元素的行内CSS样式
如果读取没有设置过的行间样式将返回空字符串''
如果设置的行间样式不符合预定格式,并不会报错,而是静默失败
[注意]IE8-浏览器支持给属性设置值时不带单位
<div id="test" style="height: 40px;width: 40px;background-color: blue;"></div>
<script>
console.log(test.style.height);//'40px'
test.style.height = '30px';
console.log(test.style.height);//'30px' test.style.height = '20';
//IE8-浏览器返回'20px',因为IE8-浏览器支持给属性设置值时不带单位;而其他浏览器仍然返回'30px'
console.log(test.style.height); console.log(test.style.position);//''
</script>
如果一个CSS属性名包含一个或多个连字符,CSSStyleDeclaration属性名的格式应该是移除连字符,将每个连字符后面紧接着的字母大写
<div id="test" style="height: 40px;width: 40px;background-color: blue;"></div>
<script>
console.log(test.style.backgroundColor);//'blue'
</script>
float
理论上,有一个不能直接转换的CSS属性是float。因为,float是javascript中的保留字,不能用作属性名
但实际上,经过测试,直接使用float在各个浏览器中都有效
<div id="test" style="float:left"></div>
<script>
console.log(test.style.float);//'left'
</script>
作为推荐,要访问float属性,应该使用cssFloat
[注意]IE8-浏览器不支持cssFloat,但IE浏览器支持styleFloat
<div id="test" style="float:left"></div>
<script>
//IE8-浏览器返回undefined,其他浏览器返回'left'
console.log(test.style.cssFloat);//'left'
//IE浏览器返回'left',其他浏览器返回undefined
console.log(test.style.styleFloat);
</script>
特性操作
其实,如果操作行间样式,可以使用元素节点的特性操作方法hasAttribute()、getAttribute()、setAttribute()、removeAttribute()等,来操作style属性
<div id="test" style="height: 40px;width: 40px;"></div>
<script>
console.log(test.hasAttribute('style'));//true
console.log(test.getAttribute('style'));//'height: 40px;width: 40px;' test.setAttribute('style','height:10px;');
console.log(test.getAttribute('style'));//'height:10px;' test.removeAttribute('style');
console.log(test.hasAttribute('style'));//false
console.log(test.getAttribute('style'));//null
</script>
属性
cssText
通过cssText属性能够访问到style特性中的CSS代码。在读模式下,cssText返回浏览器对style特性中CSS代码的内部表示;在写模式中,赋给cssText的值会重写整个style特性的值
设置cssText是为元素应用多项变化最快捷的方法,因为可以一次性应用所有变化
[注意]IE8-浏览器返回的属性名是全大写的
<div id="test" style="height: 40px;width: 40px;"></div>
<script>
//IE8-浏览器返回'HEIGHT: 40px; WIDTH: 40px;',其他浏览器返回'height: 40px; width: 40px;'
console.log(test.style.cssText);
test.style.cssText= 'height:20px';
//IE8-浏览器返回'HEIGHT: 20px;',其他浏览器返回'height: 20px;'
console.log(test.style.cssText);
</script>
length
length属性返回内联样式中的样式个数
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px;width: 40px;"></div>
<script>
console.log(test.style.length);//2
</script>
parentRule
parentRule属性表示CSS信息的CSSRule对象
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px;width: 40px;"></div>
<script>
//IE8-浏览器返回undefined,其他浏览器返回null
console.log(test.style.parentRule);
</script>
方法
item()
item()方法返回给定位置的CSS属性的名称,也可以使用方括号语法
[注意]IE8-浏览器不支持item()方法,只支持方括号语法
<div id="test" style="height: 40px;width: 40px;background-color: pink;"></div>
<script>
//IE9+浏览器返回'width',IE8-浏览器报错,其他浏览器返回'height'
console.log(test.style.item(0));
//IE9+浏览器返回'width',IE8-浏览器返回'WIDTH',其他浏览器返回'height'
console.log(test.style[0])
</script>
由上面代码可知,IE浏览器返回值与其他浏览器有差异
getPropertyValue()
getPropertyValue()方法返回给定属性的字符串值
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px;width: 40px;background-color: pink;"></div>
<script>
//IE8-浏览器报错,其他浏览器返回'pink'
console.log(test.style.getPropertyValue('background-color'));
console.log(test.style.backgroundColor);//'pink'
console.log(test.style['background-color']);//'pink'
console.log(test.style['backgroundColor']);//'pink'
</script>
getPropertyCSSValue()
getPropertyCSSValue()方法返回包含两个属性的CSSRule类型,这两个属性分别是cssText和cssValueType。其中cssText属性的值与getPropertyValue()返回的值相同,而cssValueType属性则是一个数值常量,表示值的类型:0表示继承的值,1表示基本的值,2表示值列表,3表示自定义的值
[注意]该方法只有safari支持
<div id="test" style="height: 40px;width: 40px;background-color: pink;"></div>
<script>
//cssText:"rgb(255, 192, 203)" cssValueType: 1 primitiveType: 25
console.log(test.style.getPropertyCSSValue('background-color'));
console.log(test.style.getPropertyCSSValue('background'));//null
</script>
getPropertyPriority()
如果给定的属性使用了!important设置,则返回"important";否则返回空字符串
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px!important;width: 40px;background-color: pink;"></div>
<script>
console.log(test.style.getPropertyPriority('height'));//'important'
console.log(test.style.getPropertyPriority('width'));//''
</script>
setProperty()
setProperty(propertyName,value,priority)方法将给定属性设置为相应的值,并加上优先级标志("important"或一个空字符串),该方法无返回值
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px;width: 40px;background-color: pink;"></div>
<script>
console.log(test.style.height);//'40px'
test.style.setProperty('height','20px','important');
console.log(test.style.height);//'20px'
test.style.setProperty('height','30px');
//safari浏览器返回'20px',设置过!important后,再设置非important的属性值则无效
//其他浏览器返回'30px'
console.log(test.style.height);
</script>
removeProperty()
removeProperty()方法从样式中删除给定属性,并返回被删除属性的属性值
[注意]IE8-浏览器不支持
<div id="test" style="height: 40px;width: 40px;background-color: pink;"></div>
<script>
console.log(test.style.height);//'40px'
console.log(test.style.removeProperty('height'));//'40px'
console.log(test.style.height);//'' console.log(test.style.width);//'40px'
test.style.width = '';
console.log(test.style.width);//''
</script>
模块侦测
CSS的规格发展太快,新的模块层出不穷。不同浏览器的不同版本,对CSS模块的支持情况都不一样。有时候,需要知道当前浏览器是否支持某个模块,这就叫做“CSS模块的侦测”
一个比较普遍适用的方法是,判断某个DOM元素的style对象的某个属性值是否为字符串。如果该CSS属性确实存在,会返回一个字符串。即使该属性实际上并未设置,也会返回一个空字符串。如果该属性不存在,则会返回undefined
<div id="test"></div>
<script>
//IE9-浏览器和safari返回undefined,其他浏览器都返回'',所以IE9-浏览器和safari不支持animation
console.log(test.style.animation)
//IE和firefox浏览器返回undefined,chrome和safari浏览器都返回'',所以IE和firefox浏览器不支持WebkitAnimation
console.log(test.style.WebkitAnimation)
</script>
CSS.supports()
CSS.supports()方法返回一个布尔值,表示是否支持某条CSS规则
[注意]safari和IE浏览器不支持
<script>
//chrome和firefox浏览器返回true,其他浏览器报错
console.log(CSS.supports('transition','1s'));
</script>
深入理解脚本化CSS系列第一篇——脚本化行内样式的更多相关文章
- css的三种使用方式:行内样式,内嵌样式,外部引用样式
三中的使用方法的简单实例如下: 行内样式: <!doctype html> <html> <head> <meta charset="UTF-8&q ...
- HTML+CSS教程(四)选择器(id选择器,类选择器,标签选择器,子代选择器,后代选择器,组选择器,伪类选择器)/css引入页面的形式(行内样式、内嵌样式、外联样式)
一.回顾内容 前端的三大组成(三大模块) HTMl(超文本标记语言) 结构层 css(层叠样式表) 表现层:用来美化HTML结构 JS(Java script)(脚本语言) 行为层: ...
- 深入理解脚本化CSS系列第二篇——查询计算样式
× 目录 [1]getComputedStyle [2]注意事项 [3]currentStyle[4]IE 前面的话 元素的渲染结果是多个CSS样式博弈后的最终结果,这也是CSS中的C(cascade ...
- 深入理解DOM事件机制系列第一篇——事件流
× 目录 [1]历史 [2]事件冒泡 [3]事件捕获[4]事件流 前面的话 javascript操作CSS称为脚本化CSS,而javascript与HTML的交互是通过事件实现的.事件就是文档或浏览器 ...
- 深入理解javascript选择器API系列第一篇——4种元素选择器
× 目录 [1]id属性 [2]标签名 [3]name属性[4]all 前面的话 说到最常见的DOM应用,恐怕就要数取得特定的某个或某组元素的引用了.DOM定义了许多方式来选取元素,包括getElem ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- 深入理解DOM事件类型系列第一篇——鼠标事件
× 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...
- 深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法
× 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息 ...
- 深入理解javascript函数系列第一篇——函数概述
× 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...
随机推荐
- [8.2] Robot in a Grid
Imagine a robot sitting on the upper left corner of grid with r rows and c columns. The robot can on ...
- Angular 单元格合并
在Angular实现表格输出的话,使用ng-repeat输出信息, 使用了: ng-repeat-start ng-repeat-end ng-hide="$first" < ...
- Android面试技巧 找安卓开发工作同学可以看看!
马上就要学完安卓毕业了,最近总想写点什么.今天把自己这段时间的学习心得以及面试时的经验分享给大家: 关于我为什么选择学习安卓并且来华清远见学习,说来话长,但是我要长话短说!首先我以前的实习工作工资太低 ...
- C# 完整List例子
C# List Following examples show how to create and manipulate with .NET strongly typed list List<T ...
- ceil 模块
# 有时需要得到一个最小的整数,而这个数只能比自己大或相等,不能小于自己 #如: 2.1 我们需要得到的最小整数为3,即使后一位只有很小的一部分,一般用于分页 from math import cei ...
- oracle触发器和存储过程的格式
最近接到一个任务要根据一个表来转移另一个表的数据到第三个表.想了想,用决定用触发器+存储过程的方式来做.有些时间没有写存储过程和触发器了,查了一下资料,确定了oracle的触发器和存储过程的格式. 触 ...
- *HDU1848 博弈
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 谁说JavaScript容易?
你尝试过给一组数字排序吗? Javascript的sort()方法默认用来给数字排序 所以[1,2,5,10].sort()将会输出[1, 10, 2, 5]. 要正确的对数组进行排序的话,你可以使用 ...
- C\C++中声明与定义的区别
声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...
- shell去除换行和空格2
#!/bin/bash if [ -f str.txt ] ## 如果str.txt存在,则返回true then strval=$(cat str.txt|awk '{printf "%s ...