2

我注意到,SmartMS 中使用的样式属性名称与 css 文件中使用的格式不同。

例如:
在 CSS 中:

line-height, text-overflow, white-space

在 SmartMS 中,样式属性没有“-”符号,因此是 CamelCase:

lineHeight, textOverflow, whiteSpace

为什么会有这些差异?

4

3 回答 3

3

在 css 文件中使用小写格式(例如 line-height)。这种格式是所有浏览器的标准。

CamelCase 格式(例如lineHeight)用于浏览器内部的javascript 对象。这种格式也是所有浏览器的标准。但有些浏览器也支持小写格式。

要跨浏览器兼容,请始终在 javascript 对象上使用 CamelCase 格式!

于 2014-07-29T08:21:00.730 回答
1

另一种方法是使用CSSStyleDeclaration 接口,因为它允许使用 CSS 属性名称(小写字母和连字符)。这也可以用于查询 CSS 属性名称是否存在(通过解析所有可用属性的项目)。此外,它可用于指定某个优先级或访问父级。

由于它是DOM Level 2 样式规范(于 2000 年发布)的一部分,它甚至应该与大多数浏览器兼容。

我看到使用它的唯一问题是 getPropertyValue 应该返回一个 DOMString (在 SMS 中转换为字符串),但浏览器过去常常在未设置时返回 null (而不是空字符串),这宁愿转换为变体(在 SMS 中)。必须正确处理此异常。

于 2014-09-17T00:48:55.837 回答
0

在当前的 RTL 和框架中,有几个对早期版本的回溯,其中编译器对访问 JS 对象和类型的支持不如现在的编译器那样好。

因此,这些罕见的 CSS 杂散案例,除非它们必须存在,否则将在下一次更新中消失。

在下一次更新中,尽可能多的 RTL 和框架使用浏览器驱动程序来处理样式名称的前缀和后缀。这可确保无论您在何种浏览器上运行,SMS 都能正确运行。

话虽如此,正如克里斯蒂安所解释的那样,访问一种风格的不同方式的原因是由于不同的规范。在 RTL 中,我们很少有意识的选择,只是习惯和最适合某种情况的选择。始终首先关注稳定性,然后再进行重构以提高速度。

为简单起见,有两种方法可以访问 css 样式:

  1. 作为样式集合的属性
  2. 作为直接的 JS 对象属性

前任:

// reference as a property
Self.Handle.style["-webkit-font-family"] := "sans serif";

// reference as an attribute
Self.Handle.style.fontFamily := "sans serif";

两者的结果相同,但以不同的方式处理样式。

第一个实际上是最慢的,因为它在分配值之前执行样式名称的查找。

第二个直接处理值,作为样式对象的公开属性,因此骆驼大小写规则生效。

你提到他们不能在 Firefox 中工作,嗯,这很令人难过。我们一定是错过了那个地方,所以请给我们单位名称和行号,我去看看。

“browser-style-name”格式必须以正确的浏览器为前缀,因此对于 webkit 浏览器,它是“-webkit”,而 firefox 使用“-moz”。在 javascript 中为所有浏览器设置相同的属性是很常见的,但如前所述——我们在 BrowserAPI() 中有一些函数以正确的名称作为前缀。

所以这正在被处理。

于 2016-05-30T22:59:35.540 回答