用rem实现响应式页面开发

简介: rem是什么?     rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。

rem是什么?

    rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

    网页中的根元素指的是html我们通过设置html的字体大小就可以控制rem的大小。


html{
	font-size:20px;
}

.btn {
    width: 6rem;
    height: 3rem;
    line-height: 3rem;
    font-size: 1.2rem;
    display: inline-block;
    background: #06c;
    color: #fff;
    border-radius: .5rem;
    text-decoration: none;
    text-align: center;    
}
 


上面代码结果按钮大小如下图:

1418899506.jpeg


*看完rem原理,接下来我们看一个实例


 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>rem测试页面</title>
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<link rel="stylesheet" href="../base/reset.css"/>
<link rel="stylesheet" href="girl.css" />
</head>
<script type="text/javascript">
new function (){
var _self = this;
_self.width = 640;//设置默认最大宽度
_self.fontSize = 100;//默认字体大小
_self.changePage = function(){
var p = (document.documentElement.getBoundingClientRect().width)/_self.width;
console.log(p);
document.getElementsByTagName("html")[0].setAttribute("style","font-size:"+p*_self.fontSize+"px !important");
};
_self.changePage();
window.addEventListener("resize",function(){_self.changePage();},false);
};
</script>
<!--注释-->
<!--设置如上js代码,动态计算,给html、body设置font-size大小,-->
<!--在iPhone5上为50px;-->
<!--例如,用户头像宽高为25px;则设置为0.5rem,宽高就会随屏幕大小自适应-->
<body>
<div class="content">
<section class="head-wrapper">
<div class="head-img"></div>
<div class="head-name">小学妹</div>
<div class="head-task">
<div class="task-img"></div>
<div class="task-text">我的任务</div>
</div>
</section>
<section class="banner-wrapper">
<div class="banner-img"></div>
</section>
<section class="task-wrapper">
<div class="task-item">
<div class="task-head"></div>
<div class="task-name">Enson 完成了一个关于清华大学的任务</div>
</div><div class="task-item">
<div class="task-head"></div>
<div class="task-name">Enson 完成了一个关于清华大学的任务</div>
</div>
</section>
<section class="foot-wrapper">
<div class="foot-btn">求帮忙</div>
<div class="foot-btn">去帮忙</div>
</section>
</div>
</body>
</html>


以上是页面布局和js动态计算html  font-size小心的代码,页面元素大小都用rem单位进行设置,当然有的元素宽度可以用百分比进行设置,大家可以参照demo进行学习。


2017-09-28 更新

*上面所写的方法中,根据手机屏幕的宽度用js动态给html赋值font-size的方法可以用 font-size:62.5%;和@media进行替代。能够达到同样的效果,同时也减少了代码量。如下:

@media only screen and (min-width: 320px) {
html{
font-size: 52.5%;
}
}
@media only screen and (min-width: 375px) {
html{
font-size: 62.5%;
}
}
@media only screen and (min-width: 414px) {
html{
font-size: 72.5%;
}
}

通过@media 媒体查询属性来动态给html赋值。效果如下

7368e9e5fb4a5d480587e9000b1df010bb1eee39   b4310ff99e57169b06b5abf65563a5282c7c5c3a   7368e9e5fb4a5d480587e9000b1df010bb1eee39


相关文章
|
3天前
|
编解码 前端开发 iOS开发
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
40 1
|
1月前
|
前端开发 开发者 UED
构建响应式网页布局的现代方法
【2月更文挑战第13天】随着移动互联网的兴起,为不同设备设计适配的网页变得至关重要。本文深入探讨了使用Flexbox和Grid两种CSS布局技术构建响应式网页的方法,分析了它们的优劣,并通过实例展示了如何有效地运用这些技术以提升页面的响应性和用户体验。
15 2
|
9月前
|
前端开发
让自己的页面更好看,更美观。(css3的动画,2D,css3的布局)
让自己的页面更好看,更美观。(css3的动画,2D,css3的布局)
70 0
|
前端开发 JavaScript 算法
重学前端 39 # CSS的动画和交互
重学前端 39 # CSS的动画和交互
79 0
重学前端 39 # CSS的动画和交互
|
Web App开发 前端开发 JavaScript
|
JavaScript 前端开发 容器
Vue项目中使用vw实现移动端适配
我们在vue移动端项目中的适配一般都采用rem,但是rem也不是能兼容所有的终端。 随着viewport单位越来越受到众多浏览器的支持,下面将简单介绍怎么实现vw的兼容问题,用vw代替rem 当我们采用vue-cli脚手架搭建完项目,安装所有依赖包之后,用npm run dev启动后,在根目录有一个 .postcssrc.js 文件,文件结构如下: vue-cli默认已经安装以上三个插件: postcss-import:相关配置可以点击这里。
3841 0
|
Web App开发 编解码 前端开发