PC端自适应使用rem

该博客介绍使用REM实现网页自适应。在PC端,通过JS修改HTML的FONT - SIZE值,使内容大小和位置随窗口变化;移动端在页面载入时设置一次即可,设备宽度超1080则按PC处理。还介绍了移动端适配升级版,如用sublime可下载cssrem工具,vscode也有对应转换工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做一个PC端的网页,设计图是1920X1080,要在常见屏上显示正常 ,比如:1280X720 1366X768 1440X900 1920X1080。
就要使用REM,width、height、margin、padding、left、top都采用了REM,
**注意:**HTML的FONT-SIZE设置的为100PX.是为了计算方便.此时BODY的FONT-SIZE要设置为正常值,例如14PX.不然的话,其它的DOM都会继承HTML的100PX的FONT-SIZE,导致效果巨大.

1、PC端
当浏览器窗口变化时,内容的大小以及相对位置也会相应变化,这个依靠JS修改HTML的FONT-SIZE值实现.如下:

;(function(win) {
    		var tid;
    		function refreshRem() {
    			let designSize = 1920; // 设计图尺寸
    			let html = document.documentElement;
    			let wW = html.clientWidth;// 窗口宽度
    			let rem = wW * 100 / designSize; 
    			document.documentElement.style.fontSize = rem + 'px';
    	    }
	     
	    win.addEventListener('resize', function() {
	    	clearTimeout(tid);
	    	tid = setTimeout(refreshRem, 300);
	    }, false);
	    win.addEventListener('pageshow', function(e) {
	    	if (e.persisted) {
	    		clearTimeout(tid);
	    		tid = setTimeout(refreshRem, 300);
	    	}
	    }, false);

	    refreshRem();

	})(window);

计算font-size的逻辑是:
当设计图是1920时,规定HTML的FONT-SIZE的值是100. 也就是,当浏览器窗口调整到1920PX时,1REM=100PX,如果要设定一个160PX(1920设计图时)的margin-top,那么REM设置值是1.6rem.

2、移动端

由于手机上一般不会调整浏览器大小,所以可以在页面载入时,设置一次即可

$(function(){

  let designSize = 750; // 设计图尺寸

  let html = document.documentElement;

  let wW = html.clientWidth;// 窗口宽度
  let rem = wW * 100 / designSize; 

  document.documentElement.style.fontSize = rem + 'px';
})

使用REM能够较好的自适应移动端

手机平板移动设备的宽度不超过1080,如果设备已经超过了这个宽度,则不应再计算html的font-size值了.因为已经是PC屏幕了.

if ( window.innerWidth>1080)

return;

3、移动端适配升级版
首先我使用sublime进行开发,可以先在github上下载css转rem工具代码:cssrem
链接:https://github.com/flashlizi/cssrem
设置px_to_rem为37.5,可以写死,意思就是使用ipone6屏幕尺寸进行开发
vscode可以使用px to rem & rpx (cssrem)进行转换。修改默认16px为18.75

rem代码:放在JS中

(function(win) {
	var docEl = win.document.documentElement;
	var tid;

	function setRemUtils() {
		// 获取rem基准值
      var rem = docEl.clientWidth / 20;// 窗口宽度,如果是750设计图,则将10改为20
      // 动态设置html根元素的font-size 
      docEl.style.fontSize = rem + 'px';
  }

  setRemUtils();

  // 窗口变化时触发
   win.addEventListener('resize', function() {
   	clearTimeout(tid);
   	tid = setTimeout(setRemUtils, 300);
   }, false);
   win.addEventListener('pageshow', function(e) {
   	if (e.persisted) {
   		clearTimeout(tid);
   		tid = setTimeout(setRemUtils, 300);
   	}
   }, false);
})(window)
在uni-app中实现手机PC自适应布局,主要依赖于其内置的响应式设计机制以及一些特定的技术手段。uni-app提供了多种方式来适配不同屏幕尺寸和设备类型,从而确保应用能够在各种设备上提供良好的用户体验。 ### 使用Flex布局 uni-app支持使用Flexbox进行布局,这是一种非常强大的布局模式,可以轻松实现响应式设计。通过设置容器的`display`属性为`flex`,并结合`flex-direction`、`flex-wrap`等属性,可以根据不同的屏幕尺寸自动调整子元素的排列方式[^1]。 ```css .container { display: flex; flex-direction: row; flex-wrap: wrap; } ``` ### 媒体查询 媒体查询允许根据设备特性(如屏幕宽度、高度、方向等)应用不同的CSS样式。这在uni-app中同样适用,可以通过编写针对不同设备特性的CSS规则来优化布局表现。 ```css /* 默认样式 */ .box { width: 100%; } /* 当屏幕宽度大于768px时 */ @media (min-width: 769px) { .box { width: 50%; } } ``` ### 动态计算字体大小 为了进一步提升跨设备的一致性体验,还可以考虑动态调整根元素的字体大小,这样基于rem单位的设计就能更好地适应不同屏幕尺寸。通常这一过程会在项目初始化时或者窗口大小改变时执行一次计算函数。 ```javascript function setRem() { const baseSize = 16; // 基准字号 const scale = document.documentElement.clientWidth / 750; // 以750设计图为例 document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'; } window.addEventListener('resize', setRem); setRem(); ``` ### 自定义适配方案 对于更复杂的适配需求,可能需要开发人员自己编写逻辑来处理不同分辨率下的布局问题,比如通过JavaScript检测用户代理信息或屏幕尺寸,并据此加载不同的样式表或修改DOM结构。 以上方法不仅适用于uni-app本身,也适用于uni-app x版本。值得注意的是,在实际开发过程中,应该综合运用这些策略,并且充分测试各个目标平台上的表现,以确保最佳的兼容性和用户体验。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值