开发日志:关于媒体查询@media不生效(失效)的问题

1,179 阅读1分钟

引言

在最近的项目开发过程中,需要对项目进行响应式设计,在设计响应式的过程中,一般有以下几种写法:

①使用vw,vh,em,rem,%等响应式单位

②使用媒体查询@media

此篇不过多介绍这些用法,主要用于记录媒体查询@media失效的问题。

案例

我发现自己写上了@media之后,但是却并没有生效,阅诸多案例后却依旧无头绪,发现网上的案例大多数都是简单的案例,例如:

<style>
body {
    background-color:lightgreen;
}

@media only screen and (max-width: 500px) {
    body {
        background-color:lightblue;
    }
}
</style>

可是在实际开发过程中,样式都是非常复杂的,会涉及到less与scss等,例如下列less样式:

.formBox{
    .formInputBox {
        width: 40vw;
        height: 6vh;
        .formInputItem {
          width: 6vw;
          height: 4vh;
        }
        .formInput input {
          width: 32vw;
          height: 5vh;
        }
      }
}

正确写法

如果需要对其中的formInputBox,formInputItem,formInput input进行媒体查询,则媒体查询的位置应该写在:

.formBox{
    .formInputBox {
        width: 40vw;
        height: 6vh;
        .formInputItem {
          width: 6vw;
          height: 4vh;
        }

        .formInput input {
          width: 32vw;
          height: 5vh;
          margin-left: 5px;

        }
      }
      // 媒体查询,当页面宽度小于800px时候,则触发下列的样式
      @media (max-width: 800px) {
        .formInputBox {
          width: 95vw;
          .formInputItem {
            width: 15vw;
          }
          .formInput input {
            width: 70vw;
          }
        }
      }
}

首先媒体查询内部的第一层元素应该与其对应的元素同级,将其写出该层级或者写入媒体查询都无法生效,包括后续的其他元素也得与外部的元素层级一一对应,否则可能会生效。