最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 关于Sass响应式布局的使用方式(media媒体查询)

    正文概述 掘金(吴小远)   2021-05-23   1151

    前言

    当我们在做PC端页面的时候,免不了与响应式布局打交道。这篇文章就是为了记录一下我在工作中遇到的问题:如何使用sass来做响应式布局。

    业务场景

    假设此时有两个div,并排排列。在视窗宽度小于1000px的时候,变成竖直排列的状态。运行环境的话选择vue脚手架创建出来的项目。

    然后创建vue文件。代码如下所示:

    <template>
      <div class="media_test">
        <div id="box1">
          <p>这是box1</p>
        </div>
        <div id="box2">
          <p>这是box2</p>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: "Test"
    }
    </script>
    
    <style scoped lang="scss">
    #box1 {
      box-sizing: border-box;
      width: 50%;
      height: 300px;
      display: inline-block;
      background-color: coral;
      color: white;
      padding: 10px;
    }
    
    #box2 {
      box-sizing: border-box;
      width: 50%;
      height: 300px;
      display: inline-block;
      background-color: mediumpurple;
      color: white;
      padding: 10px;
    }
    </style>
    
    

    运行结果如图:

    关于Sass响应式布局的使用方式(media媒体查询)

    如果我们想要在1000px以下的时候,让两个div上下叠在一起的话,用媒体查询我们需要这么写:

    @media screen and (min-width: 1000px){
      #box1 {
        box-sizing: border-box;
        width: 50%;
        height: 300px;
        display: inline-block;
        background-color: coral;
        color: white;
        padding: 10px;
      }
      #box2 {
        box-sizing: border-box;
        width: 50%;
        height: 300px;
        display: inline-block;
        background-color: mediumpurple;
        color: white;
        padding: 10px;
      }
    }
    @media screen and (min-width: 375px) and (max-width: 999px){
      #box1 {
        box-sizing: border-box;
        width: 100%;
        height: 150px;
        background-color: coral;
        color: white;
        padding: 10px;
        font-size: 14px;
      }
      #box2 {
        box-sizing: border-box;
        width: 100%;
        height: 150px;
        background-color: mediumpurple;
        color: white;
        padding: 10px;
        font-size: 14px;
      }
    }
    

    1000px下的运行结果如图:

    关于Sass响应式布局的使用方式(media媒体查询)

    将公共代码抽取进@mixin中

    但是,很显然这么写的话过于繁琐。那我们可以将这些公共代码抽取出来作为@mixin函数,然后传入参数,再使用参数作为判断条件选择使用不同的css代码;

    代码改造如下:

    @mixin boxStyle ( $screenWidth ){
      #box1 {
        @if ( $screenWidth == 1600) {
          display: inline-block;
          width: 50%;
          height: 300px;
          font-size: 16px;
        }@else if( $screenWidth == 1000 ) {
          width: 100%;
          height: 150px;
          font-size: 14px;
        }
        box-sizing: border-box;
        background-color: coral;
        color: white;
        padding: 10px;
      }
      #box2 {
        @if ( $screenWidth == 1600) {
          display: inline-block;
          width: 50%;
          height: 300px;
          font-size: 16px;
        }@else if( $screenWidth == 1000 ) {
          width: 100%;
          height: 150px;
          font-size: 14px;
        }
        box-sizing: border-box;
        background-color: mediumpurple;
        color: white;
        padding: 10px;
      }
    }
    
    @media screen and (min-width: 1000px){
      @include boxStyle( 1600 );
    }
    @media screen and (min-width: 375px) and (max-width: 999px){
      @include boxStyle( 1000 );
    }
    

    这个代码的话还可以再继续拆分,抽取公共代码,但是就太繁琐了,这里就没必要演示了。

    接下来还有第二种方法:

    sass中的@media嵌套

    在sass中,@media标签经过了处理,既可以像普通的media标签一样使用。还具有sass赋予的独特的能力——可以在css规则中嵌套。具体的使用方法可以参见官网: sass中的@media。

    还是上面的例子,我们可以这么写:

    #box1 {
      @media screen and (min-width: 1000px){
        display: inline-block;
        width: 50%;
        height: 300px;
        font-size: 16px;
      }
      @media screen and (min-width: 375px) and (max-width: 999px){
        width: 100%;
        height: 150px;
        font-size: 14px;
      }
      box-sizing: border-box;
      background-color: coral;
      color: white;
      padding: 10px;
    }
    #box2 {
      @media screen and (min-width: 1000px){
        display: inline-block;
        width: 50%;
        height: 300px;
        font-size: 16px;
      }
      @media screen and (min-width: 375px) and (max-width: 999px){
        width: 100%;
        height: 150px;
        font-size: 14px;
      }
      box-sizing: border-box;
      background-color: mediumpurple;
      color: white;
      padding: 10px;
    }
    

    运行结果的话和之前是一模一样的。

    结语

    这两种方法都可以让我们最大程度的精简代码。但是具体孰优孰劣我暂时还没有定夺。如果你觉得哪种方式更好,或者有什么建议的话可以在评论区告诉我。最后,无论是sass,还是@media标签,还是响应式布局。都有太多需要学习的地方了。希望自己以后懂的东西越来越多吧


    起源地下载网 » 关于Sass响应式布局的使用方式(media媒体查询)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元