移动端适配方案有哪几种?

article/2025/9/18 19:41:36

虽然我们课程明确的区分各种移动端适配方案,但依然有很多同学搞不清楚移动端等比适配和响应式,这里对移动端主流适配方案给大家做一个分析。

移动端适配是指同一个页面可以在不同的移动端设备上都有合理的布局。主流的实现方案有两种:

  1. 响应式布局,通过@media实现一套html配合多套css实现适配;
  2. 通过rem或者vw,vh等实现不同的设备俺照相同的比例适配;

例子

这里给大家列举几个例子:

  1. 小米移动端商城,很明显是采用了rem等比适配的方案。

        2. 不凡官网,采用了@media媒体监听实现适配。

        3.  王者荣耀,同时采用了媒体监听和rem等比适配。

 4. vh,vm 暂时没找到。

实现原理

首先需要了解一个概念:viewport 视口(mdn)。如果要实现浏览器适配移动端,首先我们要统一标准视口。在html的head中添加以下代码:

<meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no">

第一种:rem实现原理

rem是一个倍数单位,它是基于html的font-size的倍数。只要我们在不同的设备上设置一个合适的初始值,当设备发生变化font-size就会自动等比适配大小,从而在不同的设备上表现统一。

比如说:移动端设计稿一般会以750px进行交付,而手机实际像素可能是375px。那么一般我们会以设备宽度的1/10作为初试html的font-size大小,当然这个值是动态的,在不同设备上得到的值不同。

比如有的设备宽度是375px,那么html初始font-size就是37.5px,如果设备宽度是300px,那么font-size就是30px。 因为内容都是rem基于font-size的倍数,所以不同宽度的设备上都是等比显示的。

注意:这个font-size基数到底是不是设备的1/10是没有统一论调的,你可以用1/n任意定义。关键是理解rem适配的原理是元素等比缩放

参照具体代码:

<!DOCTYPE html>
<!-- 0. 注意:font-size是动态设置,宽度为屏幕1/10 -->
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 1. 标准视口,禁止缩放,初始缩放为1 --><meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no"><title>移动视口</title><style>*{margin: 0;padding: 0;}.box{/* 4. 如果原稿宽度是750px,而且在750宽度的设备上开发。则375px应该还是375px。 基础font-size为75px,则这里换算成rem应该是5rem *//*想必你不一定能理解。试想如果在375宽度的设备上开发。这里的5rem是不是应该为37.5的5倍?37.5*5=187.5刚好为375的1/2呢?*/width: 5rem;height: 5rem;background-color: green;}
​</style>
</head>
<body><!-- 2. 假设一个750px宽度的设计稿,给了一个375px的元素块。 --><!-- 我们的实现应该是一个盒子在不同宽度的设备上都应该表现一致(占比屏幕宽度的1/2)。因为屏幕宽度不一定,通过px显然无法实现,那么我们就需要使用rem来做等比缩放。 --><!-- 一个简单的例子: --><div class="box"></div><script>// 3. 这里通过js监听屏幕尺寸 设置html的font-sizefunction setView(){document.documentElement.style.fontSize = screen.width/10 + 'px';} setView();// 这里是为什么?你自己想一想window.onresize = setView;
​</script>
</body>
</html>

至于px如何转换为rem,在vscode中可以搜索相关插件。

第二种: 媒体监听

媒体监听通过@media实现。注意:媒体监听不是等比缩放!!!是同一块内容在不同设备上有合理的表现。

比如在PC端一行能同时展示4个元素块,而在移动端只能一行展示1个或者2个元素块(要不看不清)。

那么就可以通过监听媒体宽度,给元素设置不同的宽度,从而有合理的表现。

代码参考:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 1. 标准视口,禁止缩放,初始缩放为1 --><meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no"><title>媒体监听适配</title><style>*{margin: 0;padding: 0;}ul{list-style: none;}.header{width: 100%;height: 100px;background-color: pink;}.header .header-c{width: 1200px;height: 100px;background-color: green;margin: 0 auto;}.header .nav{/* width: xx */height: 100%;}.header .nav .nav-item{float: left;width: 100px;height: 100%;line-height: 100px;text-align: center;cursor: pointer;}/* 3. 针对适配的设备重新写一套样式 */@media screen and (max-width: 750px){.header{position: relative;height: 40px;}.header .header-c{width: 100%;}.header .nav{position: absolute;width: 100%;left: 0;top: 40px;}.header .nav .nav-item{float: none;width: 100%;height: 40px;background-color: pink;border-bottom: 1px solid gray;line-height: 40px;}}</style>
</head>
<body><!-- 2. 要明确媒体监听实现的不是等比缩放!!!而是同一个内容在不同设备上都有合理的表现。 --><!-- 比如一个导航 --><div class="header"><div class="header-c"><ul class="nav"><li class="nav-item">首页</li><li class="nav-item">分类</li><li class="nav-item">发现</li><li class="nav-item">我的</li></ul></div></div>
</body>
</html>

第三种: vw/vh方案

vw 是相对单位,1vw 表示屏幕宽度的 1%。需要缩放的元素采用vw,不需要的采用px。

具体实现方法与rem类似,至于转换问题也可以参考rem的插件形式。

各种方案对比

rem方案:

  • 原理不好理解^_^
  • 从px到rem的转换需要使用工具
  • 灵活可控,几乎完美复刻设计稿
  • 可能大量出现小数点,由于换算有些许误差(极小)
  • 适合具有完全移动端设计稿的项目

media媒体监听方案:

  • 没有学习成本
  • 如何适配需要重新定义,可能设计稿都不会体现
  • 复杂的组件很难有完美的呈现
  • 适合只有PC端设计稿,又需要兼容移动端的需求

综合方案:

  • 可以同时使用media和rem
  • 实现更大的自由度和更完美的呈现
  • 实现复杂,颗粒度不好把控

这里总结了两种常用的移动端适配方案。其实后来的微信小程序css单位rpx,换算方法为1px=2rpx,应该和rem的适配方案原理大致相同。

附件

代码仓库: https://gitee.com/bufanxy/learnjs-troublemaker

声明:不凡君原创不易,转载请说明出处。


http://chatgpt.dhexx.cn/article/Frl7uLa1.shtml

相关文章

solr简介和使用

一、搜索功能的流行方案 由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择: 1、基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。 2、调用Google、Baidu的…

solr 安装和使用

Solr是基于ApacheLucene构建的流行、快速、开源的企业搜索平台 Solr具有高度可靠性、可扩展性和容错性&#xff0c;提供分布式索引、复制和负载平衡查询、自动故障切换和恢复、集中配置等功能。Solr为许多世界上最大的互联网站点提供搜索和导航功能 环境准备 linux centos7 ja…

什么是Solr,它能为我们解决什么问题,怎么用?

一. 什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某宝或者某东,像这样一搜,就能搜到很多东西,你知道你看到的这些数据都来自哪儿吗?百度一下你就知道!这些数据来自哪儿吗?等你了解…

solr实现原理

solr那是我1年前使用到的一个搜索引擎&#xff0c;由于当初对于配置了相应了&#xff0c;但是今天突然面试问到了&#xff0c;哎&#xff0c;太久了&#xff0c;真的忘记了&#xff0c;今天特地写一篇博客记下来 solr是一个独立的企业级搜索应用服务器&#xff0c;它对外t提供…

solr的使用详解

一、Solr简介 由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求&#xff0c;目前在实现搜索引擎的方案上有几种方案可供选择&#xff1a; 基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大&#xff0c;不采用。 调用Go…

solr基础理解和功能分析

一、solr概述 Solr是一个开源搜索平台&#xff0c;用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。Solr是一个可扩展的&#xff0c;可部署&#xff0c;搜索/存储引擎&#xff0c;优化搜索大量以文本为中心的数据。 二、solr管理界面功能 1.Logging 展示Solr的日…

Solr基本概念

Solr是一种开放源码的、基于Lucene的搜索服务器。它易于安装和配置&#xff0c;而且附带了一个基于HTTP 的管理界面。 官网&#xff1a; http://lucene.apache.org/solr/ Solr全文检索基本原理&#xff1a; http://www.importnew.com/12707.html 相关概念&#xff1a; Core: …

Solr 原理、API 使用

日萌社 人工智能AI&#xff1a;Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战&#xff08;不定时更新&#xff09; 搜索引擎&#xff1a;Elasticsearch、Solr、Lucene ELK中的ES&#xff1a;ElasticsearchSolrCloud 的搭建、使用Solr 高亮显示Spring Data Solr …

Solr的工作原理

1. Solr的简介 ​ Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到…

Solr搜索引擎原理

本文转载至&#xff1a;http://www.importnew.com/12707.html 场景&#xff1a;小时候我们都使用过新华字典&#xff0c;妈妈叫你翻开第38页&#xff0c;找到“坑爹”所在的位置&#xff0c;此时你会怎么查呢&#xff1f;毫无疑问&#xff0c;你的眼睛会从38页的第一个字开始从…

【Solr启动原理】

Solr集群启动&#xff0c;都做了哪些事情&#xff1f;做了很多事&#xff0c;over。 启动流程大致如下&#xff1a; 1. 启动入口&#xff1a;web.xml。Solr归根结底是个Web服务&#xff0c;必须部署到jetty或者tomcat容器上。 2. SolrRequestFilter过滤器的实现类是org.apache…

Solr的工作原理以及如何管理索引库

1. Solr的简介 ​ Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到…

solr底层原理

一、总论 根据http://lucene.apache.org/java/docs/index.html定义&#xff1a; Lucene是一个高效的&#xff0c;基于Java的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中…

全文搜索引擎Solr原理和实战教程

Solr简介 1.Solr是什么? Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。Solr是一个高性能,采用Java开发, 基于Lucene的全文搜索服务…

solr全文检索实现原理

solr那是我1年前使用到的一个搜索引擎&#xff0c;由于当初对于配置了相应了&#xff0c;但是今天突然面试问到了&#xff0c;哎&#xff0c;太久了&#xff0c;真的忘记了&#xff0c;今天特地写一篇博客记下来 solr是一个独立的企业级搜索应用服务器&#xff0c;它对外t提供…

Solr工作原理

Solr简介 Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到XML格式…

Solr的原理及使用

1.Solr的简介 Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到XML格…

Solr原理剖析

一、简介 Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展&#xff0c;提供了比Lucene更为丰富的查询语言&#xff0c;并实现了强大的全文检索功能、高亮显示、动态集群&#xff0c;具有高度的可扩展性。同时从Solr 4.0版本开始&#xff0c;支持SolrCl…

solr的基本原理

solr介绍&#xff1a; solr是一个全局检索引擎&#xff0c;能够快速地从大量的文本数据中选出你所需要的数据&#xff0c;而你只需要提供相应的关键词进行检索。solr的高效率查询靠的是底层强大的索引库&#xff0c;所以solr最关键的技术也是其底层的索引设计。solr工作的时候可…

Solr的工作原理(最直白的解释,简单易懂)懂?

Solr 什么是Solr Solr是一个开源搜索平台&#xff0c;用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的&#xff0c;快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂&#xff0c;可提供高性能。 为了在CNET网络的公司网站上添加搜索功能&…