内联 Style 简写属性的发现

内联 Style 简写属性的发现

开始

平时在使用内联样式简写属性的时候,可能没有考虑到浏览器解析的问题。问题不大,简写的好处是代码量少,但最近发现了一个有意思的内联简写属性的问题。

以下问题仅在内联样式里会出现,如果是通过 style 标签或 css 文件引入则不会有这样的问题。

例子

background

设置一个元素的背景色为白色,比如这么写:

<div style="background: #fff;"></div>

你可能以为浏览器会这样输出:

<div style="background-color: #fff;"></div>

一下少了 6 个字节,而浏览器的真真实解析情况是:

潜在的问题是:将会默认设置一些其他的属性到样式里,而通过 CSS 又很难恢复这种默认属性

验证

我们来验证一下这个问题:

使用属性简写的浏览器呈现:

而非简写的呈现:

上面例子里的 HTML 代码:

<div style="background: #fff;"></div>

那么:

$0.style.backgroundImage === '' // => false

而如果例子修改为:

<div style="background-color: #fff;"></div>

那么:

$0.style.backgroundImage === '' // => true

font 验证

另外一个例子是 font 属性,也会有这个问题:

这个时候:

$0.style.fontWeight === ''  // => false

结果:

$0.style.fontWeight === ''  // => true

结论

能看到通过 style 获取元素属性时会返回非预期结果,所以使用 CSS 处理这类样式,最好是只设置你需要的属性,尽量不要简写,除非你明确知道这个操作的结果

时间: 2024-08-27 00:06:13

内联 Style 简写属性的发现的相关文章

XSS 前端防火墙—内联事件拦截

关于 XSS 怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路. 几乎每篇谈论 XSS 的文章,结尾多少都会提到如何防止,然而大多万变不离其宗.要转义什么,要过滤什么,不要忘了什么之类的.尽管都是众所周知的道理,但 XSS 漏洞十几年来几乎从未中断过,不乏一些大网站也时常爆出,小网站更是家常便饭. 预警系统 事实上,至今仍未有一劳永逸的解决方案,要避免它依旧使用最古老的土办法,逐个的过滤.然而人总有疏忽的时候,每当产品迭代更新时,难免会遗

CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border).内边距(Padding)和内容(Content),其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型,加上了doctype声明,让所有浏览器都会采用标准 w3c 盒子模型去解释你的盒子.当设置一个元素的样式如下: <!DOCTYPE html> <html> <

Silverlight:使用内联XAML

您应指定包含 XAML 的内联 HTML 内容区域,而不是使用由统一资源标识符 (URI) 引用的离散文件或包来设置初始 Silverlight 内容. 重要说明: 内联 XAML 是一个仅可用于 Silverlight 的 JavaScript API 的概念.内联 XAML 与 Silverlight 的托管 API 不兼容. 使用内联 XAML 由于它与浏览器 DOM 之间的关系,内联 XAML 构成了使用 JavaScript API 的深思熟虑的选择.如果没有托管项目文件(该文件在其根

Silverlight:使用内联 XAML

内联 XAML 是一个仅可用于 Silverlight 的 JavaScript API 的概念.内联 XAML 与 Silverlight 的托管 API 不兼容. 使用内联 XAML 由于它与浏览器 DOM 之间的关系,内联 XAML 构成了使用 JavaScript API 的深思熟虑的选择.如果没有托管项目文件(该文件在其根目录下指定 x:Class)所了解的离散 XAML 文件,则内联 XAML 解决方案无法了解如何连接代码隐藏和 XAML,并且没有特定的指令来编译和连接托管代码. 若

【经验总结】页面动态创建内联CSS样式

关于页面动态创建大段内联CSS样式,以及可能遇到的问题,已经有很多先烈们进行了总结,比如三生石兄的文章:怪异的IE - 2 ,这里不赘言,仅做备忘. 其实还有疑问:styleSheetNode.innerHTML = str 是否在除了IE之外的浏览器都支持 直接上demo以及代码: .red{color:red;} <p class="red green">这是我看过的最牛B的文字,点击下面的按钮就可以变绿!</p> <button onclick=&q

针对XSS漏洞的前端防火墙:内联事件拦截

关于XSS漏洞怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路.几乎每篇谈论 XSS 的文章,结尾 多少都会提到如何 防止,然而大多万变不离其宗.要转义什么,要过滤什么,不要忘了什么之类的.尽管都是众所周知的道理,但 XSS 漏洞十几年来几乎从未中断过,不乏一些大网站也时常爆出,小网站更是家常便饭.预警系统事实上,至今仍未有一劳永逸的解决方案,要避免它依旧使用最古老的土办法,逐个的过滤.然而人总有疏忽的时候,每当产品迭代更新时,难免会遗漏

元素的内联事件处理函数的特殊作用域在各浏览器中存在差异_javascript技巧

标准参考 无. 问题描述 在一个元素的属性中绑定事件,实际上就创建了一个内联事件处理函数(如<h1 onclick="alert(this);"...>...</h1>),内联事件处理函数有其特殊的作用域链,并且各浏览器的实现细节也有差异. 造成的影响 如果在元素的内联事件处理函数中使用的变量或调用的方法不当,将导致脚本运行出错. 受影响的浏览器 所有浏览器 问题分析 1. 内联事件处理函数的作用域链 与其他函数不同,内联事件处理函数的作用域链从头部开始依次是:

JavaScript中的style.display属性操作_javascript技巧

display版本:CSS1/CSS2    兼容性:IE4+   NS4+ 继承性:无   语法:      display   :   block   |   none   |   inline   |   compact   |   marker   |   inline-table   |   list-item   |   run-in   |   table   |table-caption   |   table-cell   |   table-column   |   tabl

定义内联元素span的最小高度问题

span这个标签,想必大家都熟悉吧,但有用起来又很麻烦,尤其是需要给它定义宽度和高度的时候   制作html网页经常会使用到span这个标签,但有些朋友对这个标签很多朋友用不好,似乎觉得它又很好用,但有用起来又很麻烦,尤其是需要给它定义宽度和高度的时候.曾经有朋友问:为什么给用css给span定义高度和宽度后,它的宽度和高度仍然没有变化,好像失效了一样? 其实这个问题很简单--先要认清span的属性,因为span属于内联元素,而内联元素是忽略宽度和高度的,明白了这一点解决就很简单了,解决的办法就