Sass mixin 位置置顶
Sass mixin position sticky
这是我与 SASS 的第一天,如果这听起来很简单,我很抱歉。
我正在尝试为 position: sticky;
应用 mixin 我目前有:
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
.menu-link{
z-index: 12;
@include position($sticky);
}
我得到
body:before {
white-space: pre;
font-family: monospace;
content: "Error: Undefined variable: \"$sticky\".\A on line 70
我从这个例子开始工作:
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
我看到我没有定义 (10px) 或等价物,但我认为我不能在这里放置任何位置,所以我不确定为什么在这种情况下我会得到未定义的变量。
如果我只输入 @include position;
我会得到
Error: Mixin position is missing argument $sticky.\A
我认为你的意思是使用 .menu-link { @include position(sticky); }
而不是 $sticky
。您正在尝试使用 SASS 变量,而不是 CSS 属性.
在您从中提取的示例中,mixin 正在寻找参数 $radius
。
参数作为 10px 传入,因此在 mixin $radius = 10px
.
在您的代码中,您正在寻找 $sticky
。您试图使用 $sticky
的未定义变量而不是参数 sticky 来调用混入。如果在调用 mixin 之前定义了变量名,则可以使用它。
例子
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
$sticky: sticky;
.menu-link{
z-index: 12;
@include position($sticky);
}
你实际上为任何位置值做了一个混合。变量名称是 'sticky' 但它可以包含任何值。这个:
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
等同于:
@mixin position($pos) {
-webkit-position: $pos;
-moz-position: $pos;
-ms-position: $pos;
-o-position: $pos;
position: $pos;
}
它适用于任何位置值:
.menu-link{
z-index: 12;
@include position(sticky);
@include position(relative);
@include position(absolute);
}
如果只是对位置感兴趣:置顶;
@mixin stickyPosition {
-webkit-position: sticky;
-moz-position: sticky;
-ms-position: sticky;
-o-position: sticky;
position: sticky;
}
.menu-link{
z-index: 12;
@include stickyPosition;
}
希望对您有所帮助。 :)
您可以通过使用一些浏览器前缀函数稍微清理一下,这样您就不必写出浏览器前缀。
@mixin prefix($declarations, $prefixes: ()) {
@each $property, $value in $declarations {
@each $prefix in $prefixes {
#{'-' + $prefix + '-' + $property}: $value;
}
// Output standard non-prefixed declaration
#{$property}: $value;
}
}
.menu {
&-link {
@prefix((position: sticky), webkit moz ms o);
z-index:12;
}
// other menu classes
}
这是我与 SASS 的第一天,如果这听起来很简单,我很抱歉。
我正在尝试为 position: sticky;
应用 mixin 我目前有:
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
.menu-link{
z-index: 12;
@include position($sticky);
}
我得到
body:before {
white-space: pre;
font-family: monospace;
content: "Error: Undefined variable: \"$sticky\".\A on line 70
我从这个例子开始工作:
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
我看到我没有定义 (10px) 或等价物,但我认为我不能在这里放置任何位置,所以我不确定为什么在这种情况下我会得到未定义的变量。
如果我只输入 @include position;
我会得到
Error: Mixin position is missing argument $sticky.\A
我认为你的意思是使用 .menu-link { @include position(sticky); }
而不是 $sticky
。您正在尝试使用 SASS 变量,而不是 CSS 属性.
在您从中提取的示例中,mixin 正在寻找参数 $radius
。
参数作为 10px 传入,因此在 mixin $radius = 10px
.
在您的代码中,您正在寻找 $sticky
。您试图使用 $sticky
的未定义变量而不是参数 sticky 来调用混入。如果在调用 mixin 之前定义了变量名,则可以使用它。
例子
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
$sticky: sticky;
.menu-link{
z-index: 12;
@include position($sticky);
}
你实际上为任何位置值做了一个混合。变量名称是 'sticky' 但它可以包含任何值。这个:
@mixin position($sticky) {
-webkit-position: $sticky;
-moz-position: $sticky;
-ms-position: $sticky;
-o-position: $sticky;
position: $sticky;
}
等同于:
@mixin position($pos) {
-webkit-position: $pos;
-moz-position: $pos;
-ms-position: $pos;
-o-position: $pos;
position: $pos;
}
它适用于任何位置值:
.menu-link{
z-index: 12;
@include position(sticky);
@include position(relative);
@include position(absolute);
}
如果只是对位置感兴趣:置顶;
@mixin stickyPosition {
-webkit-position: sticky;
-moz-position: sticky;
-ms-position: sticky;
-o-position: sticky;
position: sticky;
}
.menu-link{
z-index: 12;
@include stickyPosition;
}
希望对您有所帮助。 :)
您可以通过使用一些浏览器前缀函数稍微清理一下,这样您就不必写出浏览器前缀。
@mixin prefix($declarations, $prefixes: ()) {
@each $property, $value in $declarations {
@each $prefix in $prefixes {
#{'-' + $prefix + '-' + $property}: $value;
}
// Output standard non-prefixed declaration
#{$property}: $value;
}
}
.menu {
&-link {
@prefix((position: sticky), webkit moz ms o);
z-index:12;
}
// other menu classes
}