深度剖析HTML的语意和与其相关的前端框架

2019-01-15 09:49:44丽君

JavaScript专用类

使用某种形式的JavaScript专用类,可以降低因组件样式或结构的改变导致JavaScript失效的风险。我已经找到了一种非常有效的方法,那就是专为JavaScript的钩子使用一种特定的类——js-*——不要在这个类名上添加任何描述。

  • <a href="/login" class="btn btn-primary js-login"></a>  
  • 在你修改组件的结构或样式的时候,可能会不经意间对那些必要的JavaScript行为和复杂的功能造成影响,用这种方法的话,可以降低这种可能性。
    组件修改器

    组件常常会有一些变体,它们与基本组件只有细微的差别。比如,不同的背景色或者边框。主要有两种创建这些组件变体的模式。我将它们称为“单类名”模式和“多类名”模式。

    单类名模式

  • .btn, .btn-primary { /* 按钮模板样式 */ }    .btn-primary { /* 主按钮的特殊样式 */ }   
  •    <button class="btn">Default</button>  
  • <button class="btn-primary">Login</button>  
  • 多类名模式

  • .btn { /* 按钮模板样式 */ }    .btn-primary { /* 主按钮的特殊样式 */ }   
  •    <button class="btn">Default</button>  
  • <button class="btn btn-primary">Login</button>  
  • 如果你使用预处理程序,你可以用Sass的@extend功能,以减少一些在使用“单类名”模式时所涉及的维护工作。然而,即使有预处理程序的帮忙,我依然倾向于使用“多类名”模式,并在HTML中修改类名。

    我发现这是一种更具扩展性的模式。比如,要实现一个基本的btn组件,并增加5种类型的按钮与3种额外的尺寸。用“多类名”模式的话只要9个class就可以搞定,用“单类名”模式则需要24个class。

    如果需要的话,它也更容易让上下文环境适应组件。你可能想对出现在其它组件中的任一btn做一些细节调整。

  • /* “多类名”样式调整 */    .thing .btn { /* 相应的样式调整 */ }   
  •    /* “单类名”样式调整 */   
  • .thing .btn,    .thing .btn-primary,   
  • .thing .btn-danger,    .thing .btn-etc { /* 相应的样式调整 */ }