rem css calc,关于使用rem单位、css函数calc()进行自适应布局
一、关于css中的单位
大家都知道在css中的单位,一般都包括有px,%,em等单位,另外css3新增加一个单位rem。
其中px,%等单位平时在传统布局当中使用的比较频繁,大家也比较熟悉,不过px单位在进行自适应布局的过程当中则会有些力不从心,大部分的解决方案是使用%为单位配合@media媒介查询来进行自适应布局。
不过还有另外一个css3新添加的单位也同样可以拿来进行自适应布局,在我看来这种方法也更加方便直观。
1、em和rem
首先先介绍一下em,这个单位是根据其父元素的字体大小来进行计算的,即1em为其父元素的字体大小,例如父元素的字体大小为12px则其子元素的1em为12px,2em则为24px。但是因为其只能针对父元素来进行计算,使用起来因为涉及到大量的运算,很不方便,因此平时使用不是很多。
css3针对这种情况在css3的规范下推出了一个新的单位rem,rem的使用方式和em类似,只不过em是基于其父元素的字体大小来进行计算,而rem则是针对根元素即HTML这个标签的字体大小来进行计算,在这种情况下假如html的字体大小为12px,则在页面中左右元素的1个rem即为12px,2rem为24px。
2、用rem进行自适应布局:简单的自动适配所有屏幕
使用rem进行自适应布局的关键就是给html赋值一个动态的font-size,在这里我们可以在页面dom加载完毕之后使用js获取到页面宽度(高度也可以),然后将其除以一个固定的定量,比如20,然后将结果赋给html的font-size,这样我们就得到了一个会根据页面宽度的变化而不断变化的值,这个值即是1rem。代码如下:
//页面大小出现变化的时候再次获取新的font-size值
$(window).resize(function(){
setHtmlFontSize(20);
})//初始化执行 setHtmlFontSize(20);//动态设置html元素的font-size的方法
function setHtmlFontSize(num){//页面的宽度,其中17为页面默认的导航条的宽度
var _w=document.documentElement.clientWidth-17;
$('html').css('fontSize',_w/num);
}
举个例子,我们先用js获取页面的宽度,除以20进行计算之后,把这个值赋给html的font-size,得到一个根据页面宽度变化而变化的单位1rem,这个时候假如我们拿到的设计稿的宽度是640px,将其除以20,这样我们就得到在页面宽度为640px的情况下1rem即为32px,如果设计稿中的banner图部分的宽度是320px,而高度则是160px,这个部分需要进行自适应,那么我们就可以给这个banner图宽度为320/32=10rem,而高度为160/32=5rem。这样赋值之后假如页面的宽度就是640px,那banner的尺寸为320px160px,宽度是屏幕尺寸的一半,高度为1/4,这个时候假如屏幕变宽为1280px,那这个时候页面中1rem所代表的尺寸就变成了1280/20=64px,banner的尺寸变成了相应的640px320px,宽度依然是屏幕尺寸的一半,高度为1/4。这样就非常简单的实现了自适应的布局赋值。
通过这种动态的设定html的font-size的值之后,我们可以很轻易的给页面上任何地方,例如padding,width,height,margin设置大小,并且这个大小都是自适应的。
二、关于calc()
在进行自适应布局的时候有时候会碰到需要有给固定宽高的地方,比如一个div宽度为屏幕尺寸的一半,但是有10px的padding,那在这种情况下假如我们直接给宽度50%,或者计算完之后的rem单位,再给padding,因为盒模型的关系导致其宽度为50%+20px。但是又因为50%是一个不固定的值,导致很难计算出一个具体的值,在这种情况下我们就可以使用css3中的一个计算方法:calc(),可以设置
div{
width:calc(50% -20px);
}
这样设置之后得到的结果就是计算之后的结果,任何需要给具体的值的地方都可以使用calc来进行计算,不过需要注意目前此方法只能进行 + - * / 的四则运算,并且在计算符号前后都需要有一个空格。当然上面的50%也可以换成计算之后的rem单位。
注意点:calc 内部的表达式,在使用运算符号时,两遍必须加上空格(虽然乘除可以无视,但还是建议带上),不然会解析错误。
总结:
使用rem单位以及calc()方法在进行自适应布局非常强大,可以配合媒介查询,可以非常灵活的控制各种元素的自适应。
rem css calc,关于使用rem单位、css函数calc()进行自适应布局相关推荐
- H5+JS+相对单位rem实现第三方支付页(输入金额+模拟数字键盘+自适应布局+大写金额)
最近做了个第三方支付页,H5+JS+相对单位rem实现(输入金额+模拟数字键盘+自适应布局+大写金额). 源码github地址:https://github.com/XieTongXue/how-to ...
- CSS 中px、em、rem、%、vw、vh单位之间的区别详解【全网最全】
一.px(像素) [绝对单位,页面按精确像素展示] px就是pixel(像素)的缩写,相对长度单位,相对于屏幕分辨率. px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不 ...
- 面试总结(CSS 的盒模型?、CSS 中选择器的优先级以及 CSS 权重如何计算?、CSS 中哪些属性可继承,哪些不可以?、CSS 单位中 px、em 和 rem 的区别?、rem 适配....)
CSS 的盒模型? 盒子模型(Box Modle)可以用来对元素进行布局,包括内边距,边框,外边距,和实际 内容这几个部分 第一种是 W3C 标准的盒子 ...
- css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks
前言 大概五月份的时候,我下定决心写自己的博客系统,于是断断续续花了近一个月的时间琢磨Nestjs,写完了接口部分.六月份因为工作的原因就搁置了,说来也惭愧,直到九月中旬,才将它拾起.半个月后,后台部 ...
- 关于使用rem单位,calc()进行自适应布局
关于css中的单位 大家都知道在css中的单位,一般都包括有px,%,em等单位,另外css3新增加一个单位rem. 其中px,%等单位平时在传统布局当中使用的比较频繁,大家也比较熟悉,不过px单位在 ...
- 深究--CSS中px、rem与em的区别
前言:随着PC端的网页盛行,移动端作为重要的一部分,也是火热的发展,但是鉴于一些单位的使用,我们并不知道该怎样去使用,那么今天我们来看看常用的三种单位PX.rem与em. 目录: 一.PX 1.概念: ...
- css中em和rem是什么,有什么区别?
文章目录 前言 一.em是什么? 二.rem是什么? 三.em和rem的区别 前言 在我们学习css的时候会遇到三种常见的长度单位:px.em.rem.px是像素,相信大家并不陌生,那em和rem又是 ...
- [css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位?
[css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位? 禁止用户缩放页面 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主 ...
- [css] rem是如何实现自适应布局的?
[css] rem是如何实现自适应布局的? 其大小与设置的html根大小相对 通过js获取当前页面的宽度,动态的调整 html{ font-size: 5px; } 来改变整个页面对应的字体大小 个人 ...
最新文章
- Java多线程的同步机制(synchronized)
- C#可选参数、命名参数、参数数组
- 自动生成存储过程的脚本
- 跨平台与云端创新,为企业和开发者开辟更广阔的未来
- P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】
- 搜索引擎的那些事(32位MD5算法)
- 创业失败感悟第二十九天
- python电脑配置-入门学python需要什么配置的电脑?
- java框架ssm面试题2016_Java面试-框架篇(SSM-SpringMVC)
- 模板类的声明和定义要放在同一个文件
- 【2017-04-16】抽象类、接口、构造函数、重载和重写的区别、静态成员和方法
- 怎样保证linux内核安全性,技术|如何做好 Linux 内核安全处理
- 电脑照片抠图软件哪个好?来看看这两个简单好用的工具
- Java怎样实现验证码?
- 有一行电文,已按以下规律译成密码: A-Z a-z B-Y b-y C-X c-x,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并
- Android 页面布局xd,页面布局(XD):小尺寸设备上的页面布局《 从设计到代码:布局设计 》...
- 动态路由协议:华为路由配置OSPF实验
- mac如何共享windows的打印机
- NETBASE DAY05(04):设计大型网络拓扑图
- Python小记:14.数据分析基础知识点汇总