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 相关文章推荐
jQuery Clone Bug解决代码
Dec 22 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
Jan 13 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
js键盘上下左右键怎么触发function(实例讲解)
Dec 14 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
基于jQuery实现仿淘宝套餐选择插件
Mar 04 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
vue项目打包后打开页面空白解决办法
Jun 29 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+Html+缓存
2006/11/25 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
商务英语应届生自我鉴定
2013/12/08 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
医院实习介绍信
2014/01/12 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2015年读书月活动总结
2015/03/26 职场文书
行政复议答复书
2015/07/01 职场文书