围绕外观和布局构建 CSS 的好处

Avatar of Robin Rendle
Robin Rendle

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!

我喜欢 Jonathan Snook 在 Twitter 上提出的这一点,我一直在不停地思考它,因为它描述了编写 CSS 时真正困难的事情

事实上,我认为这是在大型代码库中编写可维护 CSS 最困难的事情。 这是我日常工作中一个巨大的问题,我认为大多数 CSS 中的技术债务 最终都会归结为这一点。

例如,让我们假设我们正在为复选框设置样式——该复选框可能在页面上有一个位置、一些边距,以及可能的其他定位样式。 并且该复选框可能是绿色的,但当您单击它时会变成蓝色。

我认为我们可以将这两种类型的样式区分开来,即布局和外观。

但是,编写良好的 CSS 需要将这两种类型的样式分开。 这样,复选框样式就可以一次又一次地重复使用,而不必担心这些定位样式(如边距、填充或宽度)可能会反过来困扰您。

在 Gusto,我们使用 Bootstrap 的网格系统,这很棒,因为我们可以像这样编写 HTML,明确地将这些问题分开,如下所示

<div class="row">
  <div class="col-6">
    <!-- Checkbox goes here -->
  </div>
  <div class="col-6">
    <!-- Another element can be placed here -->		
  </div>
</div>

否则,您可能会最终编写如下样式,如果将来在其他地方重复使用这些复选框样式,则会导致大量问题

.checkbox {
  width: 40%;
  margin-bottom: 60px;
  /* Other checkbox styles */
}

当我看到这样的代码时,我的第一个想法是,“为什么宽度是 40%——以及 40% 的什么?” 突然之间,我可以看到这个复选框类现在依赖于我不理解的其他一些代码。

因此,我开始将所有 CSS 视为适合这两个类别之一:外观和布局。 这一点很重要,因为我相信这两种类型的样式几乎不应该烘焙到一组样式或一个类中。 页面上的布局应该是一组样式,而外观(例如复选框的实际外观)应该在另一组样式中。 以及您是使用 HTML 还是单独的 CSS 类来实现这一点,尚有待商榷。

出现此问题的原因是,人们将不断尝试覆盖布局样式,而这正是我们最终得到一个类似于意大利面条怪物的代码库的原因。 我认为这种区别对于编写能够正确扩展的优秀 CSS 至关重要。 你怎么看? 在下面添加评论!