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 26 Javascript
基于jquery的划词搜索实现(备忘)
Sep 14 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
jquery对象访问是什么及使用方法介绍
May 03 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
深入探究node之Transform
Jul 20 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
vue单文件组件无法获取$refs的问题
Jun 24 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
js中new一个对象的过程
2017/02/20 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
村委会贫困证明
2014/01/14 职场文书
工作表现评语
2014/01/19 职场文书
采购主管岗位职责
2014/02/01 职场文书
安全月宣传标语
2014/10/07 职场文书
党员三严三实心得体会
2014/10/13 职场文书
介绍信范文大全
2015/05/07 职场文书
高一英语教学反思
2016/03/03 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL