如何避免重复多个css类

Ron*_*Ron 10 html css less twitter-bootstrap twitter-bootstrap-3

因为bootstrap3,我的很多html会像这样结束:

<div class="form-group">
    <label class="control-label col-xs-4 col-sm-6">Name on card</label>
    <div class="col-xs-8 col-sm-6">
        <input class="form-control" type="text" placeholder="Name on Card" required />
    </div>
</div>
<div class="form-group">
    <label class="control-label col-xs-4 col-sm-6">Card Number</label>
    <div class="col-xs-8 col-sm-6">
        <input class="form-control" type="text" placeholder="Card Number" name="EWAY_CARDNUMBER" required value="4444333322221111" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

参见上面的代码,标签节点有不同的媒体屏幕类.我想简单地用他们自己的课来缩短它们.

我试图减少创建一个从多个类扩展的类

my-control-label:extend(.control-label, .col-xs-4, col-sm-6){}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为较少使用完全匹配上述示例.是的我可以尝试扩展"all",如下所示:

my-control-label:extend(.control-label all, .col-xs-4 all, col-sm-6 all){}
Run Code Online (Sandbox Code Playgroud)

但它很烦人,它会破坏生成的CSS.

那么有什么简单的方法可以避免这种重复吗?

谢谢,罗恩

更新#1:

甚至扩展所有对我的情况都不起作用

HTML

<div id='finalise'>
  <form class='form-horizontal'>
    <div class='form-group' >
      <label class='my-label' />
      <div class='my-controls'>
        <input class="form-control" type="text" placeholder="Name on Card" required />
      </div>

      ...
    </div>
  </form>
</div>
Run Code Online (Sandbox Code Playgroud)

减:

#finalise {
    .my-label:extend(.control-label all, .col-xs-4 all, .col-sm-3 all, .col-lg-2 all){}
    .my-controls:extend(.control-label all, .col-xs-8 all, .col-sm-5 all, .col-lg-4 all){}
}
Run Code Online (Sandbox Code Playgroud)

生成的css:

@media (min-width: 768px) {
  .form-horizontal .control-label,
  .form-horizontal #finalise .label,
  .form-horizontal #finalise .controls {
    text-align: right;
  }
}
Run Code Online (Sandbox Code Playgroud)

看到第3行不会应用html节点,这就是为什么它不起作用.

有什么建议?

更新#2: 虽然它不是将几个类组合成自定义类的通用方法,但它解决了这个问题.它使用bootstrap grid mixins解决了这个问题.谢谢NiloVelez

HTML

<div id='finalise'>
  <form class='form-horizontal'>
    <div class='form-group' >
      <label class='control-label' />
      <div class='controls'>
        <input class="form-control" type="text" placeholder="Name on Card" required />
      </div>

      ...
    </div>
  </form>
</div>
Run Code Online (Sandbox Code Playgroud)

减:

#finalise {
    .form-group {
    .make-row();
}
.control-label {
    .make-xs-column(4);
    .make-sm-column(5);
    .make-lg-column(6);
}
.controls {
    .make-xs-column(8);
    .make-sm-column(5);
    .make-lg-column(6);
}
}
Run Code Online (Sandbox Code Playgroud)

Nil*_*lez 4

您必须解决自己的情况,但 Bootstrap 附带了 LESS mixin,旨在减少由负责任的网格列引起的选择器膨胀

http://getbootstrap.com/css/#grid-less

你可以做这样的事情(来自文档)

.wrapper {
  .make-row();
}
.content-main {
  .make-lg-column(8);
}
.content-secondary {
  .make-lg-column(3);
  .make-lg-column-offset(1);
}
Run Code Online (Sandbox Code Playgroud)

...

<div class="wrapper">
  <div class="content-main">...</div>
  <div class="content-secondary">...</div>
</div>
Run Code Online (Sandbox Code Playgroud)

更新: Bootstrap 现在提供了一些关于 LESS mixin 的更多文档:

http://getbootstrap.com/css/#less-mixins-vendor

http://getbootstrap.com/css/#less-mixins-utility