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 QueryString解析类代码
Jan 17 Javascript
javascript实现动态侧边栏代码
Feb 19 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
js读取csv文件并使用json显示出来
Jan 09 Javascript
jQuery选择器源码解读(八):addCombinator函数
Mar 31 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
详解React 在服务端渲染的实现
Nov 16 Javascript
vuejs实现折叠面板展开收缩动画效果
Sep 06 Javascript
JS实现4位随机验证码
Oct 19 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
php格式化电话号码的方法
2015/04/24 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
python笔记:mysql、redis操作方法
2017/06/28 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
详解Python用户登录接口的方法
2019/04/17 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
租赁意向书范本
2014/04/01 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
应届生求职信
2014/05/31 职场文书
银行金融服务方案
2014/06/11 职场文书
继承权公证书范本
2015/01/23 职场文书
爱晚亭导游词
2015/02/09 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
基于redis+lua进行限流的方法
2022/07/23 Redis