CSS 中星号前缀属性有什么作用?


在 Web 开发中,CSS(层叠样式表)使开发者能够确定网站的视觉外观和布局。但是,由于不同的 Web 浏览器对 CSS 的支持机制水平不同,因此编译器呈现网页时可能会导致不一致。

为了克服这种兼容性问题,开发人员通常选择使用 CSS hack 来确保他们的网页在不同的浏览器和设备上都能一致地显示。其中一种 hack 是星号前缀属性(也称为星号属性 hack),它用于针对 Internet Explorer (IE) 的特定版本,这些版本对 CSS 的支持有限。

在本文中,我们将探讨 CSS 中的星号属性 hack,并讨论其用途和局限性。我们还将提供如何有效使用此 hack 的示例以及在 CSS 代码中实现它的最佳实践。

星号前缀属性

这是一种 CSS hack,用于为 HTML 元素声明不同的属性。以星号 (*) 或下划线 (_) 开头的属性仅在 IE7 及以下版本的 IE 中呈现,而对于 IE8 及以上版本,编译器则将其视为垃圾代码。

语法

element{
   background-color: red;  // for other browsers
   _background-color: red;   // for IE 6 and below
   *background-color: red;   // for IE 7 and below
}

现在,让我们通过示例更好地理解这一点。我们将使用此 hack 在 IE 6、IE 7 和其他浏览器中呈现属性。

注意 − 此 hack 在不同的浏览器中使用,因此请在指定的浏览器中运行程序以观察正确的输出。

示例

以下说明了如何使编译器将 CSS 属性呈现给 Internet Explorer 7 及以下版本的元素。

<!DOCTYPE html>
<html>
<head>
   <title>Internet Explorer 7 and Below Versions</title>
   <style>
      .my-div {
         background-color: red;
         width: 30%;
         height: 80%;
         padding: 3px;
         letter-spacing: 1px;
         margin-top: 40px;
         /* default margin applied in all other browsers */
         *margin-top: 0;
         /* IE6 margin */
      }
   </style>
</head>
<body>
   <h1>Star Preceded Property</h1>
   <h3>Given below is a div element whose margin-top will be 0 in IE 6 while it will be 20px in all other browsers.</h3>
   <div class="my-div"> This is my div element. </div>
</body>
</html>

对于 IE7 及以下版本,div 元素的 margin-top 将为零。

如果在任何其他浏览器中运行代码,div 元素的 margin-top 为 40px。

在上面的示例中,CSS 选择器 .my-div 应用了 40 像素的上边距。但是,*margin-top: 0; 规则仅适用于 Internet Explorer 6,将边距设置为 0 像素。属性名称 (margin-top) 前面的星号 (*) 就是“星号属性 hack”中的“星号”。这在其他浏览器中是语法错误,因此它们会忽略此行。

示例

以下说明了另一种使编译器将 CSS 属性呈现给 Internet Explorer 6 及以下版本的元素的方法。它不适用于 IE 7。

<!DOCTYPE html>
<html>
<head>
   <style>
      .my-div {
         background-color: blue;
         /* default background color */
         width: 30%;
         height: 80%;
         padding: 3px;
         letter-spacing: 1px;
         _background-color: red;
         /* background color in IE 6 and below versions */
      }
   </style>
</head>
<body>
   <h1>Star Preceded Property </h1>
   <h3>Given below is a div element whose background color will be red in IE 6 and below while it will be blue in all other browsers.</h3>
   <div class="my-div"> This is my div element. </div>
</body>
</html>

对于 IE6 及以下版本,div 元素的背景颜色将为蓝色。

如果在任何其他浏览器中运行代码,背景颜色将为红色。

在上面的示例中,CSS 选择器 .my-div 应用了红色背景颜色。但是,_background-color: blue; 规则仅适用于 Internet Explorer 6,将背景颜色设置为蓝色。

星号属性 Hack 的用途和局限性

“星号前缀属性”过去是一种技术,用于使用 CSS 样式定位 Internet Explorer 的特定版本。虽然它在实现此目标方面有效,但它也有一些优点和缺点。

用途

  • 它使 Web 开发人员能够将各种特定的 CSS 样式应用于 Internet Explorer 的旧版本,而不会影响所有其他浏览器中的结果。这有助于为多个浏览器上的用户创建一致且统一的体验。

  • 它易于使用并减少了代码数量,使其成为 Web 开发人员的有吸引力的替代方案。它阻止他们为特定浏览器编写条件注释或特定的样式表。

  • 它在 Web 开发社区中得到广泛使用和普及,这使得查找示例和支持变得容易。此外,它也很用户友好。

局限性

  • “星号前缀属性”是一种 hack。它不是编写 CSS 代码的标准且符合规范的方法。它依赖于 Internet Explorer 中的一个错误才能工作。此外,它不能保证在未来修改后的浏览器版本或其他浏览器中都能工作。

  • 它使代码更难以阅读和维护。由于它涉及编写非标准代码,因此如果没有额外的注释或文档,很难理解代码的目的。

  • 它可能导致意外后果,例如影响页面上的其他元素或导致浏览器出现意外行为。

结论

此技术是一种使用不同样式定位特定浏览器的方法,为 Internet Explorer 6 等旧版浏览器提供回退。总的来说,虽然“星号属性 hack”在其时代很有用,但它不再被推荐作为 Web 开发中的最佳实践。现代 Web 开发技术侧重于使用跨多个浏览器工作的标准且符合规范的代码,而不是依赖于特定于浏览器的 hack。

更新于:2023年5月2日

192 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告