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利用初始化数据装配模版的实现代码
Nov 17 Javascript
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
Feb 25 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
JS图片预加载三种实现方法解析
May 08 Javascript
JavaScript实现点击出现子菜单效果
Feb 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
php开发环境配置记录
2011/01/14 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
Javascript alert消息换行的方法
2013/08/07 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python 常用的基础函数
2018/07/10 Python
python 获取url中的参数列表实例
2018/12/18 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
python访问hdfs的操作
2020/06/06 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
传播学专业毕业生自荐信
2013/11/04 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
促销活动总结模板
2014/07/01 职场文书
初中军训感言
2015/08/01 职场文书
高中运动会广播稿
2015/08/19 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
python munch库的使用解析
2021/05/25 Python
MongoDB数据库之添删改查
2022/04/26 MongoDB
HttpClient实现文件上传功能
2022/08/14 Java/Android