移动端适配及sass讲解


vue适配链接

方法一vw

rem是相对长度单位。是根元素(html)的font-size值的的一个css单位(适配单位rem)。

如:一个页面html中设置了font-size的值,使用rem即为这个已设置值的倍数。
eg: html设置font-size: 20px; 可知1rem=20px,使用时即可计算转化为rem的倍数。

<style>
    html{
        font-size: 20px;
    }
</style>
<body>
    <div style="font-size: 1rem;">国破山河在城春草木深</div>
<div style="font-size: 2rem;">感时花溅泪恨别鸟惊心</div>
</body>

在这里插入图片描述

rem:相对单位 root em。 参考值为:HTML根标签的font-size的值。

rem布局的原理:
动态修改html根标签中的font-size值。
实现方式:
1.通过js
2.通过vw。

百分比布局缺点:
1.计算百分数不方便。
2.多层嵌套时使用不方便。

vw/vh 相对屏幕

vw:1vw = 屏幕宽度的百分之一。
vh: 1vh = 屏幕高度的百分之一。

区别:
百分比参照的是父盒子
vw/vh 参照的是屏幕。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html{
            font-size: 26.67vw;
        }
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            margin: 0 auto;
            width: 0.4rem;
            height:0.6rem; 
            background-color:blue;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
    
</body>
</html>

在这里插入图片描述
在这里插入图片描述

下载插件,需要改变的px值,alt+z 就能转换为rem

方法二媒体查询实现

进行适配就是根据不同屏幕大小设定不同的font-size值

						 屏幕宽                     字体大小
                假设: 750px  ====> 根元素的字体大小为: 100px      1rem = 750 * 100 / 750 px
                开发: 375px =====》 推算在375px的屏幕上根元素的字体大小:1rem = 375 * 100 / 750 = 50px
                开发: 414px =====>  html Fontsize = (414 * 100 / 750) px 
                                                 也就是414/7.5 =55.2px  

html.style.fontSize = wd * 100 / 750 + ‘px’;

  <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0 "> 原本模样 -->
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1,
  user-scalable=no">
    <!-- width=device-width :表示宽度是设备屏幕的宽度

    	initial-scale=1.0:表示初始的缩放比例

		minimum-scale=0.5:表示最小的缩放比例

		maximum-scale=2.0:表示最大的缩放比例

		user-scalable=yes:表示用户是否可以调整缩放比例 -->

这是一个封装好的方法,可以直接用

(function () {
    function resizeEvent() {
        // 获取根元素html
        let html = document.documentElement;
        //  获取宽度
        let wd = html.clientWidth;
        // let wd = html.getBoundingClientRect().width
        //  进行判断 
        if (wd > 750) {
            wd = 750
        }
        //  根据不同的屏幕,设置根元素的字体大小
        // html.style.fontSize = wd * 100 / 750 + 'px';
        html.style.fontSize = wd / 7.5 + 'px';
    }
    resizeEvent();
    //  性能考虑
    let time = null;
    //  监听事件 
    window.addEventListener('resize', function () {
        time && clearTimeout(time)
        time = setTimeout(resizeEvent, 300)
    })
})()//括号是自执行函数的意思

方法三js实现(用的少)

也是动态修改html中font-size的值来实现
把视觉稿分成100份来看待(为了以后兼容vh,vw单位)。每一份被称为一个单位a。同时,1rem单位认定为10a。
拿750的视觉稿举例:
在这里插入图片描述

        1a = 7.5px
        1rem = 75px
        因此,对于视觉稿上的元素的尺寸换算,只需要原始px值除以rem基准px值即可。
        例如240px * 120px的元素,最后转换为240/75     120/75
                                  是  3.2rem * 1.6rem。

这是需要引入的js文件

(function flexible (window, document) {
    var docEl = document.documentElement
    var dpr = window.devicePixelRatio || 1
  
    // adjust body font size
    function setBodyFontSize () {
      if (document.body) {
        document.body.style.fontSize = (12 * dpr) + 'px'
      }
      else {
        document.addEventListener('DOMContentLoaded', setBodyFontSize)
      }
    }
    setBodyFontSize();
  
    // set 1rem = viewWidth / 10
    function setRemUnit () {
      var rem = docEl.clientWidth / 10
      docEl.style.fontSize = rem + 'px'
    }
  
    setRemUnit()
  
    // reset rem unit on page resize
    window.addEventListener('resize', setRemUnit)
    window.addEventListener('pageshow', function (e) {
      if (e.persisted) {
        setRemUnit()
      }
    })
  
    // detect 0.5px supports
    if (dpr >= 2) {
      var fakeBody = document.createElement('body')
      var testElement = document.createElement('div')
      testElement.style.border = '.5px solid transparent'
      fakeBody.appendChild(testElement)
      docEl.appendChild(fakeBody)
      if (testElement.offsetHeight === 1) {
        docEl.classList.add('hairlines')
      }
      docEl.removeChild(fakeBody)
    }
  }(window, document))

sass讲解

css一些问题:
1.css需要书写大量冗余的代码。
2.不方便维护。
sass:作为css的一种扩展语言。它没有减少css的功能,而是在css的基础上引入了一些css原本没有的功能(变量,Mixin,运算,函数,嵌套)。

使用sass优点:
能让咱们写更少的代码,来实现更多的功能。

步骤

sass是一个插件,在vscode中下载就能使用(创建sass后缀的不是sass,而是scss)
在这里插入图片描述在这里插入图片描述

引入时优先引用压缩后的css(是选择姓引用,原来的文件不能删,只是不去引用)

 <link rel="stylesheet" href="./css/01.min.css">

1.变量
格式:以$符号开头,跟变量名即可。

   先定义   $bc-color:red;

首先定义一个变量。 变量名:变量值。
如果变量嵌套在字符串中,则必须写在#{}里面。

 $m-r:right;
 margin-#{$m-r}: 40px;
 等同于:                             margin-right: 40px;

2.嵌套
在css中直接使用标签嵌套。
有些时候需要使用父选择器,这个时候则使用 & 占位符。

属性嵌套:复合属性才可以使用。

这里表示左边框
  border: {
        style:solid;
        left:{
            width: 4px;
            color: #888;
              }
};

3.注释
单行注释:// 不会保留到编译后的css文件中。
多行注释:/* / 会保留到编译后的css文件,压缩文件则没有。
重要注释:/
! */ 会保留到编译后的css文件,压缩文件也会保留,一般用于版权声明。


属性嵌套必须是
复合属性

$bc-color:red;//这是定义的一个变量方法
$m-r:right;
*sass中样式*
 .container{
    width: 800px;
    height: 300px;
    background-color: $bc-color;
.button-group{
                   button{
            font-size: 24px;
         
            color: #fff;    
            padding: 10px 20px;
            margin-#{$m-r}: 40px;   
                         }
               }   
           }
*结构*
<body>     
    <div class="container">
        <div class="button-group">
            <button>开始</button>
            <button>结束</button>
        </div>      
    </div>
</body>

上面的sass的引用在css样式中就是变成了如下这样

 background-color: red;
 margin-right: 40px;

继承及综合案例详解

sass部分

//----------------------------------------
//定义一个混合。相当于是一个方法
@mixin boxStyle($bc,$fc:red) {
    background-color: $bc;//没有定义颜色只是定义了 $bc是一个背景颜色属性
    p{
        color: $fc;//上面定义了红色
     }
}
//----------------------------------------

.box {
    width: 200px;
    height: 200px;
    @include boxStyle(yellow );// 这里是引用上面的方法,并赋值为黄色
    p{
        text-align: center;
        color: green;//虽低不着泥 本应该是红色,这里被绿色覆盖
    }
}
$ye:yellow;//这是定义了变量,为黄色
$m-r:top;
.box2{
  //@extend 继承-可以让一个选择器继承另一个选择器的所有样式。
    @extend .box;
    color: $ye;//这里使用了上面的变量
    margin-#{$m-r}: 40px;
  // 这里是引用上面的方法
   @include boxStyle(blue);//背景为蓝色,字体为红色(红色是上面的方法有的)
}

// .box ,.box2{}这样写是并集,sass里面的选择器和css一样

在这里插入图片描述

html

 <div class="box">雪压枝头低
            <p>
                虽低不着泥
            </p>
        </div>
        <div class="box2">
            一招红日出
            <p>依旧与天齐</p>
        </div>

计算

sass中样式

div{
    padding: 2px * 4;
    margin: 20px + 2px;
    font-size: 16px - 2;
    // 除法必须加小括号
    border: (10px / 2) solid;
    // 取绝对值
    margin: abs(-10px);
    // 四舍五入
    margin: round(3.6px);
    // 向上取整
    margin: ceil(3.2px);
    // 向下取整
    margin: floor(3.999px);
    width: percentage(650px/1000px);
    
}

css中效果

div {
  padding: 8px;
  margin: 22px;
  font-size: 14px;
  border: 5px solid;
  margin: 10px;
  margin: 4px;
  margin: 4px;
  margin: 3px;
  width: 65%;
}

颜色

// 提供了两个颜色函数。
   @mixin d-center {
    margin: 0 auto;
    margin-top: 200px;
}
div{
    width: 300px;
    height: 300px;
       改变颜色的深浅
                           使变亮
     background-color: lighten(#cc3,30%);
		        使变暗
    background-color: darken(#cc3,40%);
    @include d-center();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值