当你的设计模式失效时该怎么办?

Avatar of Chris Coyier
Chris Coyier

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

假设您有一个模块。每个网站都有模块,对吧?

<div class="module">
</div>

完美!我们做到了!

但现在,出现了“新情况™”。此模块不会完全按原样工作。它非常接近,但在这种“新情况™”中,模块将需要一些额外的底部边距。

您如何处理这种情况?让我们探索一些方法。

主体类影响它

您网站的特定页面或区域上的所有模块是否都像这样?也许您可以在该页面(或区域)中添加一个类。

<body class="books-page">

   ...

   <div class="module">
   </div>
.module {
  /* normal style */
}
body.books-page .module {
  /* variation styles */
}

您实际上不需要限定 .books-page,但我经常这样做,因为在这种情况下这没什么大不了的,并且可以提醒我正在发生的事情。

Sass 在这些情况下很有用,因为嵌套有点将房间连接在一起。

.module {
  /* normal style */
  aside.books &  {
    /* variation style */
  }
}

全新的类

也许新样式足够不同,以至于您将为其命名为不同的东西。

<div class="solitary-module">
</div>
.module {
  /* normal style */
}
.solitary-module {
  /* alternate style */
}

如果样式非常相似,您可以

.module, .solitary-module {
  /* normal style */
}
.solitary-module {
  /* variation styles */
}

这正是 Sass 中 @extend 的作用

.module {
  /* normal style */
}
.solitary-module {
  @extend .module; /* could be a %placeholder selector */
  /* variation style */
}

叠加类

也许您创建了一个额外的类,但该类并非旨在独立工作,它只是一个变体。

<div class="module module-books">
</div>
.module {
  /* normal styles */
}
.module.module-books {
  /* variation styles */
  /* you don't HAVE to double up the classes here in the CSS, but it enforces the connection (while increasing specificity) */
}

数据属性变体

我认为这并不常见,但我有点喜欢它。

<div class="module" data-variation="books">
</div>

属性类似于类(相同的特异性),但可以具有值。

.module {
  /* normal styles */
}
.module[data-variation="books"] {
  /* variation styles */
}

读起来很不错。

内联样式

这种变体很少见吗?也许只需要内联样式即可。

<div class="module" style="margin-bottom: 40px;">
</div>

通常不被推荐(不可重用),但如果是一次性的事情,它可以完成工作。

Shame.css

您始终可以使用 shame.css 稍后处理它!

<div class="module chris-did-this">
</div>
/* I will totally deal with this later I promise */
.chris-did-this {
  /* variation styles */
}

你是怎么做到的?