JS如何设置元素样式的方法示例


Posted in Javascript onAugust 28, 2017

一看到这个标题,大家可能首先想到的就是使用“[元素].style.[CSS属性名] = [属性值]”这样的套路去设置元素样式,但实际上,我们其实还有其他方式可以选择。

接下来,我将详细介绍三种设置元素样式的方式。

一、style

这个其实就是我们所熟知的方式,举个例子~~

<div id="box"></div>
var box = document.getElementById("box");
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = "#f00";

显示效果:

JS如何设置元素样式的方法示例

这种方式看似简单粗暴,但写法过于繁冗,尤其是在需要添加很多样式时尤为突出。并且需要注意的是,对于使用短划线的CSS属性名,必须将其转换成驼峰大小写形式。(如示例中的backgroundColor)

二、style.cssText

这种方式相对于上面方法更为简洁,更像是直接在元素上写CSS:

[元素].style.cssText = [CSS样式];

例如:

box.style.cssText = 'width: 200px; height: 200px; border: 1px solid #f00;';

确实,写法上很方便。

但是,缺点是后面同样通过这种方式添加的样式会覆盖之前通过style特性指定的样式。

同样还是上面的例子,只不过是将两段JS写在一块:

var box = document.getElementById("box");
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = "#f00";
box.style.cssText = 'width: 200px; height: 200px; border: 1px solid #f00;';

如果按照层叠样式表的特性,上面定义的红色的背景颜色应该还存在,然而实际上,下面通过style.cssText方式定义的样式会将style(包括style.cssText)方式添加的样式全部重写。所以,这个例子最终表现结果与上面只有一句时的效果是一样的:

JS如何设置元素样式的方法示例

最后注意下兼容性,IE8及更早版本均不支持cssText。

三、insertRule()

这个用法相对上面两种方法都较为复杂一些:

[sheet].insertRule([CSS样式],指定位置)

[sheet]表示某个样式表,它可以通过document.styleSheets来获得。那么,document.styleSheets又是什么呢? 说得简单一点就是应用在文档中的所有样式表,包括通过link标签引入的样式和style标签定义的样式。如果理解上还是有点困难,那么我们还是放个实例吧~~

首先头部引入样式表:

<link rel="stylesheet" type="text/css" href="css/index.css" rel="external nofollow" />

当然,这个样式表得真实存在,就算里面什么样式都不写也没关系。也可以直接用style标签,内容为空也不要紧。

然后用JS获取这个样式表:

var sheet = document.styleSheets[0];

最后我们就可以给这个样式表中添加样式了:

sheet.insertRule('#box{width: 300px; height: 300px; background-color: #0f0;}',0);

如果是在上面所有例子的基础上添加的这段代码,那么显示结果会是这样的:

JS如何设置元素样式的方法示例

大小还是200*200大小,背景颜色是绿色,说明通过style.cssText所设置的宽高样式把通过insertRule()设置的样式覆盖了,原因很简单,style(包括style.cssText)方式设置的样式属于行内样式,自然要比通过insertRule()设置的样式优先级更高咯~~

那么,示例当中insertRule()的第二个参数0又是指的什么呢?

它指的是我们需要添加CSS代码的位置,所以参数0就代表的是该样式表的最开始位置。

例如,我们先给样式表中手动添加一段样式(以下例子与上述例子无关):

<style>
  #box{ width: 100px; height: 100px;}
</style>
var sheet = document.styleSheets[0];
sheet.insertRule('#box{width: 300px; height: 300px; background-color: #0f0;}',0);

以上执行结果就是,宽高100*100的绿色盒子:

JS如何设置元素样式的方法示例

如果将insertRule()中的第二个参数改为1,那么通过JS添加的这段CSS代码相当于添加到了#box{ width: 100px; height: 100px;}的后面,类似下面这样:

<style>
  #box{ width: 100px; height: 100px;}
  #box{ width: 300px; height: 300px; background-color: #0f0;}
</style>

显示结果:

JS如何设置元素样式的方法示例

同样需要注意的是,insertRule()不兼容IE8及更早版本,但可以使用addRule()替代,语法稍微有点不同,上面例子这样写:

sheet.addRule('#box','width: 300px; height: 300px; background-color: #0f0;',0);

第一个参数代表元素,第二个参数代表CSS样式,第三个参数代表插入位置,前两个参数必选,最后一个可选,不填则默认为0。

结束语:浏览器兼容性问题对于前端开发者来说一直是个很头疼的问题,很多问题也是主要集中在IE上,只希望可恶的IE早日退出历史舞台吧!希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中各种编码解码函数的区别和注意事项
Aug 19 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
node.js中的fs.unlinkSync方法使用说明
Dec 15 Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
JavaScript第一篇之实现按钮全选、功能
Aug 21 Javascript
基于构造函数的五种继承方法小结
Jul 27 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
vue单个组件实现无限层级多选菜单功能
Apr 10 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
微信小程序上传文件到阿里OSS教程
May 20 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
weex slider实现滑动底部导航功能
Aug 28 #Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 #Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 #Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
Aug 28 #Javascript
JS实现图片手风琴效果
Apr 17 #Javascript
vue服务端渲染的实例代码
Aug 28 #Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 #jQuery
You might like
使用无限生命期Session的方法
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
php中的依赖注入实例详解
2019/08/14 PHP
AngularJS教程之环境设置
2016/08/16 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Python实现控制台进度条功能
2016/01/04 Python
python自动翻译实现方法
2016/05/28 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
Python如何操作docker redis过程解析
2020/08/10 Python
python切割图片的示例
2020/11/12 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
优秀员工表扬信
2014/01/17 职场文书
黄河象教学反思
2014/02/10 职场文书
班主任对学生的评语
2014/04/26 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
英语教师个人工作总结
2015/02/09 职场文书
结婚老公保证书
2015/02/26 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL