rem是设计响应式网页的神器,由于rem单位是相对HTML元素的font-size属性的,所以当使用rem做为属性单位时,当改变HTML元素的font-size,其余使用rem做为单位的元素也会跟着适配大小。那么如何根据屏幕的大小制做一个响应式的网页呢。css
这里先说说用css媒体查询,以下面所示,屏幕查询能够指定一个屏幕大小,当屏幕是你指定的大小时,它就会运行里面的代码,可是这种方法有一个缺点---它并不能控制更加精确的尺寸,因此咱们可使用vm来解决这个问题。html
<style> body,div{ margin:0; padding:0; } html{ font-size:12px; } @media screen and (min-width:320px){ html{ font-size:14px; } } @media screen and (min-width:640px){ html{ font-size:16px; } } @media screen and (min-width:1000px){ html{ font-size:18px; } } .box{ width:10rem; height:10rem; font-size:2rem; background-color:pink; } </style> <div class="box">rem</div>
视口单位能够用来什么,好比:布局
这几个单位是相对于视口的,也就是可视区域,总共分红了100份。若是想让一个字体的大小在指定的区间内变化,好比可视区域的大小在980px-320px时,让字体的大小在14-20之间变化,能够字体
14-(20-14)*(980-320)/(980-320)spa
<style> body,div{ margin:0; padding:0; } html{ font-size:20px; } @media screen and (max-width:980px){ html{ font-size:calc(14px+6*(100vm-320px)/660); } } .box{ width:10rem; height:10rem; font-size:2rem; background-color:pink; } </style> <div class="box">rem</div>
除了用这些基于视口的单位来作响应式,还能够作一些其余的事情。咱们知道,若是某个值能够继承,则百分比参照的是父元素计算的值。而当父元素不设置高度时,则是根据子元素高度来肯定的。因此,若是没有直接设置宽度和高度,100%的设置是没有做用的。若是用视口单位,就不会有这种状况了,由于它是相对屏幕可视区的设计
.box{ width:100vw; height:100vh; background-color:pink; }
若是要实现水平垂直居中code
<style> body,div{ margin:0; padding;0; } .box{ width:100px; height:100px; margin-left:calc(50vw-50px); margin-top:calc(50vh-50px); background-color;pink; } </style> <div class="box">hello css</div>
用视口来实现网格布局htm
<style> body,div{ margin:0; } .column-1{ float:left; width:100vw; } .column-2{ float:left; width:calc(100vw/2); } .column-3{ float:left; width:calc(100vw/3); } body>div{ overflow;hidden; } div>div{ height:35px; outline:1px solid #dedede; } .box-1 div{ background-color:red; } .box-2 div{ background-color:orange; } .box-3 div{ background-color:pink; } </style> <div class="box-1"> <div class="column-1"></div> </div> <div class="box-2"> <div class="column-2"></div> <div class="column-2"></div> </div> <div class="box-3"> <div class="column-3"></div> <div class="column-3"></div> <div class="column-3"></div> </div>
另外,当须要将图片按照屏幕的比例显示时,用视口单位也是不错的选择继承
ch是一个相对于数字0的大小,好比定义了5ch的宽度,那么就只能装下5个0。实际上1ch=1个英文=1个数字,2ch=1个中文。图片
<style> body,div{ margin:0; padding:0; } .box{ width:5ch; background-color:grey; } </style> <div class="box"> 000000 </div>
若是项目须要限制输入个数,可使用下面代码
<style> body,div{ margin:0; padding:0; } h1{ width:18ch; overflow: hidden;//超出隐藏 white-space: nowrap;//防止换行 text-overflow: ellipsis;//省略号 font-size: 50px; background-color: deeppink; } </style> <h1> 标题被限制输入了,超出隐藏哦。 </h1>