【问题标题】:Sass / SCSS Mixin for Clearfix - best approach?用于 Clearfix 的 Sass / SCSS Mixin - 最佳方法?
【发布时间】:2011-11-01 13:16:43
【问题描述】:

我想从我的 HTML 中删除 clearfix 类,并在我的 SCSS(Rails 3.1 应用程序)中包含一个 clearfix mixin。最好的方法是什么?

我正在考虑只采用 HTML 5 Boilerplate clearfix 并将其转换为 mixin,然后将其 @include 到 CSS 中以用于需要 clearfixing 的元素。

复制自 HTML5 样板:

/* The Magnificent Clearfix: Updated to prevent margin-collapsing on child elements. http://j.mp/bestclearfix */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }

/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin padding-bottom-of-page */
.clearfix { zoom: 1; }

这样做有缺点吗?有没有更好的办法?我可以通过这种方式安全地从我的 HTML 标记中删除 clearfix 吗?

【问题讨论】:

    标签: ruby-on-rails-3.1 sass mixins clearfix


    【解决方案1】:

    我可能应该添加 - 这是我想出的解决方案。我对这一切还是很陌生,所以我不知道这是否会与将元素的类设置为 clearfix 并使用上面的 HTML5 样板代码做同样的工作。

    @mixin clearfix {
        zoom:1;
        &:before, &:after {
            content: "\0020"; 
            display: block; 
            height: 0; 
            overflow: hidden; 
        }
        &:after {
            clear: both;
        }
    }
    

    编辑: 最好使用 @extend 而不是 mixin,因为它会产生更少的 CSS 代码。 此外,在使用@extend 时使用静默类(由% 表示)也很有用。这可以防止 unexpected CSS rules 并消除您正在扩展的规则,如果它是 not being used 直接。

    %clearfix {
        zoom:1;
        &:before, &:after {
            content: "\0020";
            display: block;
            height: 0;
            overflow: hidden;
        }
        &:after {
            clear: both;
        }
    }
    
    #head {
        @extend %clearfix;
        padding: 45px 0 14px; margin: 0 35px 0;
        border-bottom: 1px solid $border;
    }
    

    【讨论】:

    • 啊,它正在工作... scss 中的其他地方出现错误... 仍然不确定这是否是最好的解决方案... 还有其他想法吗?
    • 这是一个很棒的建议,内森 - 谢谢 - 真的很感激 :-) ...你应该把它作为一个独立的答案,这样我就可以投票了,你可以获得更多的分数 :-) 我会尝试这样的事情 - 我现在试图避免的(不记得我第一次写这篇文章时是否重要)是需要在我的 html 中有非语义类或其他任何东西
    • 两者都使用过 - 我仍然更喜欢不使用扩展的解决方案
    • 如何扩展产生更少的css?如果有的话,它应该产生更多的代码,因为 .clearfix 本身也包括在内。
    • 我建议不要使用 @extend 进行 clearfix。理想情况下,您应该将 clearfix 分解为它自己的实用程序类,并在需要时在您的标记中使用,以防止重复的、不必要的样式重复。如果您要扩展或使用占位符/伪类;确保你是严格的,并且只在嵌套在一层或以下的选择器中使用它。
    【解决方案2】:

    要通过使用@extend 来减少代码输出,请将 clearfix 定义为placeholder(此处仅适用于没有 IE 6+7 的现代浏览器):

    Sass 代码:

    %clearfix {
        &:after {
            content: " ";
            display: block;
            clear: both;
        }
    }
    
    /* Use above defined placeholder in the selector(s) of your needs via @extend: */
    #container {
        position: relative;
        min-width: 42.5em;
        @extend %clearfix;
    }
    

    CSS 输出将是:

    #container:after {
        content: " ";
        display: block;
        clear: both;
    }
    #container {
        position: relative;
        min-width: 42.5em;
    }
    

    【讨论】:

    • 这是最好的答案,因为它使用 silent classes 而不是 mixin 或占位符。
    【解决方案3】:
    // source http://www.alistapart.com/articles/getting-started-with-sass/
    // http://nicolasgallagher.com/micro-clearfix-hack/
    
        @mixin clearfix {
         // For modern browsers
          &:before,
          &:after {
            content:" ";
            display:table;
          }
    
          &:after {
            clear:both;
          }
    
          // For IE 6/7 (trigger hasLayout)
          & {
            *zoom:1;
          }
        }
    

    【讨论】:

      【解决方案4】:

      为什么不使用Compass 框架?它已经在许多其他有用的 mixin 和实用程序中提供了mixins for clearfix。寻找现有工具总比自己维护额外代码要好。

      【讨论】:

      • 是的 - 我同意使用现有的东西......我面临的挑战是指南针看起来非常复杂......我看着它并被吓倒了所以决定推出我自己的......
      • Compass 有很多 mixin 和实用程序,是的,它可能会让人不知所措,但它们的文档组织得很好,而且你很可能只会使用它们最初提供的一小部分。如果您对他们的实现方式有任何疑问,您甚至可以在他们的文档中查看源代码。
      • @davidg 我不能不同意你的观点,但我觉得将他指向一个可以解决许多其他 CSS 样板问题的框架的方向比给他一个 mixin 更有益正如我所指出的,他现在有责任维护这一点。
      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多