rem
是相对长度单位,是指相对于根元素(即html元素)font-size(字号大小)的倍数。css
font-size
为 12pxhtml { font-size: 12px; } h1 { font-size: 2rem; /* 2 × 12px = 24px */ } p { font-size: 1.5rem; /* 1.5 × 12px = 18px */ } div { width: 10rem; /* 10 × 12px = 120px */ }
font-size
为 16pxhtml { font-size: 16px; } h1 { font-size: 2rem; /* 2 × 16px = 32px */ } p { font-size: 1.5rem; /* 1.5 × 16px = 24px */ } div { width: 10rem; /* 10 × 16px = 160px */ }
vw
是相对长度单位,相对于浏览器窗口的宽度,浏览器窗口宽度被均分为100个单位的vwhtml
p { font-size: 5vw; /* 5 × 3.2px = 16px */ } div { width: 20vw; /* 20 × 3.2px = 64px*/ }
p { font-size: 5vw; /* 5 × 3.75px = 18.75px */ } div { width: 20vw; /* 20 × 3.75px = 75px*/ }
示例:
以 iPhone 6/7/8/X 的屏幕宽度 375px 做为基准窗口宽度;
以 15px 最为 html
元素的 font-size
,即rem单位的基本长度。jquery
html { font-size: 15px; } h1 { font-size: 2rem; /* 2 × 15px = 30px */ } p { font-size: 1.2rem; /* 1.2 × 15px = 18px */ } div { width: 10rem; /* 10 × 15px = 150px*/ }
注意:html
元素的font-size
不宜过大,也不宜太小。
当font-size
过大时,以其为基准的 rem 数值会出现精度丢失,形成较大的偏差。
当font-size
太小时,因为不少主流浏览器font-size
不能小于12px,当font-size
小于12px 时,会以 12px 展现。此时,rem 单位会以 12px 为基准进行计算,页面就会整个跑偏。
窗口宽度:375px => 1vw = 3.75px => 15px = ( 15 / 3.75 )vw = 4vw
所以, html 元素的 font-size 能够替换为 4vw浏览器
html { font-size: 4vw; } h1 { font-size: 2rem; /* 2 × 4vw × 3.75px = 30px */ } p { font-size: 1.2rem; /* 1.2 × 4vw × 3.75px = 18px */ } div { width: 10rem; /* 10 × 4vw × 3.75px = 150px*/ }
当窗口宽度调整为320px时spa
1vw = 3.2px 4vw = 4 × 3.2px = 12.8px
html { font-size: 4vw; } h1 { font-size: 2rem; /* 2 × 4vw × 3.2px = 25.6px */ } p { font-size: 1.2rem; /* 1.2 × 4vw × 3.2px = 15.36px */ } div { width: 10rem; /* 10 × 4vw × 3.2px = 128px*/ }
可见,此时全部以rem为单位的字号和长度都会随着屏幕宽度的放大和缩小而进行等比例缩放。scala
重要的事情说第二遍
注意:html
元素的font-size
不宜过大,也不宜太小。
当font-size
过大时,以其为基准的 rem 数值会出现精度丢失,形成较大的偏差。
当font-size
太小时,因为不少主流浏览器font-size
不能小于12px,当font-size
小于12px 时,会以 12px 展现。此时,rem 单位会以 12px 为基准进行计算,页面就会整个跑偏。
窗口宽度300px时code
1vw = 3px 4vw = 4 × 3px = 12px
窗口宽度500px时htm
1vw = 5px 4vw = 4 × 5px = 20px
@media screen and (max-width: 300px) { html { width: 300px; font-size: 12px; } } @media screen and (min-width: 500px) { html { width: 500px; font-size: 20px; margin: 0 auto; /* 让窗口水平居中展现 */ } }
<!DOCTYPE html> <html lang="en"> <head> <title>WAP页面</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body id="wap"> 我是WAP页面 <script src="https://mat1.gtimg.com/libs/jquery2/2.2.0/jquery.js"></script> <script> function adapt() { var agent; var clientWidth = document.body.clientWidth; console.log(clientWidth); if (clientWidth < 800) { agent = 'wap'; } else { agent = 'pc' } if ($('body').attr('id') !== agent) { location.href = 'pc.html'; } } adapt(); window.onresize = function(){ adapt(); }; </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <title>我是PC页面</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body id="pc"> 我是PC页面 <script src="https://mat1.gtimg.com/libs/jquery2/2.2.0/jquery.js"></script> <script> function adapt() { var agent; var clientWidth = document.body.clientWidth; console.log(clientWidth); if (clientWidth < 800) { agent = 'wap'; } else { agent = 'pc' } if ($('body').attr('id') !== agent) { location.href = 'wap.html'; } } adapt(); window.onresize = function(){ adapt(); }; </script> </body> </html>