首页 > 其他分享 >Web移动端布局

Web移动端布局

时间:2024-04-15 10:22:37浏览次数:18  
标签:Web font px 布局 像素 vw 移动 root size

逻辑像素和物理像素

逻辑像素也叫『设备独立像素』,即CSS像素,例如,iPhone 6的逻辑像素是375px

物理像素是设备屏幕实际拥有的像素点,设备生产出来,像素就确定了,例如,iPhone 6的物理像素是750px

在iPhone 6下,物理像素是逻辑像素的2倍,用『设备像素比』表示该值,即物理像素除以逻辑像素的值,通过window.devicePixelRatio获取设备像素比

viewport视口

一般移动设备的浏览器都默认设置了一个viewport元标签,定义一个虚拟的布局视口(layout viewport),用于解决早期的 页面在手机上显示的问题。iOS, Android 基本都将这个视口分辨率设置为 980px,所以PC上的网页基本能在手机上呈现,只不 过元素看上去很小,一般默认可以通过手动缩放网页。

为了解决这个问题,可通过meta标签来修改视口的尺寸大小

<meta name="viewport" content="width=device-width, initial-scale=1.0" minimum-scale="1.0" maximum-scale="1.0" user-scalable="no">
  • width=device-width表示视口宽度为设备的宽,也就是逻辑像素的大小
  • initial-scale=1.0表示初始缩放比例为1,即 正常大小
  • maximum-scale表示放大的最大比例
  • minimum-scale表示缩小的最小比例
  • user-scalable表示是否允许用户手动缩放页面,默认yes

window.innerWidth可以获取设备的宽度。
document.documentElement.clientWidth可以获取视口的宽度。
当viewport的width的值是device-width,设备的宽度等于视口的宽度

rem单位

CSS中,rem表示root元素的字体大小。(root元素即html元素)
即,1rem等于root元素的字体大小,对于大多数的浏览器,默认值是16px

html {
    font-size: 12px; /* 此时, 1rem = 12px */
}
.box {
    width: 2rem; /* 2x12=24px */
}

不同的设备的视口是不同的,所以在不同的设备中root元素的font size值也不同,以此来达到缩放的效果。
计算root元素的font size有两种方法:

  • 利用JS计算根元素的font size值
  • vw

JavaScript计算rem值

以iPhone6为基准,屏幕宽度为375,root元素的font size计算如下:

function onWindowResize() {
  let documentElement = document.documentElement;
  let viewportWidth = documentElement.clientWidth;

  // 在CSS中计算rem的时候也是以37.5px为基准
  documentElement.style.fontSize = viewportWidth / 10 + 'px';
  documentElement.setAttribute('data-dpr', window.devicePixelRatio);
}

window.addEventListener('resize', onWindowResize);
window.addEventListener('load', onWindowResize);

通常移动端UI设计稿按照iPhone6的物理像素为基准进行设计,即750px,在量取尺寸的时候,需要除以2才能适配页面中的css逻辑像素

@function px2rem($px) {
    $base: 37.5;
    @return calc($px / 2 / $base) * 1rem;
}

37.5px就是基准值,和JS代码中的保持一致。假如A元素在设计稿上的宽度是120px,那么在iPhone6上就是1.6rem

当手机切换到iPhone XR时,root元素的font size的值就变成了41.4px,因为A元素的宽度是1.6rem,那么它的实际宽度就是41.4 x 1.6 = 66.24,这就起到了缩放效果。

总结两点:

  • 动态计算htmlfont-size
  • 在CSS中将px转为rem

rem + vw

利用vw计算root元素的font size值就不需要用JS去动态计算根元素的字体大小。其他布局元素用rem做单位。

750px的设计稿,root元素字号100px,换算成vw,就是100/750 = 13.33333333vw;

通过CSS计算函数自动计算:

:root {
    --psd: 750;
    --root-font-size: 100;
}
html {
    font-size: calc(100vw / var(--psd) * var(--root-font-size))
}

@media screen and (min-width: 750px) {
    html {
        font-size: 100px;
    }
    body {
        width: 750px;
        margin-left: auto;
        margin-right: auto;
    }
}

最后,设计稿元素的大小直接除以100换算成rem单位

@function pxtorem($px) {
    @return calc($px / 100) * 1rem;
}

另一种计算方式是按照手机尺寸计算,以iPhone 6为准,就是375px,在量取尺寸时需要除以2,因为设计稿是750px的

// 按照iPhone 6的逻辑像素计算,即375px
100vw = 375px => 1px = 100/375 = 0.26666667vw;
100px = 0.26666667 * 100 = 26.66666667vw;

vw

使用vw布局就不需要去设置根元素的font size了

页面所有元素都用vw做单位。设计稿750px=100vw

$psd: 750;
/**
        $px                    $vw
    -------------    ===    ------------
        $psd                    100vw
*/
@function pxtovw($px) {
    @return calc($px / $psd) * 100vw;
}

标签:Web,font,px,布局,像素,vw,移动,root,size
From: https://www.cnblogs.com/ryanzff/p/18135295

相关文章

  • gitee基于webhooks实现前端简单自动化部署
    1.为什么采用自动化部署简而言之,程序员优秀传统:懒=>高级生产力.基于gitee进行的自动化部署,服务器环境为Ubuntu基于webhooks进行的自动化部署更加轻快便捷2.部署步骤1).服务器购买可以购买阿里云抢占式服务器进行实验,花费应该在一大洋以内,或者直接购买一年低配服务......
  • VantUI移动端适配
    VantUI的官方设计稿是320px,而设计稿普遍是750px,所以官方推荐配合postcss-pxtorem插件使用://eslint-disable-next-lineno-undefmodule.exports={plugins:[//eslint-disable-next-lineno-undefrequire('postcss-pxtorem')({rootValue({file}){......
  • ABP -Vnext框架一步一步入门落地教程——使用ABP -Vnext创建一个WEBAPI接口(二)
    人生需要指引,而复制是成功最快的方式,兄弟们让我们发车吧————代码大牛ljy开发主题:何谓开发应用服务端在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端API,页面框架调用WEBAPI实现业务就完事了。所以咱们今天......
  • mv 命令 – 移动或改名文件
    语法格式:mv参数源文件名目标文件名常用参数:mv命令来自英文单词move的缩写,中文译为“移动”,其功能与英文含义相同,能够对文件进行剪切和重命名操作。这是一个被高频使用的文件管理命令,我们需要留意它与复制命令的区别。cp命令是用于文件的复制操作,文件个数是增加的,而mv......
  • Web APIs
    0x01概述API是一些预先定义的函数,提供应用程序与开发人员基于某软件或硬件访问一组例程的能力WebAPIs是W3C组织的标准,是JS独有的部分WebAPI是浏览器提供的一套操作浏览器功能和页面元素的API,即DOM与BOM0x02DOM(1)简介文档对象模型(DocumentObjectModel)是......
  • CSE 470 WebGL应用程序
    CSE470家庭课业#3:灯,相机,行动!讲师:D.Hansford博士重要图片:您将开发一个显示两个旋转表面的WebGL应用程序。曲面将使用Phong照明模型进行渲染,使用精确的顶点法线,着色将在片段着色器中进行。该应用程序将允许不同的照明、材质和观看效果。这些程序功能的详细信息如下所述。概念:构建参......
  • Web自动化测试入门
    摘要需要模拟用户登入网站,然后下单和修改收货地址,用Selenium最合适。本文介绍Selenium.WebDriver的C#版本的用法。下载在Selenium的Downloads页面左上角就是C#:底部有如下区域:说明Selenium对C#有非常好的支持。根据官网,转到如下页面:https://www.nuget.org/packages/Seleni......
  • Springboot集成WebSocket实现智能聊天【Demo】
    背景openai目前越来越流行,其他ai产业也随之而来,偶然翻到openai接口文档,就想着可以调用接口实现智能聊天,接下来就写写我怎么接入websocket的过程,文笔不佳,谅解。接入WebSocket1.webSocket依赖<dependency><groupId>org.springframework.boot</groupId><artifactId......
  • CTFshow-Web入门模块-爆破
    CTFshow-Web入门模块-爆破by故人叹、web21考察点:burpsuite使用、自定义迭代器使用题目提供了字典,要求登录并提示了爆破,使用burpsuite抓包并操作:(1)用户名一般为admin,密码随意输,抓包并发送给爆破模块。可以看到Basic后有一段base64编码,解码得到用户名:密码的格式,证明我们之......
  • CTFshow-Web入门模块-信息搜集writeip
    CTFshow-Web入门模块-信息搜集writeipby故人叹、信息搜集web1考察点:查看源码题目提示:”开发注释未及时删除“,页面源代码中可能有东西,查看页面源代码发现flag。总结查看源码的几种方式:F12打开源代码快捷键Ctrl+u在url前面加上view-source:浏览器右上角选项中的Web开......