【问题标题】:extend Compass breakpoint mixin to avoid duplicates扩展 Compass 断点混合以避免重复
【发布时间】:2017-06-06 18:02:41
【问题描述】:

我正在使用 Compass mixin 为视网膜创建媒体查询,例如:

header {
  height: $header-image-height;
  text-align: center;
  position: relative;
  @include breakpoint($standard-resolution) {
    background:
            linear-gradient(
                            rgba(0, 0, 0, 0.1),
                            rgba(0, 0, 0, 0.1)
            ),
            url(../../img/dist/xxx.jpg) center center no-repeat;
  }
  @include breakpoint($retina-resolution) {

    background:
            linear-gradient(
                            rgba(0, 0, 0, 0.1),
                            rgba(0, 0, 0, 0.1)
            ),
            url(../../img/dist/xxx_2x.jpg) center center no-repeat;
    background-size: 1176px auto;
  }
  color: $header-color;
  @extend %montserrat-bold;
}

效果很好。但是,如果我将相同的 mixin 放入另一个元素中,我将在最后得到 @media 的重复输出 - 每个元素一个输出:

@media screen and (max-resolution: 1.9999dppx), screen and (-webkit-max-device-pixel-ratio: 1.9999), screen and (max--moz-device-pixel-ratio: 1.9999), screen and (max-resolution: 191.9904dpi) {
  header {
    background: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url(../../img/dist/xxx.jpg) center center no-repeat;
  }
}

其他元素的输出相同。有什么方法可以让我从这个 mixin 中制作占位符,所以所有元素都在同一个 @media 指令下?

【问题讨论】:

    标签: sass placeholder mixins compass


    【解决方案1】:

    我找到了一个很好的解决方案,可以避免输出出现重复代码。 首先有一个很好的工具来管理断点,叫做地图:

    $breakpoints:  (
    'retina': 
    //here put all your breakpoints
    )
    

    其次,与其在每个目标元素中放置断点,不如将@include 指令放在根目录中,并在其中放置所有带有新指令的元素,像这样响应(我为此创建了单独的文件):

    _retina.scss:

    @include respond-to(retina) {
      element1 {}
      .element2 {}
    }
    

    结束不重复的代码)))我希望它会对某人有所帮助。顺便说一句,我发现指南针很烂(((我不会再使用它了。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 2014-05-31
      • 2019-07-10
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多