移动端 、响应式布局

移动端

移动端布局设备像素比DPR

移动端页面书写的时候设计图的尺寸

    如果是移动端网页开发,UI常用的设计图尺寸是以iPhone6/7/8 为标准的,这个图的宽是750高度是1334,实际在浏览器中解析的时候是375*667  也就是UI给的设计图是一个2倍图  ,所以如果UI给的是这样的一个2倍图,那么我们开发在书写的时候,需要把测量的所有数据/2

设备像素比dpr

 这里看到的2倍或者是3倍,有专业术语 叫做dpr 设备像素比

      设计图看到的750这样的宽度专业术语叫做物理像素

      浏览器上看到的375这样的宽度专业术语叫做CSS像素

      设备像素比=物理像素/CSS像素  

      以iPhone6/7/8为例  物理像素的宽度是750 css像素的宽度是375 设备像素比就是750/375=2

     目前我们书写移动端是按照写死的2或者3进行相除,真正想要达到完美适配这里的2或者是3是要动态随着不同机型发生改变的,动态获取可以后面通过js获取

为什么有dpr,像素不是1:1

手机上实际浏览器解析的跟物理像素不是1:1

原因是因为想要高清显示一些图片或者是视频  

dpr是2,那么手机实际显示会把原来的像素放大2倍,同样的设备大小,像素点变得更多,那就会更高清

viewport视口

为了做移动端的适配

三类视口:布局视口(设计稿的大小) 可视视口(设备的大小) 理想视口(视觉查看设计稿和设备大小是否合适)

width=device-width:宽度等于设备宽度

initial-scale=1.0:初始缩放比例

如果没有视口的设置,真实的html在iPhone6/7/8这样的设备上解析的宽度是980,那这个980有个专业术语叫做布局视口

跟我们浏览器上看到的375是不一样的,这个375也有一个专业术语叫做视觉视口

所以也就是在默认的时候用户看到的视口宽度和html解析的视口宽度是不一样的,那么作为开发人员得需要让着2个视口宽度保持一样,此时作为开发就要通过meta标签进行视口的设置,下面的代码就是开发人员想要用户看到的跟html解析的宽度保持一致,这个想法有个专业叫做理想视口 ,(也就是和浏览器放大缩小差不多的意思)

 

新单位

  vw  viewport width

    相对单位,相对于视口的宽度 满屏撑满宽度就是100vw 和百分比差不多

    假设当前的设备是iPhone6/7/8 视口的宽度是375px  那么100vw=375px 1vw=375/px100px

    目前我这边的开发用vw书写,原因是因为如果用vmin得需要判断一下谁是最小的,目前的css阶段没有办法获取到当前的设备视口宽高也就无法判断出哪个是最小的(js后面可以获取到也可以进行比较大小),所以先用vw书写

    已知当前设备如果iPhone6/7/8的话 100vw=375px

      假设ps中标注的盒子高度是90px,因为当前的设计图是一个2倍图,用px书写就是45px,现在要用vw书写,所以需要把45px换成vw,结果就是12vw

        100vw=375px  1vw=3.75px  12vw=45px  

        最开始的90px变成12vw 经历了90px/2/3.75  90px/7.5px  

  vh  viewport height

    相对单位,相对于视口的高度  满屏撑满高度就是100vh 和百分比差不多

    假设当前的设备是iPhone6/7/8 视口的高度是667  那么100vh=667px

  vmin  viewport min

    相对单位,相对于视口的宽高中最小的那个

    假设当前的设备是iPhone6/7/8  视口宽度是375  高度是667 最小就是宽度

    此时100vmin=375px 也就是对于当前设备来说 100vmin和100vw的结果是一样的

    B站开发用的是vmin单位书写的

  vmax  viewport max

    相对单位,相对视口的宽高中最大的那个

    假设当前的设备是iPhone6/7/8 视口宽度是375 高度是667 最大就是高度

    此时的100vmax=667px 也就是对于当前设备来说 100vmax和100vh的结果是一样的

em

em是一个相对单位,相对于最近的font-size大小

rem

rem是一个相对单位,相对于根元素也就是html的字体大小 默认字体大小16px

<!-- 移动端的单位: em: 1em = 16px 根据自身字体大小改变而改变,如果自身大小没有设置,默认就是16px 如果父元素进行了字体大小设置,那么会根据父元素字体大小进行设置 rem:1rem = 16px 根据根字体大小进行设置 默认浏览器(根元素)的字体大小就是16px -->

已知设计图中标注的单位是px开发的时候想要宽高等单位用rem而rem根据html的文字大小变化,为了实现类似的效果,此时的html的font-size的单位换成了vw

所以此时需要知道px vw rem三个单位之间的换算比例

假设当前的设备是iPhonet6/7/8视口的满屏宽度就是100vw=375px 默认也知道1rem=16px

100vw=375px 1vw=3.75px 1rem=16px 1rem=16px=4.2666666667vw(16px/3.75px)

假设当前的设备是iPhone6/7/8视口的满屏宽度就是100vw=375px假设1rem=100px

100vw=375px 1vw=3.75px 1rem=100px 1rem=100px=26.6666666667vw

这就是换算过程

<!-- 总结:

1.如果使用固定值,那么需要再750px的设计稿中所有数据尺寸都除以2

2.如果使用rem,需要引入js文件,之后750设计稿的尺寸直接回车转换rem即可 js中有乘以2的操作所以引入js后不需要除以2 但是想要回车获取值那么前提需要安装插件px to rem, 安装完成后需要配置vscode中的跟字体大小(设置->px->cssrem:root fontsize 改为75即可) -->

响应式布局

1. Viewport

响应式布局是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。

优点: 

面对不同分辨率设备灵活性强

能够快捷解决多设备显示适应问题

缺点: 

兼容各种设备工作量大,效率低下

代码累赘,会出现隐藏无用的元素,加载时间加长

一个常用的针对移动网页优化过的页面的 viewport meta 标签大致如下:

width:控制 viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。

height:和 width 相对应,指定高度。

initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。

maximum-scale:允许用户缩放到的最大比例。

minimum-scale:允许用户缩放到的最小比例。

user-scalable:用户是否可以手动缩放。

2. 网格视图

响应式网格视图通常是 12 列,宽度为100%,在浏览器窗口大小调整时会自动伸缩。

创建响应式网格视图

12 列的网格系统可以更好的控制响应式网页。

首先我们可以计算每列的百分比: 100% / 12 列 = 8.33%。

在每列中指定 class, class="col-" 用于定义每列有几个 跨度:

.col-1 {width: 8.33%;}

.col-2 {width: 16.66%;}

.col-3 {width: 25%;}

.col-4 {width: 33.33%;}

.col-5 {width: 41.66%;}

.col-6 {width: 50%;}

.col-7 {width: 58.33%;}

.col-8 {width: 66.66%;}

.col-9 {width: 75%;}

.col-10 {width: 83.33%;}

.col-11 {width: 91.66%;}

.col-12 {width: 100%;}

首先确保所有的 HTML 元素都有 box-sizing 属性且设置为 border-box。

确保边距和边框包含在元素的宽度和高度间。

添加如下代码:

* {box-sizing: border-box;}

所有的列向左浮动,间距(padding) 为 15px:

[class*="col-"] {  

  float: left;    padding: 15px;    border: 1px solid red;

}

每一行使用 <div> 包裹。所有列数加起来应为 12
<div class="row"> <div class="col-3">...</div> <div class="col-9">...</div></div>

列中行为左浮动,并添加清除浮动:

.row:after {    content: "";    clear: both;    display: block;}

3. 媒体查询

使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。

如果是横屏背景将是浅蓝色:

当浏览器的宽度在 520 到 699px, 改变背景色

浏览器屏幕在700到1000背景色变为红色

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 提供了强大的响应式系统,这对于移动端的布局非常重要。在移动端开发中,响应式布局确保了页面在不同屏幕尺寸和设备上都能自适应地调整布局。Vue 3 的响应式主要依赖于以下核心机制: 1. **Vue实例的响应式属性**:Vue实例的data属性会自动转换为响应式的,这意味着当你修改这些属性时,视图会自动更新。这是通过劫持JavaScript的数据变更通知机制(Object.defineProperty)实现的。 2. **计算属性**:你可以定义计算属性,它们基于其他响应式的属性计算得出,也具备响应性。这使得复杂的计算变得简洁,不需要手动维护状态。 3. **Watch API**:虽然不是直接用于布局,但watch方法允许你在数据变化时执行回调,这对于动态调整样式或执行布局相关的逻辑非常有用。 4. **响应式指令**:Vue提供了一些响应式指令如v-bind, v-model等,用于绑定元素的属性,这些在移动端布局中也有广泛应用,比如v-bind:style可以动态设置元素的样式。 5. **Vue Router** 和 **Vuex** 的配合:当用户导航或组件状态改变时,响应式系统能保证视图的更新和路由的重渲染,这对于动态路由和复杂数据流的管理至关重要。 6. **Vue CLI** 提供的预构建工具和脚手架:可以帮助开发者快速创建适合移动端响应式布局,并支持各种屏幕尺寸的适配策略,如媒体查询和百分比布局。 对于移动端响应式布局的具体实现,你可能需要用到以下技术: - **CSS Flexbox** 或 **CSS Grid**:Vue3不直接处理布局,但你可以使用这两种现代CSS布局模式来创建灵活的网格和响应式容器。 - **CSS变量和主题**:使用CSS变量可以轻松地切换不同主题或屏幕尺寸的样式。 - **响应式设计库**:如Vuetify、Element UI等提供了预设的响应式组件和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值