【面试】移动端的自适应布局如何实现?

2023-10-31

1、百分比布局:

使用百分比布局实现移动端的自适应布局,可以让页面元素随设备屏幕的大小自动适应缩放,从而实现不同设备的自适应。下面是具体的实现步骤:

1.1

在CSS中,使用百分比作为元素的宽高、边距等属性值。
例如,如果设计稿中某个元素的宽度为375px,那么在样式中应该设置其宽度为100%(相对于父元素),再设置padding、margin等。

.example {
  width: 100%; /* 相对于父元素 */
  padding: 10% 5%; /* 相对于元素宽度 */
  margin: 5% auto; /* 相对于元素宽度 */
  box-sizing: border-box; /* 让padding不影响元素实际宽度 */
}

1.2

在HTML中,设置viewport的宽度为设备宽度,并设置initial-scale为1,表示不缩放。这样,元素的宽度就会根据设备宽度自动缩放。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

1.3

在响应式设计中,可以使用媒体查询来针对不同的设备尺寸设置不同的样式。例如,当设备宽度小于等于768px时,设置某个元素的宽度为80%。

@media (max-width: 768px) {
  .example {
    width: 80%; /* 相对于父元素 */
  }
}

通过以上步骤,就可以使用百分比布局实现移动端的自适应布局了。不同设备的屏幕大小,页面元素都会自动缩放,保证在任何设备上都能有良好的显示效果。同时,可以通过媒体查询针对不同设备尺寸设置不同的样式,进一步优化移动端的显示效果。

2、rem:

rem单位是相对于根元素html的字体大小来计算,这样可以在不同屏幕尺寸下保持一定比例的大小关系。例如,当html的字体大小为16px时,1rem等于16px。下面是具体的实现步骤:

2.1

在html中设置字体大小为设备宽度的1/10。这里的1/10是可以根据实际情况调整的,根据需求设置即可。

html {
  font-size: calc(100vw / 10); /* 设备宽度的1/10 */
}

2.2

在设置样式时,使用rem作为单位。例如,如果设计稿中某个元素的宽度为375px,那么在样式中应该设置其宽度为23.4375rem(375/16)。

.example {
  width: 23.4375rem; /* 设计稿中为375px */
}

2.3

由于不同设备像素比的存在,需要在head中设置viewport的参数,并使用JS动态改变html的字体大小,以达到适配不同设备的效果。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <script>
    // 获取dpr
    var dpr = window.devicePixelRatio || 1;
    // 计算缩放比例
    var scale = 1 / dpr;
    // 设置viewport
    document.querySelector('meta[name="viewport"]').setAttribute('content', 'width=device-width, initial-scale=' + scale + ', maximum-scale=' + scale + ', user-scalable=no');
    // 动态设置html字体大小
    function setFontSize() {
      var html = document.documentElement;
      var width = html.clientWidth;
      html.style.fontSize = width / 10 + 'px'; /* 设备宽度的1/10 */
    }
    setFontSize();
    window.onresize = function() {
      setFontSize();
    }
  </script>
</head>

3、媒体查询:

使用媒体查询是实现移动端自适应布局的常见方法之一。媒体查询可以根据不同的设备宽度、设备朝向等条件,设置不同的CSS样式,从而实现不同设备上的自适应。下面是具体的实现步骤:

3.1

在CSS中,设置默认样式,并在需要针对不同设备尺寸设置不同样式的位置,使用@media规则来设置媒体查询条件和样式。

/* 默认样式 */
.example {
  width: 100%;
  padding: 20px;
  font-size: 16px;
}

/* 当设备宽度小于等于768px时,设置样式 */
@media (max-width: 768px) {
  .example {
    font-size: 14px;
  }
}

/* 当设备宽度小于等于480px时,设置样式 */
@media (max-width: 480px) {
  .example {
    padding: 10px;
    font-size: 12px;
  }
}

3.2

在HTML中,设置viewport的宽度为设备宽度,并设置initial-scale为1,表示不缩放。这样,页面元素的宽度就会根据设备宽度自动缩放。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

通过以上步骤,就可以使用媒体查询实现移动端的自适应布局了。根据不同的设备宽度、设备朝向等条件,设置不同的CSS样式,让页面在任何设备上都能有良好的显示效果。

4、vh,vw

使用vh、vw实现移动端的自适应布局,可以让页面元素随设备屏幕的大小自动适应缩放,从而实现不同设备的自适应。vh和vw分别是相对于视窗高度和宽度的单位,1vh等于视窗高度的1%,1vw等于视窗宽度的1%。下面是具体的实现步骤:

4.1

在CSS中,使用vh、vw作为元素的宽、高等属性值。例如,设计稿中某个元素的宽度为375px,那么在样式中应该设置其宽度为30vw(375/屏幕宽度 * 100)。

.example {
  width: 30vw; /* 相对于视窗宽度 */
  height: 50vh; /* 相对于视窗高度 */
  margin: 5vh 10vw; /* 相对于视窗宽度和高度 */
}

4.2

在HTML中,设置viewport的宽度为设备宽度,并设置initial-scale为1,表示不缩放。这样,元素的宽度就会根据设备宽度自动缩放。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

4.3

在响应式设计中,可以使用媒体查询来针对不同的设备尺寸设置不同的样式。例如,当设备宽度小于等于768px时,设置某个元素的宽度为50vw。

@media (max-width: 768px) {
  .example {
    width: 50vw; /* 相对于视窗宽度 */
  }
}

通过以上步骤,就可以使用vh、vw实现移动端的自适应布局了。不同设备的屏幕大小,页面元素都会自动缩放,保证在任何设备上都能有良好的显示效果。同时,可以通过媒体查询针对不同设备尺寸设置不同的样式,进一步优化移动端的显示效果。

需要注意的是,在设计移动端自适应布局时,应该考虑到不同屏幕尺寸、分辨率和方向等因素,保证网页在各种设备上都能够有良好的浏览体验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【面试】移动端的自适应布局如何实现? 的相关文章

  • 当缩放元素在缩放之前大于容器时,CSS 变换比例(向下)不会使用 margin 0 auto 将元素居中

    看来 当缩小以前不适合其容器的元素时 margin 0 auto将不再使元素在其父元素中居中 请注意 使用transform origin center center并没有解决这个问题 这是因为自动边距似乎在缩放之前而不是之后应用 我期望后
  • Angular4 - 滚动到锚点

    我正在尝试对同一页面上的锚元素进行简单的滚动 基本上 用户点击 尝试 按钮 它就会滚动到页面下方 ID 为 登录 的区域 现在 它正在与一个基本的id login a href login a 但它正在跳转到该部分 理想情况下 我希望它滚动
  • 如何在我的 html 中使用 Flaticon 中的图标?

    我想给我的网站一些图标 现在我看到很多人使用Flaticon这个网站 我所做的就是在 CSS 中添加这样的内容 Font 1 font face font family Flaticon1 src url flaticon1 eot src
  • 带有右侧固定侧边栏的 Bootstrap 响应式网格

    我想创建一个带有类似引导程序的模板 它尊重网格的响应系统 在图中 导航栏和右侧 包含两个按钮 是粘性的 始终显示在视图上 我的问题是右侧 因为在引导网格系统中 右侧块将被视为单行 而主要内容包含多行 我怎样才能做到这一点 围绕整个 Boot
  • 如何在css3中制作曲线风格的菜单?

    是否可以用css3制作曲线 圆弧样式的菜单 我可以使用canvas或HTML5中的其他东西来实现这一点吗 预先感谢 洛根 不幸的是 我不知道有什么优雅的解决方案 特别是当涉及到菜单项时 但弧线本身应该可以在纯 css 和几个 html 元素
  • 如何翻转 Twitter Bootstrap 的工具提示

    我正在使用 Twitter 的 Bootstrap 来实现工具提示 目前 工具提示显示在链接上方 我希望工具提示出现在链接下方 我该怎么做呢 我正在触发工具提示 它明确指出 底部 但它不想为我工作 tooltip tooltip place
  • 如何在不设置动画的情况下突然更改 CSS 动画中的属性

    这是我试图弄清楚的 但没有使用 51 关键帧作为实现更改的黑客方法transform origin 这里有一个小提琴演示 http jsfiddle net p7pswnpq keyframes spin 0 transform origi
  • CSS 动画自定义属性/变量

    一段时间以来我一直在努力让它发挥作用 关键是内部 div 将具有某种形状 并且可能会不止一个 这就是为什么我使用nth child选择器 这个内部 div 应该显示然后再次隐藏一段时间 问题是 我想在一个动画中为所有 后来的 多个内部 di
  • 响应式2列2行布局

    我一直在试图弄清楚如何创建这个布局 我有一个 2 列布局 左列有 1 行 右侧有 2 行 我试图让它流畅地调整 我遇到的问题是 我希望右侧顶部图像的顶部与左侧图像的顶部对齐 而底部图像的底部与左侧图像的底部保持对齐 我应该使用桌子吗 这是我
  • 在桌面和移动设备上编写 2 列和 3 列的 Flexbox 代码(换行)

    我真的很难弄清楚这个 CSS flexbox 解决方案 基本上有两个问题 一个是 2 列布局 另一个是 3 列布局 2 列 我认为这可能非常简单 3 列 这可能更高级一些 容器类是 嗯 container 而孩子们只是 left right
  • 带缩略图的轮播和 bootstrap v4

    我看到了带有缩略图的轮播演示bootstrap 3 here http jsfiddle net talmand JS6JV 我正在尝试为 bootstrap v4 实现相同的功能 但无法弄清楚如何修复一些 UI 细节 例如左 右阴影覆盖整
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS
  • 横向旋转到纵向时的字体大小怪异 - CSS 媒体查询 - iPhone5 Safari

    我已经用谷歌搜索了这个 但无法弄清楚 谢谢你的帮助 Studiolynch com 响应式和流体布局 在 iphone 5 Safari 中完美运行 除了从横向模式旋转到纵向模式会使字体大小小于应有的大小 但是 如果您最初以纵向模式加载页面
  • 用于创建动画渐变按钮背景的 CSS

    我正在寻找一个CSS规则可以创建一个CSS动画按钮的彩色渐变背景 https i stack imgur com NHqf8 gif 我只是想玩它并这样做 https codepen io prashant nadsoftdev pen b
  • 基本 CSS 问题 - 父 DIV 与未知子 DIV、居中父 DIV

    当我将 DIV 居中时 我会给它一个宽度并放置margin auto然而 我对这种情况有两个问题 该父 DIV 内将有 2 或 3 个带有 float left 的 DIV 子 DIVS 的宽度不会改变 但数量可能会改变 2 或 3 因此
  • 编辑角度材质的表格单元格填充

    当我使用开发人员工具检查该元素时 它显示零填充 但是当我查看它并将鼠标悬停在它上面时 它非常清楚地在单元格内具有填充 我不知道这是从哪里来的 并且设置td padding 0 important 什么也没做 感知到的填充是由以下原因引起的d
  • 新BFC“清”浮箱

    如示例所示 应用display inline block 到包含块似乎 清除 了其中的浮动框 wrapper inline block display inline block left column background color te
  • 左对齐图像和居中文本在 div 内的同一级别?

    HTML br div class UpperTitle img src align left CableSolve Web Dashboard Version 0 1 1 div br CSS UpperTitle text align
  • MVC4 捆绑:由于 css3 功能而缩小失败?

    我想使用 MVC4 捆绑和缩小 但我总是在未缩小的 css 文件中收到此错误消息作为注释 Minification failed Returning unminified contents 534 29 run time error CSS
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag

随机推荐

  • 学习C++项目—— 搭建多进程网络服务框架,增加业务和日志,心跳机制

    学习计算机网络编程 一 思路和学习方法 本文学习于 C语言技术网 www freecplus net 在 b 站学习于 C 语言技术网 并加以自己的一些理解和复现 如有侵权会删除 接下来对网络编程继续深入学习 二 网络编程继续深入 2 1
  • beego实现跨域

    使用路由过滤器实现跨域访问 routers router go 的init方法中添加过滤器 beego InsertFilter beego BeforeRouter cors Allow cors Options 允许访问所有源 Allo
  • jquery mobile学习教程之初识Jquery mobile 一

    Jquery Mobile简介 jQuery Mobile 是一个针对触摸体验的 web UI 开发框架 允许您开发跨智能电话和平板电脑工作的移动 web 应用程序 jQuery Mobile 框架构建于 jQuery 内核之上 提供几个功
  • 简单AIDL使用

    1 AIDL准备注意 build gradle buildFeatures aidl true 权限 在调用的APP添加目标APP可见 客户端 否则会有no Font service
  • Hystrix请求熔断与服务降级

    1 1 概述 在微服务架构中 根据业务来拆分成一个个的服务 服务与服务之间可以相互调用 RPC 在Spring Cloud可以用RestTemplate Ribbon和Feign来调用 为了保证其高可用 单个服务通常会集群部署 由于网络原因
  • Flex程序发布

    当你写好了一个Flex程序 想要按照某种方式发布 比如我们在网上见到很多发布后的例子中 在点击右键的时候出现一个菜单 菜单中有一个view source选项 选择这一项就可以预览程序的源码甚至是整个程序的架构 接下来简单介绍下程序的发布来实
  • 写定时任务发送邮件报错(Could not connect to SMTP host:smtp.exmail.qq.com,port:465)

    需求阐述 在写完定时任务发送邮件之后 调试的时候发现报错 Could not connect to SMTP host smtp exmail qq com port 465 一开始我以为是在for循环里发送邮件导致的 把循环禁用掉之后 发
  • systemd配置文件及管理方法详解

    一 systemd文件夹配置文件夹 systemd 配置文件存在于以下三个文件夹中 etc systemd system 存放系统启动的默认级别及启动的unit的软连接 优先级最高 run systemd system 系统执行过程中产生的
  • Log4j工具入门

    Log日志 主要用于记录程序运行的情况 以便于程序在部署之后的排错调试等等 也有利于将这些信息进行持久化 如果不将日志信息保存到文件或数据库 则信息便会丢失 Java Logging API 需JDK1 4版本以上才能支持 java uti
  • SQLPrompt关闭联网

    一 安装步骤概述 下载的破解版本SqlPrompt一般包含有如下两个可执行程序文件 安装步骤 1 安装SQLPrompt xxx 版本号 应用程序 需要关掉Miscrosoft SQL Server Management 2 再打开SQL
  • UDP 概述(主要特点,首部格式 header)

    文章目录 1 UDP 概述 2 UDP的 首部格式 header 1 UDP 概述 UDP只在 IP的数据包服务 之上增加了一点功能 这就是复用和分用的功能以及差错检测的功能 UDP的主要特点 序号 特点 描述 1 无连接 发送数据之前不需
  • 电商系统sku设计

    1 sku含义 sku stock keeping unit 是库存保存单位 即库存进出量的单位 可以是件 盒等为单位 在使用时候根据不同的业务状态 不同的管理模式来处理 在服装 鞋类使用最普遍 如图所示 2 数据库设计 规格属性表 对应上
  • 合肥工业大学编译原理实验二 LL1分析

    写在开头 当老师说这个实验最好写成图形界面时 我笑了 滑稽 心想终于可以用到python了 python真香 用python的数据结构可以很方便的表示LL1的某些东西 当然有利也有弊 方便的同时也会有一些坑 当然Java也牛逼 Java的图
  • HBase学习之六: hbase的预分区设计

    HBase学习之六 hbase的预分区设计 标签 hbase 2016 07 14 22 28 137人阅读 评论 0 收藏 举报 分类 hbase 9 大数据 2 版权声明 本文为博主原创文章 未经博主允许不得转载 背景 HBase默认建
  • 密码学在区块链隐私保护中的应用学习

    身份隐私保护技术 混淆服务 混淆服务的目的在于混淆消息双方的联系 如 图 2 所示 当发送方需要告知接收方消息 M 时 它会首先用接收方的公钥 KB 加密 M 并在密文后 附带真实接收地址 R 为了借助第三方 图 2 中的 混淆服务器 的能
  • unity 3d 仿真_在Unity3D中构建3D仿真入门,第1部分

    unity 3d 仿真 欢迎阅读有关Unity 3D的博客文章 分为三部分 的第一部分 在本系列中 我们将在Unity3D中使用丰富的控件创建一个简单的3D游戏 第一部分将介绍如何设置Unity3D 第二部分将教您如何使用C 控制Unity
  • 微电网重构

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 本文目录如下 目录 1 概述 2 数学模型 3 算例仿真及结果 4 结论 5 参考文献 6 Matlab和Python代码及文章详细讲解 1 概述 分布式能源 DE
  • keyshot卡住了还能保存吗_KeyShot常见问题汇总及解答(附图)!

    原标题 KeyShot常见问题汇总及解答 附图 KeyShot作为一款强大的3D实时渲染软件 被安装在各种用作商业设计和美术设计的PC及Mac电脑上 软件使用过程中难免会遇到各种问题 可能你会选择自己摸索 终能找到解决方法 但一定花费不少时
  • 银河麒麟 Qt 提示函数无定义 代码无补全提示

    1 打开 QtCreator 2 点击 帮助 选择关于插件 3 在弹出框 C 目录下 取消 ClangCodeMode勾选 4 重启QtCreator 即可生效
  • 【面试】移动端的自适应布局如何实现?

    1 百分比布局 使用百分比布局实现移动端的自适应布局 可以让页面元素随设备屏幕的大小自动适应缩放 从而实现不同设备的自适应 下面是具体的实现步骤 1 1 在CSS中 使用百分比作为元素的宽高 边距等属性值 例如 如果设计稿中某个元素的宽度为