移动web一 屏幕适配

news/2024/10/31 5:36:55/

代码下载

相对单位

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 方案实现的苏宁首页案例。


http://www.ppmy.cn/news/60327.html

相关文章

最佳Midjourney动漫相关风格提示词,值得收藏

先补充概念&#xff0c;后面慢慢补图片咯 动漫艺术家 下面是一些最伟大的艺术家的名单 Hayao Miyazaki, Co-founder of Studio Ghibli&#xff08;宫崎骏&#xff0c;吉卜力工作室的共同创始人&#xff09;Eiichiro Oda, One Piece&#xff08;织田荣一郎&#xff0c;《海贼…

shared_ptr 的线程安全性

多线程环境下&#xff0c;调用不同的 shared_ptr 实例的成员函数是不需要额外的同步手段的&#xff0c;即使这些 shared_ptr 管理的是相同的对象。 多线程对于同一个 shared_ptr 实例的读操作&#xff08;访问&#xff09;可以保证线程安全&#xff1b;但对于同一个 shared_ptr…

用@Value注解为bean的属性赋值

1.Value注解 Value注解的源码&#xff0c;如下所示 Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Value {String value(); }从Value注解的源码中…

尚品汇api(后台)接口文档

1.1 服务器地址 开发服务器 http://gmall-h5-api.atguigu.cn&#xff08;新的&#xff09; 1.2 公共请求参数 每个接口需要的Header参数值&#xff08;登录接口不需要&#xff09;&#xff1a; 参数名称 类型 是否必选 描述 token String Y 登录的token user…

数据存储系统概要

可靠、可扩展与可维护性 现在有很多都属于数据密集型&#xff0c;而不是计算密集型。对于这些类型应用&#xff0c;CPU的处理能力往往不是第一限制性因素&#xff0c;关键在于数据量、数据的复杂度及数据的快速多边形。 数据密集型应用模块&#xff1a; 数据库&#xff1a;存…

GPT详细安装教程-GPT软件国内也能使用

GPT (Generative Pre-trained Transformer) 是一种基于 Transformer 模型的自然语言处理模型&#xff0c;由 OpenAI 提出&#xff0c;可以应用于各种任务&#xff0c;如对话系统、文本生成、机器翻译等。GPT-3 是目前最大的语言模型之一&#xff0c;其预训练参数超过了 13 亿个…

电脑系统怎么选?Win?MacOS?Linux?

马上要学编程了&#xff0c;我们要学什么操作系统呢&#xff1f;是MacOS&#xff0c;还是Windows&#xff0c;或者是Linux或者其他&#xff01;那我们今天就来说说MacOS系统和Windows系统的优缺点&#xff0c;也介绍一下其他的系统。让你心里有底&#xff01; 1、Windows 首先当…

【iOS KVO(下) KVO的内部结构和源码】

前言 学习KVO的过程&#xff0c;我分为了KVO的实现过程分析和内部结构的学习&#xff0c;学习了实现过程&#xff0c;接下来看KVO是通过何种内部结构实现如此通知&#x1f4e2;和监听。 1 KVO的存储结构 KVO的实现过程离不开合理的存储结构&#xff0c;用到了如下几个类 GS…