3

我正在寻找一种将 mixin 用于特定于浏览器的 CSS hack 的解决方案。我正在使用 JavaScript 在 HTML 类中添加浏览器标记。喜欢.ie .ie7 .ie8 .ie9

我想像这样使用mixin:

.box-test {
margin: 10px;
@include browser(ie7) {
    margin: 20px;
    }
}

期望的输出:

.box-test {
margin: 10px;
}
.ie7 .box-test {
    margin: 20px;
    }

我尝试制作的mixin:

@mixin browser($browserVar) {
    @if $browserVar == ie7 {
    .ie7 { @content }
    }
    @else if $browserVar == ie8 {
    .ie8 { @content; }
         }
    @else if $browserVar == ie9 {
    .ie9 { @content; }
    }
}

问题是输出是:

.box-test {
    margin: 10px; }
.box-test .ie7 {
      margin: 20px; }
4

3 回答 3

8

最简单的 mixin 是这样的:

@mixin legacy-ie($ver: 7) {
    .ie#{$ver} & {
        @content;
    }
}

输出:

.baz {
    background: #CCC;

    @include legacy-ie {
        background: black;
    }
}

如果您想一次发出适用于多个 IE 版本而不重复的样式,那么这将是一种方法:

$default-legacy-ie: 7 8 9 !default;

@mixin legacy-ie($versions: $default-legacy-ie) {
    $sel: ();
    @each $v in $versions {
        $sel: append($sel, unquote('.ie#{$v} &'), comma);
    }

    #{$sel} {
        @content;
    }
}

.foo {
    background: red;

    @include legacy-ie {
        background: green;
    }
}

.bar {
    background: yellow;

    @include legacy-ie(7 8) {
        background: orange;
    }
}

输出:

.foo {
  background: red;
}
.ie7 .foo, .ie8 .foo, .ie9 .foo {
  background: green;
}

.bar {
  background: yellow;
}
.ie7 .bar, .ie8 .bar {
  background: orange;
}

如果您希望能够抑制所有的 IE kludges,您只需要添加一个变量和一个@if块:

$enable-legacy-ie: true !default;

@mixin legacy-ie($ver: 7) {
    @if $enable-legacy-ie {
        .ie#{$ver} & {
            @content;
        }
    }
}

在文件顶部设置$enable-legacy-ie为您不希望包含特定于 IE 的样式,如果您确实希望包含样式,请将其设置为。您可以轻松编写反向混合来隐藏旧 IE 无法使用的样式,以便 IE 特定文件保持美观和小。falsetrue

于 2013-04-12T12:35:22.867 回答
1

你把事情复杂化了。:) 可能就这么简单:

.box-test {
  margin: 10px;

  .ie-7 & {
    margin: 20px; } }

结果:

.box-test {
  margin: 10px;
}
.ie-7 .box-test {
  margin: 20px;
}
于 2013-04-12T09:33:12.570 回答
-1

我曾尝试为“@-moz-document url-prefix()”FF hack 添加 mixin,但它未被 SASS 识别,并且 SASS 抛出错误。所以我认为更好的解决方案是创建 _hack.sass 文件并添加不会由 SASS 编译的 css hack。我会在需要时包含此文件。

@import "黑客";

我正在添加这个答案,因为我觉得它对那些正在努力获得 mozilla/safari hack 作品的人很有用。

于 2015-05-18T05:29:05.760 回答