前端移动开发之使用rem实现自适应的效果

本文给大家介绍php的三种常用的加密解密算法,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

前言

作为一名前端工程师,我们不仅要会PC端开发,还要会移动端开发,而且现在移动端占据主要流量,所以掌握移动端开发的技能更是必须的。

那么进行移动端的开发,什么是必须,我们想要的效果是什么?

自适应。对,我们想要的效果应该是网页上的元素能随着窗口大小的变化而跟着同比的变化。

立即学习“前端免费学习笔记(深入)”;

假如我们拿到一张750px宽的设计图,上面有一个元素是75px宽,当这张页面出现在只有540px宽的设备上,这个元素就得是54px宽。

如果你使用px这种固定的长度单位,在不同大小的设备上会出现什么情况,不用我说你也知道吧。

现在手机机型五花八门,主流手机iPhone6/7/8 4.7英寸、iPhone6/7/8 Plus 5.5英寸、iPhoneX 5.8英寸等。

那么如何让这些机型不同大小不一致的手机呈现出我们想要的效果呢?

方案

解决移动端适配问题其实有多种方案。

1.百分比

很容易就能想到百分比能实现自适应,但百分比非常局限。

在一张网页上,有一个元素占这个网页宽度的一半,你很容易就想到width: 50%。

但这个元素如果出现在不知道距页面左边缘多少px的情况下,你一下子无法看出占多少百分比,这时候你就得去测量、去算占比,如果元素非常多的话,那就相当麻烦了。

然而,使用百分比真正的弊端在于字体大小和元素高度。

字体大小是无法通过百分比实现自适应的。

元素的高度也是一样,一般移动端的页面是不知道高度的,可以随着内容无限下拉,元素的高度很难通过百分比去计算。

2.媒体查询(@media)

使用多套CSS也可以实现移动端自适应。

但媒体查询最适合的场景是一个网页在PC端是一种呈现形式,在移动端是另一种呈现形式。

如果纯移动端网页(只考虑移动设备不考虑PC设备)使用媒体查询,面对不同机型,就会有多套CSS,代码相当冗长。

3.vw

vw是一种CSS长度单位,是相对单位。

表示相对视口宽度(Viewport Width),1vw = 1% * 视口宽度,100vw等于屏幕宽度。

它的自适应效果非常好,但是目前它的兼容性不好,特别是在移动端浏览器有很多兼容问题的环境下,这里显得特别不合适,所以不推荐。

4.rem

rem也是一种CSS长度单位,也是相对单位。

它相对于根元素()下的font-size的值,1rem = html下font-size的值。

这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。

目前,除了IE8及更早版本外,所有浏览器均已支持rem。

viewport

在真正使用之前,我必须介绍一下这个元素标签。

想必,在每一个移动端页面,都有这么一段代码:


这段代码的意思是让视口(viewport)的宽度等于设备的宽度,初始缩放比例为1,最小缩放比例为1,最大缩放比例为1,禁止用户缩放。content的内容是可以配置的。

移动端浏览器会把网页放在一个viewport中,

默认情况下,移动设备上的viewport是大于浏览器可视区域的,

所以一般会出现滚动条,这是为了能在移动设备上正常显示那些为PC端设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或其他值。

像下面这样,在还没有写的情形,模拟手机浏览器:

前端移动开发之使用rem实现自适应的效果

所以我们必须使用元素来限制viewport的大小和缩放,一般我们都是等于设备的宽度。

必须使用元素还有一点是和rem相关的。

上面说过,rem是一种相对单位,相对于html元素下的font-size的值。

如果html元素下的font-size的值能随着页面的大小变化而变化,那么rem也能做出相应的变化。

所以,如果没有加上元素标签这一段代码,在不同机型大小下,html元素下的font-size的值是一直不变的,因为viewport不变,一直保持980px。

 使用

 “假如我们拿到一张750px宽的设计图,上面有一个元素是75px宽,当这张页面出现在只有540px宽的设备上,这个元素就得是54px宽。”

我们说过达到这种移动端自适应的效果最好的方法是使用rem单位。

因为1rem = html下font-size的值,如果html下font-size的值能随着页面的大小改变而改变,我们在代码写的rem就不用改变。

先约定1rem = 50px,如750px页面,75px元素,那么元素的width我们在代码中设置的值就是1.5rem。当页面大小变成540px,1rem = 36px,代码中元素的宽度是1.5rem,所以元素现在在页面的宽度是54px。

好,现在我们就写一段代码来让html下font-size的值能随着页面的大小改变而改变,代码如下:

(function(doc, win){    var docEl = doc.documentElement,        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',        recalc = function () {            var clientWidth = docEl.clientWidth;            if (!clientWidth) return;            docEl.style.fontSize = 50 * (clientWidth / 750) + 'px';        };    if (!doc.addEventListener) return;    win.addEventListener(resizeEvt, recalc, false);    doc.addEventListener('DOMContentLoaded', recalc, false);})(document, window);

实例

假设我们的设计师给我们一张设计图(嗯,没错!就长这个样子)

前端移动开发之使用rem实现自适应的效果

这是一张 750*1334 px的设计图,在设计图上量得这个黄色的矩形的长是330px,宽是190px。

因为一般设计图都是按照iPhone6的二倍图进行设计,所以iPhone6的实际尺寸是 375*667 px,所以黄色矩形的长应是165px,宽是95px,

而且PC端浏览器调试手机模式下iPhone6的尺寸也是 375*667 px。

我们约定1rem = 50px,所以黄色矩形 width: 3.3rem; height: 1.9rem;

我们的设置html下font-size的值的js代码为

// 50是1rem等价于多少px,375是设计稿的宽度,这里我们除以了2docEl.style.fontSize = 50 * (clientWidth / 375) + 'px';

效果:

前端移动开发之使用rem实现自适应的效果

前端移动开发之使用rem实现自适应的效果

前端移动开发之使用rem实现自适应的效果

 源码

            rem            p {            width: 3.3rem;            height: 1.9rem;            background-color: yellow;        }        

(function(doc, win){ var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 50 * (clientWidth / 375) + 'px'; }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window);

额外概念 

在为写这篇博客上网查资料的过程中,总结了几个与移动端开发相关的概念。

1.物理像素physical pixel

一个物理像素是显示器上最小的物理显示单位。

2.设备独立像素(也叫密度无关像素、css像素、逻辑像素)

device independent pixels(dips)

一种物理测量单位,基于计算机控制的坐标系统和抽象像素(虚拟像素),由底层系统的程序使用,转换为物理像素的应用。

3.设备像素比device pixel ratio(dpr) 

定义了物理像素和设备独立像素的对应关系。

公式:设备像素比 = 物理像素 / 设备独立像素 (该值也是平时手机说的几倍屏几倍屏的值)

4.分辨率

比如图片是由1280个像素* 720个像素组成。

5.PPI(每英寸所拥有的像素)

PPI是用来描述屏幕的像素显示密度。

6.DPI(每英寸打印的点数)

DPI表示每英寸打印的点数。

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。更多相关教程请访问 CSS视频教程!

相关推荐:

php公益培训视频教程

CSS在线手册

div/css图文教程

以上就是前端移动开发之使用rem实现自适应的效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1612310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 02:54:19
下一篇 2025年12月24日 02:54:29

相关推荐

  • 实现CSS圆环的5种方法(小结)

    这篇文章主要介绍了实现css圆环的5种方法(小结),有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 想到去年面试实习的时候被问到实习圆环的问题,特意写篇文章总结一下吧!总结了一下大概有5种方法。   1. 两个标签的嵌套: .element1{ width: 200px; heig…

    2025年12月24日
    000
  • 如何使用CSS和Vanilla.js实现一组tooltip提示框(附源码)

    本篇文章给大家带来的内容是关于如何使用css和vanilla.js实现一组tooltip提示框(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges…

    2025年12月24日
    000
  • CSS 实现滑动门的实例代码

    滑动门技术,就是指盒子背景能够自动拉伸以适应不同长度的文本。接下来通过本文给大家介绍css 实现滑动门的实例代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 所谓的滑动门技术,就是指盒子背景能够自动拉伸以适应不同长度的文本。即当文字增多时,背景看起来也会变长。 大多数应用于导航…

    2025年12月24日
    000
  • CSS多种方式实现底部对齐的示例代码

    这篇文章主要介绍了css多种方式实现底部对齐的示例代码的相关资料,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 因公司业务要求需要实现如下图中红色区域的效果: 效果说明: 1、红色区域数据需要倒排(即从底部开始数,数字为1、2、3、4、5),并且显示在最底部2、当数据过多时需要显…

    2025年12月24日
    000
  • css如何设置行间距?css文本文字的行间距设置(代码实例)

    css如何设置行距?其实在css并没有一个直接设置行间距的方式,只能通过间接的设置行高来实现行间距效果,行高越大就表明行间距越大。本章就给大家介绍css中是怎样通过设置行高来属性行间距效果的,让大家可以了解css文本文字的行间距是如何调整的。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所…

    2025年12月24日
    000
  • css如何设置段落间距?margin 属性设置段落间距(代码实例)

    段落间距是网页设计里一个提升文章阅读体验的重要因素。但网页排版不想word那样简单,而作为网页设计师,为了读者的良好阅读体验,我们必须为文章的每个小标题和段落都预留一定的空间,用css有效率地设置段落间距。本章就给大家介绍css margin 属性是怎样设置段落间距。有一定的参考价值,有需要的朋友可…

    2025年12月24日
    000
  • css如何使用内边距来调整段落间距?(代码实例)

    css如何设置段落间距?在之前的文章【css如何设置段落间距?margin 属性设置段落间距(代码实例)】中我们介绍了css使用外边距来设置和调整段落间距,本章我们就给大家介绍css如何使用内边来设置和调整段落间距。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来了解一下…

    2025年12月24日
    000
  • CSS实现二维码扫描的效果

    本文给大家介绍如何用css实现二维码扫描的效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 扫描二维码的效果,我原以为不好写呢,后来想了想其实挺简单的,几行代码,走起 .code-bg{ position: relative; height: 200px; width: 200…

    好文分享 2025年12月24日
    000
  • 手写CSS+js实现radio单选按钮

    本文给大家介绍手写css+js实现radio单选按钮,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 有的时候我们需要用长得漂亮一点的单选按钮,那么,就要抛弃原有的自己来写,下面就是我实现的 你丑你先你才丑你先你更丑你先 .radio{display: flex;align-ite…

    2025年12月24日
    000
  • css实现弹出对话框的同时出现遮罩层

    本文给大家介绍如何用css实现弹出对话框的同时出现遮罩层,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 最近的项目有留言板弹出对话框,然后我就自己写了一个静态的,下面就直接上代码: 这里是要填写的内容 /*灰色遮罩层*/.fade { width: 100%; height: 1…

    好文分享 2025年12月24日
    000
  • CSS如何重置样式?CSS样式重置效果的实现(代码实例)

    本文给大家介绍如何用css样式重置效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在我们准备开发一个项目的时候,肯定要考虑到一些浏览器的兼容性,或者更方便自己编写一个页面,那么这时候很多人就会想到CSS的重置,一般人都会这样写。 @charset “utf-8”;/* 使用重…

    好文分享 2025年12月24日
    000
  • 纯CSS手动滑动轮播图(隐藏滚动条)

    本文给大家介绍纯css手动滑动轮播图(隐藏滚动条),有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 HTML:             @@##@@              @@##@@                 @@##@@                 @@##@@ …

    2025年12月24日
    000
  • css字体间隔怎么调整?css文字间隔的调整方法

    在前端开发的过程中,有时候可能会出现字与字之间比较紧凑,这样会显得页面不太好看,那么如何解决这一个问题呢?我们应该可以想到能够通过css设置文字间隔让字与字之间的距离大一点,这样会更符合页面布局的设计,也会让页面更加的美观,那么,接下来的这篇文章将给大家来介绍一下css字体间隔调整的方法,有需要的朋…

    2025年12月24日
    000
  • css如何让背景图片平铺?css背景图片平铺四种方式介绍

    在网页设计的过程中,有时候可能会要求背景图片平铺,因为这样会让整个网页看起来比较好看,图片平铺可以不用具体设置body宽度和高度大小,就可以直接将图片平铺整个页面,那么,如何让背景图片平铺呢?接下来本篇文章将给大家来介绍关于css让背景图片平铺的方法,有需要的朋友可以参考一下。 我们首先来看一下cs…

    2025年12月24日 好文分享
    000
  • 图文详解ul中li内容垂直居中和水平居中的方法

    在页面布局时,经常会用到li标签,它可用于列表,导航,选项卡等等,那你知道如何让ul中的li居中吗?这篇文章就和大家讲讲如何让ul中的li水平居中以及如何让li内容垂直居中。感兴趣的朋友继续往下看吧。 1、li内容垂直居中 flex-direction 属性规定灵活项目的方向。当设置它的属性值为co…

    2025年12月24日
    000
  • CSS中页面引用(详解)

    本章给大家介绍CSS的页面引用。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 css 为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS由此思想而诞生,CSS是 Cascading Style Sheets 的首字母缩写,意思是层叠样式表。有了CSS,html…

    2025年12月24日 好文分享
    000
  • 如何使用纯CSS实现按钮的悬停效果(附源码)

    本篇文章给大家带来的内容是关于如何使用纯css实现按钮的悬停效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom,容器…

    2025年12月24日
    000
  • 如何使用纯CSS实现从按钮两侧滑入元素的悬停效果(附源码)

    本篇文章给大家带来的内容是关于如何使用纯css实现从按钮两侧滑入元素的悬停效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义…

    2025年12月24日
    000
  • 如何使用纯CSS实现宝路薄荷糖的动画(附源码)

    本篇文章给大家带来的内容是关于如何使用纯css实现宝路薄荷糖的动画(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom,只…

    2025年12月24日
    000
  • 如何使用CSS和D3实现一个舞动的画面(附源码)

    本篇文章给大家带来的内容是关于如何使用css和d3实现一个舞动的画面(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom,…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信