【问题标题】:Keeping SASS Code DRY using Media Queries使用媒体查询保持 SASS 代码 DRY
【发布时间】:2014-05-19 04:10:45
【问题描述】:

我有两个媒体查询。一个用于手机,另一个用于平板电脑。他们都要求相同的样式。在这种情况下,保留此代码DRY 的最佳方法是什么?

$mobile-portrait: "only screen and (max-width: 680px)";
$tablet-portrait: "only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait)";

div {
    background: gray; margin: 0 auto; height: 50px; width: 50px;

    @media #{$mobile-portrait} {
        height: 100px; width: 100px;
    }

   @media #{$tablet-portrait} {
       height: 100px; width: 100px;
   }
}

【问题讨论】:

    标签: html css sass media-queries


    【解决方案1】:

    我不确定有什么好的方法可以做到这一点,但你总是可以创建多个选择器。 (我不知道这是否是最佳做法,但我会这样做。)

    罢工>

    @media #{$mobile-portrait},
    @media #{$tablet-portrait} {
       height: 100px;
       width: 100px;
    }
    

    编辑:以下也是有效的。

    @media #{$mobile-portrait}, @media #{$tablet-portrait} {
       height: 100px; width: 100px;
    }
    

    为了美观,我更喜欢将选择器放在多行上。 When there are longer selectors, the line break helps differentiate between them.

    我也更喜欢多行的样式。如果选择器中有超过 3 或 4 个,可能会让人感到困惑。

    编辑 2:在媒体查询中,逗号实际上就像一个逻辑 or

    据此MDN article

    逗号分隔列表

    在媒体查询中使用逗号分隔的列表时,其行为类似于逻辑运算符or。使用逗号分隔的媒体查询列表时,如果任何媒体查询返回 true,则应用样式或样式表。逗号分隔列表中的每个媒体查询都被视为一个单独的查询,应用于一个媒体查询的任何运算符都不会影响其他查询。这意味着逗号分隔的媒体查询可以针对不同的媒体特征、类型和状态。

    这意味着第二个@media 是不必要的:

    @media #{$mobile-portrait}, #{$tablet-portrait} {
        height: 100px;
        width: 100px;
    }
    

    【讨论】:

    • 这似乎可以解决问题,但我唯一的问题是为什么不像以前那样内联显示两个媒体查询?这是我在查看其他人编写的某些媒体查询时一直想知道的问题。
    • @CarlEdwards 请查看我的编辑。希望我回答了你的问题。
    • 将代码移动到另一台计算机后,使用上面的代码时出现此错误:“...ile-portrait} 后的无效 CSS,”:预期的媒体查询(例如打印、屏幕、打印和屏幕),是“@media #{$table...”)
    • 第一个例子没有编译。
    • 太棒了!我也学到了一些东西!下次我需要进行多个媒体查询时,我会记住这一点。
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多