移动web一 屏幕适配

代码下载

相对单位

em:相对于父元素字体大小

rem:相对于html元素字体大小(优点是通过修改html字体大小使页面元素大小得到整体控制)

<body>
    <div>
        <p></p>
    </div>
</body>

    <style>
        html {
            font-size: 14px;
        }
        div {
            background-color: red;
            font-size: 12px;
            /* 140px */
            width: 10rem;
            /* 140px */
            height: 10rem;
        }
        p {
            background-color: cyan;
            /* 140px */
            width: 10rem;
            /* 120px */
            height: 10em;
        }
    </style>

媒体查询

媒体查询(Media Query)是CSS3新语法。

使用 @media 查询,可以针对不同的媒体类型定义不同的样式,可以针对不同的屏幕尺寸设置不同的样式

当重置浏览器大小的过程中,页面也会根据浏览器的克度和高度重新渲染页面,目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询。

语法

  • 用 @media 开头 注意@符号
  • mediatype 媒体类型(all 用于所有设备,print 用于打印机或打印预览,screen 用于电脑、平板、手机等设备)
  • 关键字 and not only(and 可以将多个媒体特性连接到一起,相当于“且”的意思,not 排除某个媒体类型,相当于“非”。的意思,可以省路,only 指定某个特定的媒体类型,可以省路。)
  • media feature 媒体特性,必须由小括号包含(width 输出设备页面可贝区域的竞度,min-width 翰出设备页面最小可见区域宽度,max-width 定义输出设备中页面最大可见区域竞度)
@media mediatype and|not|only (media feature) (
    CSS-Code;
}

注意点:

  • 为了防止混乱 ,媒体查询我们要按照从小到大或者从大到小的顺序来写
  • 有最大值 max-width和最小值min-width都是包含等于的
  • 后面的档位会覆盖与前面的档位冲突的部分
<body>
    <div class="query">
        <ul>
            <li>屏幕宽度小于600为红色</li>
            <li>屏幕宽度600到700为蓝色</li>
            <li>屏幕宽度大于800为绿色</li>
        </ul>
    </div>
</body>

    <style>
        @media screen and (max-width: 600px) {
            div {
                background-color: red;
            }
        }
        @media screen and (min-width: 600px) {
            div {
                background-color: green;
            }
        }
        @media screen and (min-width: 800px) {
            div {
                background-color: blue;
            }
        }
    </style>

使用 媒体查询 和 rem 可以实现元素动态变化:

    <style>
        @media screen and (max-width: 600px) {
            html {
                font-size: 50px;
            }
        }
        @media screen and (min-width: 600px) {
            html {
                font-size: 100px;
            }
        }
        * {
            margin: 0;
            padding: 0;
        }
        .top {
            text-align: center;
            font-size: .5rem;
            background-color: cyan;
        }
    </style>
<body>
    <div class="top">购物车</div>
</body>

引入资源

当样式比较繁多的时候,可以针对不同的媒体使用不同 stylesheets(样式表)。原理,就是直接在link中判断设备的尺寸,然后引用不同的 css 文件。

语法规范:

针对小于640的屏幕引入不同的 css 文件:

    <link rel="stylesheet" href="css/style640.css" media="screen and (max-width: 640px)">
    <link rel="stylesheet" href="css/styleGreaterthan640.css" media="screen and (min-width: 640px)">

Less

CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。

  • CSS 需要书写大量看似没有逻辑的代码,CSS冗余度是比较高的。
  • 不方便维护及扩展,不利于复用。
  • CSS 没有很好的计算能力
  • 非前端开发工程师来讲,往往会因为缺少CSS编写经验而很难写出组织良好且易于维护的CSS代码项目。

Less (Leaner Style Sheets 的缩写)是一门CSS扩展语言,也成为CSS预处理器。做为 CSS 的一种形式的扩展,它并没有减少 CSS的功能,而是在现有的CSS语法上,为CSS加入程序式语言的特性。

它在CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了CSS 的编写,并且降低了CSS 的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情。详情参考 less中文网

基于nodejs在线安装Less:

  • 使用cmd命令 “npm install-g less"
  • 检查是否安装成功,使用cmd命令 “lessc-v" 查看版本即可

Less 编译

本质上,Less包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最終会通过解析器,编译生成对应的CSS 文件。所以,需要把less文件,编泽生成为css文件,这样html页面才能使用。

Easy LESS 插件用来把less文件编译为css文件,安装完毕插件,重新加载 vscode。只要保存一下Less文件,会自动生成CSS文件。

基本使用

@变量名: 值;

变量命名规范:1、必须有@为前缀,2、不能包含特殊字符,3、不能以数字开头,4、大小写敏感。

less 可以嵌套书写,如果遇见(交集、伪类、伪元素选择器)。内层选择器的前面没有 &符号,则它被解析为父选择器的后代;如果有 & 符号,它就被解析为父元素自身或父元素的伪类。

任何数字、颜色或者变量都可以参与运算。就是Less提供了加(+)、减(-)、乘(*)、除(/) 算术运算。

  • 运算符左右用空格隔开 1px + 5,除法运算一定要加括号
  • 对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位
  • 如果两个值之间只有一个值有单位,则运算结果就取该单位
@mainColor: #666666 + #333333;
@textColor: red;
div.main {
    background-color: @mainColor;
    width: 100px * 2;
    height: (100px / 2) + 100;
    .text {
        color: @textColor;
    }
    > .text {
        font-size: 40px - 1rem;
    }
}

<!--对应的css-->
div.main {
  background-color: #999999;
  width: 200px;
  height: 150px;
}
div.main .text {
  color: red;
}
div.main > .text {
  font-size: 39px;
}

rem 屏幕适配

屏幕适配的目的是:

  • 让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。
  • 使用媒体查询根据不同设备按比例设置htmnl的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化元素尺寸也会发生变化,从而达到等比缩放的适配。

具体做法:

  • 屏幕宽度度/划分的份数(份数不一定,一般根据设计稿定一个易于计算的数) 就是html font-size 的大小
  • 最后的公式:页面元素的rem值 = 页面元素值(px)/(屏幕宽度 /划分的份数)
  • 或者:页面元素的rem值 = 页面元素值( px)/ html font-size 字体大小
    <style>
        @media screen and (max-width: 375px) {
            html {
                /* 根据iPhone6 375 的设计稿将屏幕分为15份 */
                font-size: 25px;
            }
        }
        /* 12 */
        @media screen and (min-width: 390px) {
            html {
                /* 根据比例缩放 */
                font-size: 26px;
            }
        }
        /* Xr */
        @media screen and (min-width: 414px) {
            html {
                /* 根据比例缩放 */
                font-size: 27.6px;
            }
        }
        div {
            width: 4rem;
            height: 4rem;
            font-size: 1rem;
            background-color: cyan;
        }
        
</head>
<body>
    <div>标题</div>
</body>
</html>

rem 适配方案技术主流方案:

  • less + 媒体查询 + rem
  • flexible.js + rem

两种方案现在都存在,相对来说方案2更简单,比较推荐方案2。

这是 less + 媒体查询 + rem 方案实现的苏宁首页案例

flexible.js

手机淘宝团队出的简洁高效移动端适配库,再也不需要写不同屏幕的媒体查询,因为里面js做了处理。

它的原理是把当前设备划分为10等份(比如屏幕750px,那么font-size就是75),不同设备下保持比例是一致的。

我们要做的就是确定页面元素rem值,剩余的让flexible.js来去算,实际的px值就是(rem值*屏幕宽/10)。

flexible.js github地址:https://github.com/amfe/lib-flexible

flexible.js + rem 适配

首先需要引入 flexible.js 文件

    <script src="js/index.js"></script>

由于设计稿都是px单位,在实际开发过程中就需要将px单位转rem,这种计算非常繁琐且不友好,VSCode 插件 cssrem 可以将 px 转换 rem。

默认 cssrem 插件将16px转换为1rem,这在绝大部分情况下是不能满足开发要求的(比如按照750的设计稿开发,由于flexible.js将屏幕分成10等分,也就是说1rem等于屏幕的十分之一,那么就是75px)。此时在设置中搜索 cssrem 找到相应的修改项,改为75就可以了。这样一来设置rem值都会按照750的设计稿根据屏幕宽度进行缩放适配。

如果有一些特殊情况不需要完全按比例进行缩放,那么依然可以通过媒体查询来固定rem值,比如超过750的屏幕都按750进行处理,那么就可以通过如下代码固定屏幕超过750时,1rem都等于75px:

@media screen and (min-width: 750px) {
    html {
        font-size: 75px!important;
    }
}

注意:由于 flexible.js 会改为屏幕的十分之一,所以需要使用 !important,将权重值提高,否则不起作用。

这是 flexible.js + rem 方案实现的苏宁首页案例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值