用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;    
}
 


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


*看完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赋值。效果如下

      


相关文章
|
7月前
|
JavaScript
vue基于vw实现移动端自适应
vue基于vw实现移动端自适应
94 0
|
1月前
|
移动开发 JavaScript 前端开发
"Vue开发者必看:一篇文章教你如何实现px自动转换vw或rem,轻松应对H5页面响应式设计挑战!"
【10月更文挑战第23天】在Vue项目中实现px到vw或rem的自动转换,可以使用PostCSS插件。首先安装`postcss-loader`,然后添加`postcss-px-to-viewport`和`postcss-pxtorem`插件,并在`postcss.config.js`中配置。配置完成后,直接在Vue组件中使用px单位编写样式,PostCSS会自动转换为vw或rem。这样可以简化开发流程,提高代码的可维护性和页面的响应式设计能力。
136 0
|
7月前
|
UED 开发者 容器
【专栏】Flexbox是CSS3的全新布局模式,提供灵活响应式的页面设计
【4月更文挑战第27天】Flexbox是CSS3的全新布局模式,提供灵活响应式的页面设计。其特点包括灵活性、响应式和易理解,通过主轴和交叉轴控制元素排列对齐。核心概念有容器和项目,常用于导航栏、卡片布局、响应式设计、表格和表单布局。关键属性如flex-direction定义主轴方向,justify-content和align-items控制对齐,flex属性调整项目伸缩,order改变排序。在实践中,要关注响应式、代码维护和浏览器兼容性,以优化布局和用户体验。
175 4
|
7月前
|
前端开发 开发者 UED
构建响应式网页布局的现代方法
【2月更文挑战第13天】随着移动互联网的兴起,为不同设备设计适配的网页变得至关重要。本文深入探讨了使用Flexbox和Grid两种CSS布局技术构建响应式网页的方法,分析了它们的优劣,并通过实例展示了如何有效地运用这些技术以提升页面的响应性和用户体验。
|
7月前
|
前端开发 开发者 UED
构建响应式网页布局:Flexbox的全面指南
【2月更文挑战第20天】 随着移动互联网的蓬勃发展,响应式网页设计已成为前端开发中不可或缺的一环。Flexbox作为CSS的新布局模式,为开发者提供了创建灵活和可适应不同屏幕尺寸的布局的强大工具。本文将深入探讨Flexbox的基本概念、关键属性及其在实际项目中的应用,旨在帮助读者掌握这一强大技术,以提升网站的用户体验和前端开发效率。
78 0
|
编解码 前端开发 Android开发
前端页面布局之【响应式布局】
前端页面布局之【响应式布局】
77 0
|
JavaScript 前端开发
Vue3中使用rem布局
不急,一步一步来
791 0
|
JavaScript 前端开发 容器
熹微~~~基于Vue开发的昏暗风格的响应式网页!
熹微~~~基于Vue开发的昏暗风格的响应式网页!
176 1
|
前端开发 开发者 容器
响应式开发-媒体查询扩展
快速学习 响应式开发-媒体查询扩展 |学习笔记