rem适配所有屏幕大小demo分享

本文介绍了如何使用REM单位实现响应式布局,包括三种方案:通过calc函数动态调整根元素字体大小、设置不同屏幕尺寸的固定字体大小及按比例动态调整。提供了具体的计算方法和示例代码。

方案一

利用css的calc函数对html元素的font-size大小进行计算,100vwviewport视区的宽度(即浏览器内部的可视区域大小,window.innerWidth),然后可以自己设定一个全宽为多少,意味着将屏幕几等分,例如将屏幕10等分,那么1rem = 100vw / 10,这也就是根元素的font-size值,此时如果你的设计稿为750,你就可以得出一个计算设计稿中某个区域宽高的rem值的公式:width / 750 * 10rem(width / 750是宽度占设计图的比例,10rem是设计图的全宽),这样的话根元素font-size值就可以自动根据设备进行变化(因为此时根元素font-size值为10vw,当你的设备变化时,vw对应的大小也会自动变化),但是这样每次去计算可能太麻烦了,解决方案自然是给1rem一个方便计算的值,比如说100px,假如在750px的设计图中:

// 首先
1rem = 100px
100vw = 750px
// 所以
1rem = 100vw / 7.5 = 13.333333333vw
// 最后设置根元素font-size为13.333333vw即可

这样当你1rem = 13.333333vw时,获得一个宽高为60px的div的rem值就很好计算了,直接:

div {
	width: .6rem;
	height: .6rem;
}

后面两种方案都不如第一种方案,一键设置自动变化,有兴趣的朋友也可以看下

方案二

其实就是按照方案一的算法,把一些屏幕大小范围设置一个指定的font-size~~~(可能需要配合媒体查询)

方案三

当屏幕小于一个最小值,给根元素font-size设置一个定值,当屏幕大于一个最大值,给根元素font-size设置一个定值;最大和最小之间,等比例增加font-size,每一份所占font-size为:
(max-fontsize - min-fontsize) / (max-screen - min-screen)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rem demo</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1, minimum-scale=1">
    <style>
    	.demo{
    		width:2rem;
    		height:2rem;
    		position:absolute;
    		top:0;
    		left:0;
    		right:0;
    		bottom:0;
    		margin:auto;
    		padding:0.1rem;
    		box-shadow:inset 0px 0px 0.2rem 0.01rem #1db11d;
    		font-size:0.4rem;
    		color:red;
    		font-family: "arial";
    	}
    	@media screen and (min-width: 240px) and (max-width:1500px){
			html{
				font-size:calc(100vw/10); /* 将屏幕10等分 */
			}
		}
		@media screen and (min-width: 1500px){
			html{
				font-size:200px;
			}
		}
		/*
		方案二:
		@media screen and (min-width: 240px) {html{font-size:32px;}}
		@media screen and (min-width: 320px) {html{font-size:42.66px;}}
		@media screen and (min-width: 360px) {html{font-size:48px;}}
		@media screen and (min-width: 375px) {html{font-size:50px;}}
		@media screen and (min-width: 400px) {html{font-size:53.33px;}}
		@media screen and (min-width: 414px) {html{font-size:55.2px;}}
		@media screen and (min-width: 440px) {html{font-size:58.66px;}}
		@media screen and (min-width: 480px) {html{font-size:64px;}}
		@media screen and (min-width: 520px) {html{font-size:69.33px;}}
		@media screen and (min-width: 560px) {html{font-size:74.66px;}}
		@media screen and (min-width: 600px) {html{font-size:80px;}}
		@media screen and (min-width: 640px) {html{font-size:85.33px;}}
		@media screen and (min-width: 680px) {html{font-size:90.66px;}}
		@media screen and (min-width: 720px) {html{font-size:96px;}}
		@media screen and (min-width: 760px) {html{font-size:101.33px;}}
		@media screen and (min-width: 800px) {html{font-size:106.66px;}}
		@media screen and (min-width: 960px) {html{font-size:128px;}}
		*/
		/*
		 方案三
		html{
			font-size:50px
		}
		@media screen and (min-width: 400px) and (max-width: 960px){
			html{font-size:calc( ( 78 / 560 ) * ( 100vw - 400px ) + 50px );}
		}
		@media screen and (min-width: 960px){
			html{font-size:128px;}
		}
		*/
    </style>
</head>
<body>
	<div class="demo">
		hello,这里是rem demo!
	</div>
	
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值