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下IE与FF兼容函数收集
Sep 17 Javascript
JavaScript经典效果集锦
Jul 06 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
原生js实现轮播图
Feb 27 Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 Javascript
VUE中使用Vue-resource完成交互
Jul 21 Javascript
JS开发中基本数据类型具体有哪几种
Oct 19 Javascript
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 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 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php自动加载代码实例详解
2021/02/26 PHP
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Python学习笔记之装饰器
2020/08/06 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
学生励志演讲稿
2014/01/06 职场文书
文科生自我鉴定
2014/02/15 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
Golang入门之计时器
2022/05/04 Golang