移动web一 屏幕适配

2023-05-03  本文已影响0人  酒茶白开水

代码下载

相对单位

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 and|not|only (media feature) (
    CSS-Code;
}

注意点:

<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 文件。

语法规范:

<link rel="stylesheet" media="mediatype and|notlonly (media feature)" href="mystylesheet.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(作用域)等概念。

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

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

基于nodejs在线安装Less:

Less 编译

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

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

基本使用

@变量名: 值;

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

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

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

@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 屏幕适配

屏幕适配的目的是:

具体做法:

    <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 适配方案技术主流方案:

两种方案现在都存在,相对来说方案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 方案实现的苏宁首页案例

上一篇 下一篇

猜你喜欢

热点阅读