发布于 2026-01-06 2 阅读
0

使用 CSS 自定义属性来减小 CSS 文件的大小 AWS 安全直播!

使用 CSS 自定义属性来减小 CSS 文件的大小

AWS 安全直播!

与 SASS 变量不同,CSS 自定义属性可以在类选择器中进行修改,从而创建抽象并减小 CSS 的大小。

我给你举个例子!

这里有一个简短的视频教程。如果您更喜欢阅读文章,请跳到此部分。

CodyHouse 框架中,我们使用.grid-gap-{size}实用程序类来设置网格项之间的间距:

.grid {
  display: flex;
  flex-wrap: wrap;

  > * {
    flex-basis: 100%;
  }
}

.grid-gap-xxxs {
  margin-bottom: calc(-1 * var(--space-xxxs));
  margin-left: calc(-1 * var(--space-xxxs));

  > * {
    margin-bottom: var(--space-xxxs);
    margin-left: calc(var(--space-xxxs));
  }
}

.grid-gap-xxs {
  margin-bottom: calc(-1 * var(--space-xxs));
  margin-left: calc(-1 * var(--space-xxs));

  > * {
    margin-bottom: var(--space-xxs);
    margin-left: calc(var(--space-xxs));
  }
}

.grid-gap-xs {
  margin-bottom: calc(-1 * var(--space-xs));
  margin-left: calc(-1 * var(--space-xs));

  > * {
    margin-bottom: var(--space-xs);
    margin-left: calc(var(--space-xs));
  }
}

.grid-gap-sm {
  margin-bottom: calc(-1 * var(--space-sm));
  margin-left: calc(-1 * var(--space-sm));

  > * {
    margin-bottom: var(--space-sm);
    margin-left: calc(var(--space-sm));
  }
}

.grid-gap-md {
  margin-bottom: calc(-1 * var(--space-md));
  margin-left: calc(-1 * var(--space-md));

  > * {
    margin-bottom: var(--space-md);
    margin-left: calc(var(--space-md));
  }
}

.grid-gap-lg {
  margin-bottom: calc(-1 * var(--space-lg));
  margin-left: calc(-1 * var(--space-lg));

  > * {
    margin-bottom: var(--space-lg);
    margin-left: calc(var(--space-lg));
  }
}

.grid-gap-xl {
  margin-bottom: calc(-1 * var(--space-xl));
  margin-left: calc(-1 * var(--space-xl));

  > * {
    margin-bottom: var(--space-xl);
    margin-left: calc(var(--space-xl));
  }
}

.grid-gap-xxl {
  margin-bottom: calc(-1 * var(--space-xxl));
  margin-left: calc(-1 * var(--space-xxl));

  > * {
    margin-bottom: var(--space-xxl);
    margin-left: calc(var(--space-xxl));
  }
}

.grid-gap-xxxl {
  margin-bottom: calc(-1 * var(--space-xxxl));
  margin-left: calc(-1 * var(--space-xxxl));

  > * {
    margin-bottom: var(--space-xxxl);
    margin-left: calc(var(--space-xxxl));
  }
}

由于重复内容很多,几周前,我们决定使用 CSS 自定义属性来简化这些类。

第一步是创建一个抽象层,其中包含我们为每个实用程序类重复编写的代码:

[class*="grid-gap"] {
  margin-bottom: calc(-1 * var(--grid-gap, 1em));
  margin-left: calc(-1 * var(--grid-gap, 1em));

  > * { 
    margin-bottom: var(--grid-gap, 1em); 
    margin-left: var(--grid-gap, 1em);
  }
}

此属性选择器查找包含字符串“grid-gap”的类(所有 grid-gap 实用程序类)。请注意,我们已将变量替换--space-unit为新--grid-gap变量。

在我们的.grid课堂上,我们将--grid-gap变量设置为 0(默认值)。

.grid {
  --grid-gap: 0px;
  display: flex;
  flex-wrap: wrap;

  > * {
    flex-basis: 100%;
  }
}

现在我们可以对.grid-gap-xxxxs类进行如下修改:

.grid-gap-xxxxs { --grid-gap: var(--space-xxxxs); }

我们不再需要关于边距的那一大段代码了;我们可以直接修改--grid-gap变量的值。

如果我们对所有实用程序类执行相同的操作,最终会得到以下结果:

.grid {
  --grid-gap: 0px;
  display: flex;
  flex-wrap: wrap;

  > * {
    flex-basis: 100%;
  }
}

[class*="grid-gap"] {
  margin-bottom: calc(-1 * var(--grid-gap, 1em));
  margin-left: calc(-1 * var(--grid-gap, 1em));

  > * { 
    margin-bottom: var(--grid-gap, 1em); 
    margin-left: var(--grid-gap, 1em);
  }
}

.grid-gap-xxxxs { --grid-gap: var(--space-xxxxs); }
.grid-gap-xxxs  { --grid-gap: var(--space-xxxs); }
.grid-gap-xxs   { --grid-gap: var(--space-xxs); }
.grid-gap-xs    { --grid-gap: var(--space-xs); }
.grid-gap-sm    { --grid-gap: var(--space-sm); }
.grid-gap-md    { --grid-gap: var(--space-md); }
.grid-gap-lg    { --grid-gap: var(--space-lg); }
.grid-gap-xl    { --grid-gap: var(--space-xl); }
.grid-gap-xxl   { --grid-gap: var(--space-xxl); }
.grid-gap-xxxl  { --grid-gap: var(--space-xxxl); }
.grid-gap-xxxxl { --grid-gap: var(--space-xxxxl); }

这种优化方法使示例 CSS 代码的大小减少了一半以上!显然,只有在可以抽象某些规则的情况下才能应用这种技巧(我并不是说 CSS 自定义属性就能使 CSS 代码的大小减少一半)。不过,本教程仍然只是一个利用 CSS 变量进行代码优化的示例。

附注:所有现代浏览器都支持 CSS 变量

原文发表于CodyHouse.co

文章来源:https://dev.to/codyhouse/using-css-custom-properties-to-reduce-the-size-of-your-css-4npc