webApp 之 屏幕适配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z_x_Qiang/article/details/85952633

1.em单位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        /*
         *  em:自身的fontsize
         *
            谷歌下字体的默认大小为16px
            谷歌下字体的最小大小为12px
        */
        *{
            margin: 0;
            padding: 0;
        }
        #test {
            /**
            em:自身的fontsize
            width相当于10em*20px=200px
             */
            width: 10em;
            height: 10em;
            background: pink;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="test"></div>
</body>
</html>

2.rem单位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        /*
             * 	rem:相当于html根标签的fontsize
             * 	根标签的fontsize = 1rem
             *
             *  适配:实现页面在不同设备上等比
            */
        *{
            margin: 0;
            padding: 0;
        }
        html{
            font-size: 10px;
        }
        #test {
            /**
            rem:相当于html根标签的fontsize
            width相当于10rem*10px=100px
             */
            width: 10rem;
            height: 10rem;
            background: pink;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="test"></div>
</body>
</html>

3.rem单位优化

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
		<title></title>
		<style type="text/css">
			/*
			 * 	rem:相当于根标签的fontsize
			 * 	根标签的fontsize = 1rem
			 * 
			 *  适配:实现页面在不同设备上等比
			*/
			
			*{
				margin: 0;
				padding: 0;
			}
			#test{
				width: 8rem;
				height: 1rem;
				background: pink;
			}
		</style>
	</head>
	<body>
		<div id="test">test</div>
	</body>
	<script type="text/javascript">
		/*var html = document.querySelector("html");
		html.style.fontSize = document.documentElement.clientWidth/16+"px!important"; 错!!!
		*/
		
		
		//rem适配
		//rem适配原理:改变了一个元素在不同设备上占据的css像素的个数
		/*rem适配的优缺点
			优点:没有破坏完美视口
			缺点:px值到rem的转换太复杂*/
			
		(function(){
			var styleNode = document.createElement("style");
			var w = document.documentElement.clientWidth/16;
			styleNode.innerHTML = "html{font-size:"+w+"px!important}";
			document.head.appendChild(styleNode);
		})()
		
	</script>
</html>

4.viewport适配

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width"/>
		<title></title>
		<style type="text/css">
			
			*{
				margin: 0;
				padding: 0;
			}
			#test{
				width: 320px;
				height: 100px;
				background: pink;
			}
		</style>
	</head>
	<body>
		<div id="test">test</div>
	</body>
	<script type="text/javascript">
		//将所有设备布局视口的宽度调整为设计图的宽度
		/*var targetW = 640;
		var scale = screen.width/targetW;
		var meta = document.createElement("meta");
		meta.name = "viewport";
		meta.content="initial-scale="+scale+",minimum-scale="+scale+",maximum-scale="+scale+",user-scalable=no";
		document.head.appendChild(meta);*/
		
		
		//viewport
		/*viewport适配的原理:
			viewport适配方案中,每一个元素在不同设备上占据的css像素的个数是一样的。但是css像素和物理像素的比例是不一样的,等比的*/
		/*viewport适配的优缺点:
			优点:所量即所得
			缺点:没有使用完美视口*/
		(function(){
			var targetW = 640;
			var scale = document.documentElement.clientWidth/targetW;
			var meta =	document.querySelector("meta[name='viewport']");
			meta.content="initial-scale="+scale+",minimum-scale="+scale+",maximum-scale="+scale+",user-scalable=no";
		})()
		
		
	</script>
</html>

5.一物理像素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
		<title></title>
		<style type="text/css">
			
			*{
				margin: 0;
				padding: 0;
			}
			#test{
				width: 16rem;
				height: 1px;
				margin-top: 1rem;
				background: black;
			}
		</style>
	</head>
	<body>
		<div id="test"></div>
	</body>
	<script type="text/javascript">
		window.onload=function(){
			(function(){
				var dpr  = window.devicePixelRatio||1;
				var styleNode = document.createElement("style");
				var w = document.documentElement.clientWidth*dpr/16;
				styleNode.innerHTML="html{font-size:"+w+"px!important}";
				document.head.appendChild(styleNode);
				
				var scale = 1/dpr;
				var meta = document.querySelector("meta[name='viewport']");
				meta.content="width=device-width,initial-scale="+scale;
			})()
		}
	</script>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
		<title></title>
		<style type="text/css">
			
			*{
				margin: 0;
				padding: 0;
			}
			#test{
				width: 100%;
				height:1px ;
				margin-top: 50px;
				background: black;
			}
			@media only screen and (-webkit-device-pixel-ratio:2 ) {
				#test{
					transform: scaleY(.5);
				}
			}
			@media only screen and (-webkit-device-pixel-ratio:3 ) {
				#test{
					transform: scaleY(.333333333333333333);
				}
			}
		</style>
	</head>
	<body>
		<div id="test"></div>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/z_x_Qiang/article/details/85952633