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 相关文章推荐
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
基于JavaScript实现类似于百度学术高级检索功能
Mar 02 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
深入理解javascript中的 “this”
Jan 17 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
vue中使用protobuf的过程记录
Oct 26 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
js如何验证密码强度
Mar 18 Javascript
vue项目中自定义video视频控制条的实现代码
Apr 26 Javascript
关于React Native使用axios进行网络请求的方法
Aug 02 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
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
javascript 回调函数详解
2014/11/11 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
跟老齐学Python之重回函数
2014/10/10 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Django之PopUp的具体实现方法
2019/08/31 Python
如何在Python对Excel进行读取
2020/06/04 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
四查四看剖析材料
2014/02/14 职场文书
社会调查研究计划书
2014/05/01 职场文书
广告宣传策划方案
2014/05/21 职场文书
岗位说明书怎么写
2014/07/30 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
校友回访母校寄语
2015/02/26 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang