- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 LESS 时,我发现混合类很有用,以便基于其他类属性创建新类,但有时我需要覆盖它们。
喜欢:
<p></p>
<pre><code>.btn {
border-radius: 10px;
background-color: blue;
font-size:10px;
}
.btn_warning {
.btn;
background-color: yellow;
font-size: 12px;
}
</code></pre>
<p></p>
输出具有重复的属性:
<p></p>
<pre><code>.btn {
border-radius: 10px;
background-color: blue;
font-size:10px;
}
.btn_warning {
border-radius: 10px;
background-color: blue;
font-size:10px;
background-color: yellow;
font-size: 12px;
}
</code></pre>
<p></p>
我知道有多种方法可以解决这个问题,比如 dom 上的多个类,甚至是 @extend 来构建多个选择器,但 navigator 在运行时仍然会覆盖属性。
混入时是否有任何理由重复相同的属性?似乎是一种制作“独立”属性组的简单方法,但如果有重复的值,那就不好了。
最佳答案
LESS 不考虑删除 block 内的重复属性,至少部分原因是 stated here (针对语法修复稍作修改的引用):
The trouble is that people frequently use multiple properties in order to provide a fallback for older browsers. Removing the properties is not something that it would be good to do generically.
程序员可以不对其进行重复编程。您可以设置一个基本的 mixin,就像 Danny Kijkov 在他的回答中提到的那样,或者......
您可以在构建主按钮制造商 mixin 时进行详细说明。像这样的:
LESS(混合)
.makeBtn(@ext: null; @rad: 10px; @color: blue; @size: 10px;) {
.set-extension() when (@ext = null) {
@class-extension: ~'';
}
.set-extension() when not (@ext = null) {
@class-extension: ~'_@{ext}';
}
.set-extension();
.btn@{class-extension} {
border-radius: @rad;
background-color: @color;
font-size: @size;
//define various addtions based on extensions here
.specialExtensionProps() when (@ext = danger) {
border: 3px solid red;
}
.specialExtensionProps() when (@ext = someExtName) {
my-special-prop: yep;
}
.specialExtensionProps();
}
}
LESS(以多种方式使用 Mixin)
.makeBtn(); //makes base button
.makeBtn(warning; @color: yellow; @size: 12px); //makes modified button
.makeBtn(danger; @color: red;); //makes modified button
.makeBtn(someExtName, 15px); //makes modified button
CSS 输出
.btn {
border-radius: 10px;
background-color: #0000ff;
font-size: 10px;
}
.btn_warning {
border-radius: 10px;
background-color: #ffff00;
font-size: 12px;
}
.btn_danger {
border-radius: 10px;
background-color: #ff0000;
font-size: 10px;
border: 3px solid red;
}
.btn_someExtName {
border-radius: 15px;
background-color: #0000ff;
font-size: 10px;
my-special-prop: yep;
}
如果您不知道,请注意上面演示的 LESS 功能,即仅设置 mixin 变量集中的一些变量。因此,对于前两个专门的 .makeBtn()
调用,我只设置了一些变量,从 mixin 中乱序,通过显式调用要设置的变量名称(例如 @color: yellow
)。这允许我“跳过”设置 @size
。在最后一个例子中,我只设置了前两个值,所以我不需要输入任何变量名。
我不知道以上内容是否可以帮助您获得所需的内容,但它确实提供了一种能够减少代码大小的不同方式。
您提到了:extend()
,这里可以很好地使用它来避免重复:
少
.btn {
border-radius: 10px;
background-color: blue;
font-size:10px;
}
.btn_warning {
&:extend(.btn);
background-color: yellow;
font-size: 12px;
}
CSS 输出
.btn,
.btn_warning {
border-radius: 10px;
background-color: blue;
font-size: 10px;
}
.btn_warning {
background-color: yellow;
font-size: 12px;
}
在您的情况下,如果所有按钮都属于 .btn
类或 .btn_SOMETHING
形式,并且您没有使用 .btn_
除了按钮之外的任何东西,那么您也许可以只使用 CSS 级联来应用样式并防止 CSS 代码重复(不需要特殊的 LESS):
LESS 和 CSS 输出
.btn, [class *= btn_] {
border-radius: 10px;
background-color: blue;
font-size:10px;
}
.btn_warning {
background-color: yellow;
font-size: 12px;
}
任何具有 btn_warning
类的 html 都会首先从属性选择器 [class *= btn_]
中获取基本按钮样式,而实际的 btn_warning
类将覆盖设置为被覆盖的东西。
如果你在 html 中拆分类名(所以 class="btn warning"
而不是 class="btn_warning"
),那么这样可以避免重复:
LESS 和 CSS 输出
.btn {
border-radius: 10px;
background-color: blue;
font-size:10px;
}
.btn.warning {
background-color: yellow;
font-size: 12px;
}
关于更少混合重复属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828924/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!