前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单说 background-color 与 backgroundColor的区别

简单说 background-color 与 backgroundColor的区别

作者头像
FEWY
发布2019-05-26 16:30:57
9250
发布2019-05-26 16:30:57
举报
文章被收录于专栏:FEWYFEWY

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/FE_dev/article/details/77899286

说明

我们先来看看出了什么问题。

<!doctype html>
<html lang="zh">
 <head>
     <meta charset="utf-8">
 </head>

 <body style="background-color:red;">
 </body>

 <script>
    var a = document.querySelector('body');

    var CamelCase = a.style.backgroundColor;
    console.log('驼峰命名结果:'+CamelCase);

    var CSSProperty = a.style['background-color'];
    console.log('CSS语法结果:'+CSSProperty);
 </script>
</html>

结果图:

这里写图片描述
这里写图片描述

可能你还没觉得那里奇怪,我们再来看看 a.style 是什么,

这里写图片描述
这里写图片描述

上面的截图是一部分,没有全部截出来,因为实在太长了,主要是想说,在a.style 这个对象中并没有看见 background-color 这样的属性呀! 为什么 a.style['background-color'] 居然也能获取到值,这是很奇怪的事。

解释

经过各种查资料,终于算是明白了,这主要是因为 CSSStyleDeclaration 做了 接口扩展,让 IDL属性 能够获取和设置 浏览器支持的 CSS属性。

CSSStyleDeclaration

这里写图片描述
这里写图片描述

CSSStyleDeclaration 表示一个CSS属性键值对的集合。它被用于一些API中:

  • HTMLElement.style - 用于操作单个元素的样式(<elem style="...">);
  • CSSStyleRule接口的style属性
  • window.getComputedStyle()的返回结果

IDL

接口描述语言(Interface description language,缩写IDL),是CORBA规范的一部分,是跨平台开发的基础。 IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成。

CSSOM 中这样写到

For example if the user agent supports the -webkit-transform property, there would be a webkitTransform IDL attribute. There would also be a WebkitTransform IDL attribute because of the rules for camel-cased attributes.

例如 如果用户代理支持-webkit-transform 属性,因为驼峰命名的规则 会有webkitTransform IDL属性。也会有一个WebkitTransform IDL属性

说到这里大家应该明白点了。 我们最开始 a.style,a的style属性的值是一个对象。 这个对象所包含的属性与CSS规则一一对应,但是名字需要用驼峰命名的方式进行改变,比如background-color写成backgroundColor。改写的规则是将横杠从CSS属性名中去除,然后将横杠后的第一个字母大写。如果CSS属性名是JavaScript保留字,则规则名之前需要加上字符串css,比如float写成cssFloat,而改写后的 backgroundColor 就是 IDL属性。

注意: “-” 在JS 中 是 减法的意思,变量名中是不能用“-”的

总结

说了这么多概念,我们简单理解就是, 像backgroundColor 与 background-color 这样的属性,他们的属性值是一样的,改变两个中任何一个属性的值,另一个属性的值也会随之改变,但是JS中变量不能用“-”,所以可以通过每个CSS属性 对应的 IDL属性,来获取和设置 CSS属性,所以JS 有background-color 这样的属性,只是不能这样显示出来,但是我们最开始的写成 a.style['background-color'],这样就不受“-”的影响了,所以也能获取到属性值。

参考链接 IDL https://baike.so.com/doc/1062718-1124261.html

CSS操作 http://javascript.ruanyifeng.com/dom/css.html

CSSOM https://www.w3.org/TR/cssom-1/#the-cssstyledeclaration-interface

CSSStyleDeclaration https://developer.mozilla.org/zh-CN/docs/Web/API/CSSStyleDeclaration

what’s the difference background-color and backgroundColor? https://stackoverflow.com/questions/41602583/whats-the-difference-background-color-and-backgroundcolor

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 解释
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档