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 相关文章推荐
js实现特定位取反原理及示例
Jun 30 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
Jan 16 Javascript
JS脚本加载后执行相应回调函数的操作方法
Feb 28 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
JavaScript中继承原理与用法实例入门
May 09 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
Aug 10 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP 动态随机生成验证码类代码
2010/04/09 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php多进程应用场景实例详解
2019/07/22 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
Python实现端口检测的方法
2018/07/24 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python使用re模块验证危险字符
2020/05/21 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
python字典按照value排序方法
2020/12/28 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
行政总经理岗位职责
2013/12/05 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
职工宿舍管理制度
2015/08/05 职场文书
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
关于的python五子棋的算法
2022/05/02 Python