【发布时间】:2014-04-15 05:39:15
【问题描述】:
由于 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>
见上面的代码,label节点针对不同的媒体屏幕有多个类。我想简单地使用我自己的类来缩短它们。
我试图更少地创建一个从多个类扩展的类,例如
my-control-label:extend(.control-label, .col-xs-4, col-sm-6){}
但这不起作用,因为对于上面的示例,less 使用了完全匹配。是的,我可以尝试扩展“全部”,如下所示:
my-control-label:extend(.control-label all, .col-xs-4 all, col-sm-6 all){}
但是很烦人,而且会炸掉生成的css。
那么有什么简单的方法可以避免这种重复吗?
谢谢, 罗恩
更新 #1:
即使 extend all 也不适用于我的情况
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>
减:
#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){}
}
生成的css:
@media (min-width: 768px) {
.form-horizontal .control-label,
.form-horizontal #finalise .label,
.form-horizontal #finalise .controls {
text-align: right;
}
}
看到第 3 行不会应用 html 节点,这就是它不起作用的原因。
有什么建议吗?
更新 #2: 虽然将多个类组合成一个自定义类并不是一种通用方法,但它解决了这个问题。它使用引导网格混合解决了这个问题。谢谢 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>
减:
#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);
}
}
【问题讨论】:
-
即使您合并选择器以保持标记整洁,您仍然会有所有这些额外的选择器在您的 CSS 中产生垃圾。
-
同意@cimmanon。您正在清理您的 HTML,但会大大增加您的 CSS。前段时间我对此进行了简要研究,但现在我只使用 HTML 类属性中的 col 选择器。
-
@Lowkase 我并不是要暗示这不应该完成。由于缓存,小 HTML + 大 CSS 优于大 HTML 和小 CSS。我个人的建议是停止使用制造所有这些垃圾选择器的库,但我意识到这不是某些人的选择。
-
@cimmanon,我同意小 HTML 和大 css 更好,因为我们可以在以后根据需要修改 css 而无需更改 html 部分。我们可能可以缩小 css,甚至使用其他工具自动删除未使用的 css。顺便问一下,有没有像 unused-css.com 这样的 css 优化工具?
-
github.com/addyosmani/grunt-uncss 可能是我要找的,我会尽快尝试。如果可行,我的答案将是使用 less 来扩展所有、缩小 css 和 uncss。
标签: html css twitter-bootstrap twitter-bootstrap-3 less