手机端网页所有内容根据屏幕大小自适应(大小,位置)

    之前一直都在做电脑端的网页制作,几乎没有接触过手机端的页面开发,在我看来,开发手机端的页面还不如直接用安卓原生或者react-native开发,但由于公司的需求,于是我只能硬着头皮来解决。

    手机端的页面需求大多数为:自动适应不同手机的屏幕,包括平板,以往的处理方式通常都是:1.根据不同的分辨率制作不同的页面,然后通过js来处理选择显示哪个页面。2.通过媒体查询来编写多种css样式,让其自动选择。3.使用百分比。

    但这两种方式都有一个很大的缺点,无法做到完全适应所有分辨率,例如有一个按钮大小设置成100px*200px,你通过媒体查询的方式来处理低于320*568的屏幕,假设一个设备的分辨率是280*360,那就会出现一个问题,该按钮在320*568的分辨率可能是刚刚合适的,但在280*360的分辨率下,你会发现还是很大。
上面的两种方式都无法完全的动态解决,即便使用百分比的方式,也可能会出现样式的问题,这里我们引入一个CSS3的新的单位:rem,CSS3的计算方法:calc(),以及CSS3的变量:(:root),下面我简单讲解下这三个东西。

rem:rem是一个新的单位,该单位与HTML页面的fontSize有关,一般默认的浏览器的fontSize是16px,因此一般的1rem=16px。

calc():这是一个用于在CSS中计算的函数,只能进行四则运算。

:root  在css中,这是一个伪类,但现在我们所说的不是伪类,而是css中的变量, 定义方法:root{ --a:#fff ;}使用方法span{color:var(--a);}
    
    有了这三样东西,我们就可以编写一个通用的适应所有屏幕的JS文件,下面通过项目来详细说明。

公司中有一个手机端网页的设计稿,如下图,尺寸是750*1334,通过chrome浏览器的调试面板,我切换到手机模式,并且选择iphone5型号的屏幕来调试,i5的分辨率是320*568,右上角的菜单按钮在设计稿中的尺寸是40*24,于是这里就有了一个设计稿尺寸和屏幕尺寸的比例,根据这个比例将其与rem强行挂钩。

JS:

	var width=document.documentElement.clientWidth;//获取屏幕的宽度
	var height=document.documentElement.clientHeight;//获取屏幕的高度
	var bili1=width/750;//屏幕宽度与设计稿宽度的比例(750是设计稿的宽度)
	var bili2=height/(1336-48);//屏幕高度与设计稿高度的比例(1336是设计稿的高度,其中48是设计稿中含有手机顶部的状态栏,需要去掉,1366-48才是真正需要显示的东西)
	var bili=bili1<bili2?bili1:bili2;//宽度的比例和高度的比例进行比较,取值最小的
	var html = document.querySelector('html');//选择html节点
  	var rem = 16;//手动设置rem与px的比例;
  	html.style.fontSize = rem + "px";//设置html的默认fontsize为16px。(注意,浏览器中最小值为12px,)
	var __bili=bili/rem;//将比例和rem进行联系。
	document.documentElement.style.setProperty('--bili', __bili+"rem");//设置css中的变量为--bili,值为__bili

CSS:

:root{
	--bili:0.027rem;	
}
.header{
	height:calc(var(--bili) * 80);
}

这里说下var __bili=bili/rem ,在我上面的设置里,1rem=16px;而设计稿按钮的宽度为40px,按照上面代码的比例320/750来算,在iphone5上的尺寸应该是:40*320/750 ,大概为17px。我们按照代码的变量来换成公式:width=relWidth*bili ==> width=relWidth*bili*rem/16  这里bili就和rem存在联系了:bili/16就是代码上的bili/rem,那么化简下就是width=rekWidth*var(--bili) relWidth是设计稿中按钮实际的宽度。在css中的引用:div{width:calc(40 * var(--bili))} 注意calc()运算符必须和数值用空格分开!

凡是涉及长度的例如padding,margin,height,width等都可以用calc(40 * var(--bili))的方式动态计算出实际的值,这样就实现了100%的自适应,电脑端的也能够自适应!


补充最后需要在<header>里添加<meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no">,其作用看属性就知道,用来适应手机屏幕的宽度和高度


兼容性:


设计稿:

效果图:




### Vue 移动端图片自适应布局 为了实现在 Vue 项目中的移动端图片自适应显示,可以采用响应式设计的方法来调整图像的大小位置。这种方法不仅能够确保图片在各种屏幕尺寸下都能良好展示,还能提升用户的浏览体验。 #### 使用 CSS 进行基础配置 对于图片的自适应处理,CSS 提供了一些非常有用的属性: ```css img { max-width: 100%; /* 确保图片不会超出其父级容器 */ height: auto; /* 维持原始宽高比例 */ } ``` 这段代码使得图片能够在保持原有纵横比的同时缩放至适合当前视窗宽度[^1]。 #### 结合媒体查询优化样式 当涉及到更复杂的场景时,比如针对特定设备类型的定制化呈现,则可以通过媒体查询进一步细化控制逻辑: ```css @media (max-width: 768px) { img { border-radius: 10px; margin-bottom: 20px; } } @media (min-width: 769px) and (max-width: 1024px){ .image-container{ display:flex; justify-content:center; } img { width:80%; } } ``` 这里定义了两个断点,在不同范围内应用不同的样式规则,从而让网页内容更好地适配平板电脑和其他小型移动设备。 #### 利用 JavaScript 动态加载资源 除了静态样式的设定外,还可以借助 JavaScript 来动态决定何时以及如何加载图片文件。例如,根据实际可见区域提前预取即将进入视野范围内的图片;或者依据网络状况切换高清/低清版本等策略,以此提高性能并减少不必要的带宽消耗[^4]。 #### 应用框架特性简化开发过程 考虑到 Vue 生态系统的便利性,引入专门用于解决多终端兼容性的库也是一个不错的选择。像 `lib-flexible` 就能帮助开发者轻松应对跨屏问题,它会基于当前环境自动计算合适的 rem 单位基准值,并据此调整全局字体大小及其他依赖此单位测量的对象尺寸。 综上所述,通过上述几种方式相结合的方式可以在 Vue 中有效地实现移动端图片的自适应布局,既保证视觉效果又兼顾了交互流畅度。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值