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 相关文章推荐
jQuery实现图片左右滚动特效
Apr 20 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
Oct 26 Javascript
移动开发之自适应手机屏幕宽度
Nov 23 Javascript
关于Vue.js一些问题和思考学习笔记(1)
Dec 02 Javascript
express框架实现基于Websocket建立的简易聊天室
Aug 10 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
深入理解JS异步编程-Promise
Jun 03 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
vue自定义switch开关组件,实现样式可自行更改
Nov 01 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
Nov 05 Javascript
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实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php简单实现数组分页的方法
2016/04/30 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
js实现文字滚动效果
2016/03/03 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
基于Python对数据shape的常见操作详解
2018/12/25 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
运动会邀请函范文
2014/01/31 职场文书
高中同学会活动方案
2014/08/14 职场文书
德育标兵事迹材料
2014/08/24 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
工程合作意向书范本
2015/05/09 职场文书
高中英语教学反思范文
2016/03/02 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL