GVKun编程网logo

LESS CSS:重用生成的.@ {name}类作为mixin(css重命名)

12

对于LESSCSS:重用生成的.@{name}类作为mixin感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍css重命名,并为您提供关于Bootstrap&LESS:仅作为参考导入mixins

对于LESS CSS:重用生成的.@ {name}类作为mixin感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍css重命名,并为您提供关于Bootstrap&LESS:仅作为参考导入mixins、CSS LESS color mixin没有获得新的价值、css – Font Face Mixin for Less、css – LESS mixin一个变量类名的有用信息。

本文目录一览:

LESS CSS:重用生成的.@ {name}类作为mixin(css重命名)

LESS CSS:重用生成的.@ {name}类作为mixin(css重命名)

我正在使用LESS CSS 1.3.3.对不起,如果已经提出这个问题,我在网上找不到任何相关内容.

我有几个类生成器看起来像这样(示例非常简化,足以触发错误):

#genMarginTop (@name,@size) {
    .@{name} { margin-top: @size; }
}

然后我用它们来生成一些实际的类:

#genMarginTop(mtStandard,40px);
#genMarginTop(mtHalf,20px);

到目前为止,很好,LESS正确生成了这些类,我可以在HTML中使用它们.
但是当我想在其他地方重用这样生成的类作为mixin时,我收到一个错误:

.someClass {
    .mtStandard; // won't work,see error below
    // more stuff
}

我得到的错误是:

NameError: .mtStandard is undefined in /.../example.less:161:4
160 .someClass {
161     .mtStandard;
162     // more stuff

当然,我尝试在生成类之后使用mixin.看起来LESS在生成它们之后不会在内部注册这些生成的类,但我可能错了.

有没有办法在其他类中重用这些生成的类作为mixins?作为LESS的新手,他们的文档对生成的类相当稀疏,我完全失去了(特别是因为这是mixins似乎唯一接受的语法).

谢谢你读我

注意:我使用这样的类生成器的原因是因为它们比上面的例子复杂得多(想想所有依赖于一组公共参数的嵌套类),并且我将生成的类嵌入到各种@media查询中以“Zen”方式支持任何设备类型.最后我得到了类似的东西:

@media (max-width: 1024px) {
    #genSomething(something,somethingParam1,...);
    #genSomething(somethingElse,somethingElseParam1,...);
    #genStuff(stuff,stuffParam1,...);
}
@media (max-width: 240px) {
    #genSomething(something,somethingParam2,somethingElseParam2,stuffParam2,...);
}
// etc

解决方案/测试用例

这是@MartinTurjak解决方案的测试用例,我可以确认这是按预期工作的,嵌套类和所有内容:

.explicit {
  margin-top: 1;
  input { margin-top: 1; }
}
.reuseExplicit {
  .explicit;
  margin-bottom: 1;
}
#generator (@arg) {
  margin-top: @arg;
  input {
    margin-top: @arg;
  }
}
.generated { #generator(1); }
.reuseGenerated {
  .generated;
  margin-bottom: 1;
}

哪个正确生成:(注意显式/生成如何产生相同的结果)

.explicit {
  margin-top: 1;
}
.explicit input {
  margin-top: 1;
}
.reuseExplicit {
  margin-top: 1;
  margin-bottom: 1;
}
.reuseExplicit input {
  margin-top: 1;
}
.generated {
  margin-top: 1;
}
.generated input {
  margin-top: 1;
}
.reuseGenerated {
  margin-top: 1;
  margin-bottom: 1;
}
.reuseGenerated input {
  margin-top: 1;
}

解决方法

不幸.选择器插值只是字符串插值,然后将字符串打印到css中,因此在较少的运行中不会生成类对象.

所以你可以设计一个发电机/混合,包括你的操作:

#genMarginTop (@size) {
  margin-top: @size;
}

但是然后通过调用mixins / generators来构建类:

.mtStandard {#genMarginTop(40px);}
.mtHalf {#genMarginTop(20px);}

这样它们就是你可以用于mixin =)的类对象

.someClass {
  background-color: #FFF;
  .mtStandard;
  //more of this stuff
}

在这个简单的例子中,这看起来有点傻,但也许是这样的:

#bggenerator (@color) {
    background-color: @color;
 }
 #bggenerator (@color,dark) {
    @blend : @color + #842210;
    background-color: darken(@blend,30%);
 }
 #bggenerator (@color,@url,@rest) {
    background: "@{color} url('@{url}') @{rest}";
 }

 .mtStandard {
    #genMarginTop(40px);
 }

.someClass {
  .mtStandard;
  #bggenerator(#FFF,"bgimage.png",left top no-repeat);
  //more of this stuff
}

或者用参数做更令人兴奋的事情

Bootstrap&LESS:仅作为参考导入mixins

Bootstrap&LESS:仅作为参考导入mixins

我正在使用Bootstrap 3.0&少1.5.我将为许多站点使用相同的bootstrap.css(或使用他们的CDN).所以我正在使用

@import (reference) "bootstrap-3.0.0/less/bootstrap.less";
@import (reference) "bootstrap-3.0.0/less/mixins.less";

仅作为参考导入.

我的app.less(其中包括)

.herocontainer{
    .make-row();
    .iphoneblock{
        .make-sm-column-offset(1);
        .make-sm-column(4);
        text-align: center;
    }
    .copyblock{
        .make-sm-column(5);
        text-align: center;
        .copytext{
            @media(min-width: @screen-sm) {
              padding-top: 100px;
              }
        }
        .buybutton{
            .btn-lg;
            .btn-primary;
            background-color: #d6822f;
            }
    }
}

生成的站点只是单列输出.但是,如果我从mixins中删除(引用),例如:

@import (reference) "bootstrap-3.0.0/less/mixins.less";

然后我得到一个两列响应输出,但生成的CSS也有我不需要的类.

所以,
a)我如何才能在css中获取我在app.less中编写的类,而不是使用bootstrap类来膨胀
b)我如何调试这样的CSS问题? (我确实使用Google Chrome工具,但这个问题比我能理解/调试的要多)

谢谢,
约瑟夫

解决方法

另见: https://stackoverflow.com/a/14463540/1596547.其中说:

No actual code will output from that file as CSS,but all becomes available to use as mixins.

在你的情况下,它们将与例如make-sm-column()有所区别,这个mixin包含一个媒体查询定义.如果您在导入mixins时使用(引用).此媒体查询部分不包含在您的CSS中.

// Generate the small columns
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min-width: @screen-sm-min) {
    float: left;
    width: percentage((@columns / @grid-columns));
  }
}

会给:

.herocontainer {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}
@media (min-width: 768px) {
  .herocontainer {
    float: left;
    width: 33.33333333333333%;
  }
}

使用(参考)你只会得到:

.herocontainer {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}

注意你也使用来自buttons.less的btn-lg.对我而言,它似乎是引用button.less但不是mixins.less的最佳解决方案(理论mixins只应包含mixins,因此引用应该有所不同).否则只需要你需要的mixins来创建一个mixins.less.

UPDATE

>有一个错误Reference import not importing media queries>当引用导入中的类从未引用的导入调用mixin时,此mixin的输出将在(css)中显示(意外).所以在上面的答案中没有使用mixins.less的参考确实会给很多不需要的类

CSS LESS color mixin没有获得新的价值

CSS LESS color mixin没有获得新的价值

如何解决CSS LESS color mixin没有获得新的价值?

我有一个导航菜单,该菜单为每个菜单项拉出唯一的颜色。 LESS代码如下:

@colors: #839B99,#D3B64F,#C84D26,#A787B0,#A8ACB1,#4F9E51;

.color-mix(@i) when (@i > 0) {
        .menu-item:nth-child(@{i}):hover {
            color: extract(@colors,@i - 1);
        }
    .color-mix(@i - 1);
}

.color-mix(6);

我所做的更改是在网站的导航菜单中添加了一个新项,然后在{colors数组中添加了#A787B0,并将.color-mix从.color-mix(5)扩展到.color-mix(6)

我遇到的问题是站点上的菜单导航无法获取新的序列/颜色。相反,它基本上是跳过新值:

  • 菜单项1:#839B99

  • 菜单项2:#D3B64F

  • 菜单项3:#C84D26

  • 菜单项4:#A8ACB1 (这是新的菜单项,新的数组值(#A787B0)被跳过的地方

  • 菜单项5:#4F9E51

  • 菜单项6:黑色(默认后备颜色,因为数组中没有颜色)

有人可以引导我了解我可能在这里缺少什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

css – Font Face Mixin for Less

css – Font Face Mixin for Less

使用Less我正在定义font-family如下:
@georgia: georgia,times,'times new roman','nimbus roman no9 l',serif;

然后我有更少的mixin:

.font(@family: arial,@size: 1.0em,@lineheight: 1.0,@weight: normal,@style: normal,@variant: normal) {
  font: @style @variant @weight @size~"/"@lineheight @family;
} // font

最后我用它这样:

p {
  .font(@georgia,1.0em,1.5)
}

但我也想用自定义字体来定义字体系列:

@something: 'custom-font',arial,...;

但首先我需要注册自定义字体:

@font-face {
  font-family: 'custom-font';
src:url('fonts/custom-font.eot');
src:url('fonts/custom-font.eot?#iefix') format('embedded-opentype'),url('fonts/custom-font.woff') format('woff'),url('fonts/custom-font.ttf') format('truetype'),url('fonts/custom-font.svg#icon') format('svg');
font-weight: normal;
font-style: normal;
}

是否可以为@ font-face创建一个LESS mixin,所以我可以传递字体名称和路径并注册字体,而不重复所有这些代码?

我不知道如何将它与我的字体混合

或者如果还有一个更好的方法来做到这一点…

谢谢,
米格尔

解决方法

您可以定义自定义混合包含自定义字体,但由于LESS不实现任何控制指令,只能保护mixins(在当前问题的方面无用),因此您无法缩短mixin的字体定义的代码.
.include-custom-font(@family: arial,@style: normal){
    @font-face{
        font-family: @family;
        src:url('fonts/@{family}.eot');
        src:url('fonts/@{family}.eot?#iefix') format('embedded-opentype'),url('fonts/@{family}.woff') format('woff'),url('fonts/@{family}.ttf') format('truetype'),url('fonts/@{family}.svg#icon') format('svg');
        font-weight: @weight;
        font-style: @style;
    }
}

css – LESS mixin一个变量类名

css – LESS mixin一个变量类名

我正在使用Font Awesome 4.0.0,并希望在LESS中执行类似的操作:
.btn-github {
  .btn;
  .btn-primary;
  margin-left: 3em;

  i {
    .@{fa-css-prefix};
    .@{fa-css-prefix}-github;
    .@{fa-css-prefix}-lg;
    margin-right: 1em;
  }
}

这不会编译错误:

ParseError:无法识别的输入 – 在线…

有可能做到这一点吗?它肯定会为我做一个漂亮的按钮。

解决方法

你想要做的事情至少有2个问题(对于LESS> = 1.6,请参阅下面的更新):

1)不幸的是,无法使用选择器调用mixin
插值。

使用选择器插值LESS期望构造为
格式如下:

.@{selector-string} { property:value; }

(插值选择器也可以有一些静态字符串pre或
发布插值)

所以

.@{selector-string};

LESS编译器无法识别。在这里查看更多:
How can I call a mixin by reference in LESS?

2)带有插值选择器的规则集直接打印到CSS输出,并且不作为可在LESS运行中重用的mixin存在

例如:

@foo: test;

.@{foo} {
  length: 20px;
}

.bar {
  .test;
}

将返回:

Name error: .test is undefined
    .bar {  .test;}

点击此处查看更多信息:LESS CSS: Reuse generated .@{name} class as a mixin

你的问题的可能解决方案是将字体真棒规则重新划分为某种可重用的mixins(不使用插值)。像这样的东西:

@fa-var-github: "\f09b";

.fa-mixin() {
  display: inline-block;
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.fa-mixin-lg() {
  font-size: (4em / 3);
  line-height: (3em / 4);
  vertical-align: -15%;
}
.fa-mixin-icon(@icon){
  @var: "fa-var-@{icon}";
  &:before { content: @@var; }
}
i {
  .fa-mixin;
  .fa-mixin-lg;
  .fa-mixin-icon(github);
}

如果你真的不需要变量并且只想包含规则,最好的方法就是导入FontAwesome的编译CSS版本(参见答案here):

@import (less) 'font-awesome.css';

然后你就可以使用像LESS mixins这样的CSS规则,或者按照你认为合适的方式扩展他们的选择器,它应该可以正常工作。

更新:

从LESS> = 1.6开始,内插选择器的规则可以作为mixins访问…所以上面的#2限制形式不再适用(但你仍然无法通过插值动态调用mixin)。所以你可以简单地从导入的font-awesome.less文件中调用LESS mixins和变量,如下所示:

i {
  .fa;
  .fa-lg;
  &:before{
    content: @fa-var-github;
  }
}

今天关于LESS CSS:重用生成的.@ {name}类作为mixincss重命名的分享就到这里,希望大家有所收获,若想了解更多关于Bootstrap&LESS:仅作为参考导入mixins、CSS LESS color mixin没有获得新的价值、css – Font Face Mixin for Less、css – LESS mixin一个变量类名等相关知识,可以在本站进行查询。

本文标签: