【问题标题】:Is it okay to partially override a rule via a @media query?可以通过@media 查询部分覆盖规则吗?
【发布时间】:2014-05-05 17:24:57
【问题描述】:

我想使用媒体查询为不同的设备稍微修改我的 CSS。理想情况下,我想创建一个类或规则的基线版本,然后仅部分覆盖它,如下所示:

.myClass {
    font-family:Helvetica;
    color:#333333;
    font-size:20px;
}

@media screen and (min-width: 1000px) {
    .myClass {
        font-size:30px;
    }
}

我的问题是,对于匹配媒体查询的屏幕,.myClass 将完全替换基线(从而消除字体和颜色属性值对),还是保留这些和只覆盖 font-size 值?

这似乎有效,但我想知道这是否是预期的行为。谢谢!

【问题讨论】:

  • 想想@media 部分就像说html.myScreenWidth .myClass {}
  • 当然,它实际上并没有增加任何选择器的特异性。

标签: css media-queries


【解决方案1】:

它将保留这些并且仅覆盖font-size 值。换句话说,当媒体查询完成时,它的行为与:

.myClass {
    font-family:Helvetica;
    color:#333333;
    font-size:20px;
}

.myClass {
    font-size:30px;
}

如果没有,第二条规则就会消失,只留下第一条。

这是预期行为; @media 规则不会以任何方式影响级联,只是仅在特定条件下应用随附的规则。

如果您只需要应用一个规则或另一个(即规则需要互斥),您有两种选择:

  1. 重置第二条规则中的 font-familycolor 声明:

    .myClass {
        font-family:Helvetica;
        color:#333333;
        font-size:20px;
    }
    
    @media screen and (min-width: 1000px) {
        .myClass {
            font-family:inherit;
            color:inherit;
            font-size:30px;
        }
    }
    
  2. 将第一条规则包含在媒体查询的否定版本中:

    @media not screen and (min-width: 1000px) {
        .myClass {
            font-family:Helvetica;
            color:#333333;
            font-size:20px;
        }
    }
    
    @media screen and (min-width: 1000px) {
        .myClass {
            font-size:30px;
        }
    }
    

查看我对这些类似问题的回答以获得更详细的文章:

【讨论】:

  • 太棒了!我想我从来没有意识到规则集的第二个声明会保留它没有覆盖的第一个属性。感谢您快速而彻底的答复!
猜你喜欢
  • 2012-10-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 2014-08-26
  • 2014-03-26
  • 2013-04-24
  • 1970-01-01
相关资源
最近更新 更多