JavaScript改变CSS样式的方法汇总


Posted in Javascript onMay 07, 2015

JavaScript允许你即时的改变CSS样式,这样就可以将用户的眼球吸引到你想他们关注的地方上,并且提供较好的交互体验给力 。

JavaScript修改CSS有4种方法:

修改节点style(内联样式);
改变节点class或id;
写入新的css;
替换页面中的样式表。

个人不建议使用后两种方法,几乎所有的功能都可以通过前两种方式实现,并且代码更加清晰、易理解。

后面还会说说如何获取元素的真实样式和一个表单中的注意事项。

1、修改节点style(内联样式)

这种方法权重是最高的,直接写在节点的style属性上,他会覆盖其他方法设置的样式。使用方法很简单:

var element = document.getElementById("test");
element.style.display = "none" //让元素隐藏

但是要注意的是,有些CSS样式名称是由几个单词组成的例如font-size、background-image等,他们都是用破折号(-)连接起来的,然而JavaScript中破折号表示“减”,因此不能作为属性名称。我们需要使用“驼峰格式(camelCase)”来书写属性名,例如fontSize、backgroundImage。

还要注意的是,很多style都是有单位的,不能只给一个数字。例如fontSize的单位有px、em、%(百分比)等。

这种方法违背了表现和行为分离的原则,一般只适合定义元素经常变化的即时样式(与行为相关),例如一个可用于拖拽的div,随着拖拽,他的top、left属性是不断变换的,此时就不能用class或其他方式定义了,使用这种方式可以即时修改样式,并且覆盖掉其他方式的设置。

2、更改class、id

id和class是设置样式的“钩子”,更改之后浏览器会自动更新元素的样式。

更改id的方法和class的类似,但是个人并不建议这样使用,因为id是用于定位元素的,最好不要用它来定义元素的显示样式,并且id也常作为JavaScript的钩子,可能会引起不必要的错误。
在JavaScript中,class是一个保留关键字,因此使用className作为访问元素class的属性,例如:

.redColor{
 color: red;
}
.yellowBack{
 background: yellow;
}
element.className = "redColor";//设置class
element.className += " yellowBack";//增加class

但比较郁闷的是,这个属性是一个包含元素所有class的字符串,所有class以空格分开,这样在删除class时就很不方便(增加就好说,之间做个字符串连接就可以了,不过记得前面要加个空格~)。

我之前在删除的时候用了正则表达式,根据class在字符串中的不同位置进行删除(头部、尾部、中间),不过后来想到了更好的办法,就是在className属性头尾都加上一个空格,那就全部变成中间的方法了,直接进行子串替换:

//删除class
function removeClass(element,classRomove){
var classNames = " "+element.className+" ";
classNames = classNames .replace(" "+classRomove+" ", " ");
//String.trim(classNames);
element.className = classNames;
}

一般的样式修改最好都用这种方法,定义好CSS的样式,JavaScript只是发出样式改变的指令,具体的样式定义还是交给CSS去做。

后两种方法,既不优雅,也有一定兼容性问题,我就不介绍了~

3、获取真实样式

首先要说清楚的是,通过element.style是不行的,他只能获取内联样式,样式表中的定义无法获取到。
既然元素的样式可以定义在这么多种地方,那他的真实样式到底是什么样子就不好说了,有什么办法能获取到元素在浏览器中显示的真实样式呢?
其实微软和W3C都提供了相应的方法,我们只需要进行一下封装就可以用了:

//获取元素样式
function getRealStyle(element,styleName){
var realStyle = null;
if(element.currentStyle){
realStyle = element.currentStyle[styleName];//IE
}else if(window.getComputedStyle){
realStyle=window.getComputedStyle(element,null)[styleName];//W3C
}
return realStyle;
}

记得传入的styleName是用“驼峰格式”的~~

4、表单的显示和隐藏(不要滥用CSS)

我们经常会见到一些表单的选项是动态添加的,例如你某个表单中选择了婚姻状态是“已婚”,那么就会多一个输入框让你输入配偶的姓名。

如果没有选择那当然就要把“配偶”的相关表单都隐藏了,但在这个时候不应当用CSS来解决,即不能用style.display=”none”来隐藏。

因为无论你隐还是不隐藏它,输入框就在那里,不增不减~ [晕] 直白点说,就是虽然隐藏了,但他还是存在与DOM中,如果此时用户提交表单,会把这个隐藏的输入框的内容一起提交,可能会出现些意想不到的错误~

正确的做法是将这段内容放入DOM超空间中,这样就不会有上面的问题了。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
Apr 20 Javascript
JS实现文字掉落效果的方法
May 06 Javascript
js前端面试题及答案整理(一)
Aug 26 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
谈谈target=_new和_blank的不同之处
Oct 25 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
js实现非常简单的焦点图切换特效实例
May 07 #Javascript
jQuery中closest和parents的区别分析
May 07 #Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 #Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 #Javascript
JavaScript更改字符串的大小写
May 07 #Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 #Javascript
JS基于面向对象实现的放烟花效果
May 07 #Javascript
You might like
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
解析jquery获取父窗口的元素
2013/06/26 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python群发邮件实例代码
2014/01/03 Python
推荐11个实用Python库
2015/01/23 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
创建Django项目图文实例详解
2019/06/06 Python
Python修改DBF文件指定列
2020/12/19 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
护士求职推荐信范文
2013/11/23 职场文书
初三政治教学反思
2014/01/30 职场文书
小学敬老月活动方案
2014/02/11 职场文书
廉洁自律承诺书
2014/03/27 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang