一、关于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()进行自适应布局相关推荐

  1. H5+JS+相对单位rem实现第三方支付页(输入金额+模拟数字键盘+自适应布局+大写金额)

    最近做了个第三方支付页,H5+JS+相对单位rem实现(输入金额+模拟数字键盘+自适应布局+大写金额). 源码github地址:https://github.com/XieTongXue/how-to ...

  2. CSS 中px、em、rem、%、vw、vh单位之间的区别详解【全网最全】

    一.px(像素) [绝对单位,页面按精确像素展示] px就是pixel(像素)的缩写,相对长度单位,相对于屏幕分辨率. px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不 ...

  3. 面试总结(CSS 的盒模型?、CSS 中选择器的优先级以及 CSS 权重如何计算?、CSS 中哪些属性可继承,哪些不可以?、CSS 单位中 px、em 和 rem 的区别?、rem 适配....)

    CSS 的盒模型?         盒子模型(Box Modle)可以用来对元素进行布局,包括内边距,边框,外边距,和实际 内容这几个部分                 第一种是 W3C 标准的盒子 ...

  4. css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks

    前言 大概五月份的时候,我下定决心写自己的博客系统,于是断断续续花了近一个月的时间琢磨Nestjs,写完了接口部分.六月份因为工作的原因就搁置了,说来也惭愧,直到九月中旬,才将它拾起.半个月后,后台部 ...

  5. 关于使用rem单位,calc()进行自适应布局

    关于css中的单位 大家都知道在css中的单位,一般都包括有px,%,em等单位,另外css3新增加一个单位rem. 其中px,%等单位平时在传统布局当中使用的比较频繁,大家也比较熟悉,不过px单位在 ...

  6. 深究--CSS中px、rem与em的区别

    前言:随着PC端的网页盛行,移动端作为重要的一部分,也是火热的发展,但是鉴于一些单位的使用,我们并不知道该怎样去使用,那么今天我们来看看常用的三种单位PX.rem与em. 目录: 一.PX 1.概念: ...

  7. css中em和rem是什么,有什么区别?

    文章目录 前言 一.em是什么? 二.rem是什么? 三.em和rem的区别 前言 在我们学习css的时候会遇到三种常见的长度单位:px.em.rem.px是像素,相信大家并不陌生,那em和rem又是 ...

  8. [css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位?

    [css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位? 禁止用户缩放页面 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主 ...

  9. [css] rem是如何实现自适应布局的?

    [css] rem是如何实现自适应布局的? 其大小与设置的html根大小相对 通过js获取当前页面的宽度,动态的调整 html{ font-size: 5px; } 来改变整个页面对应的字体大小 个人 ...

最新文章

  1. Java多线程的同步机制(synchronized)
  2. C#可选参数、命名参数、参数数组
  3. 自动生成存储过程的脚本
  4. 跨平台与云端创新,为企业和开发者开辟更广阔的未来
  5. P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】
  6. 搜索引擎的那些事(32位MD5算法)
  7. 创业失败感悟第二十九天
  8. python电脑配置-入门学python需要什么配置的电脑?
  9. java框架ssm面试题2016_Java面试-框架篇(SSM-SpringMVC)
  10. 模板类的声明和定义要放在同一个文件
  11. 【2017-04-16】抽象类、接口、构造函数、重载和重写的区别、静态成员和方法
  12. 怎样保证linux内核安全性,技术|如何做好 Linux 内核安全处理
  13. 电脑照片抠图软件哪个好?来看看这两个简单好用的工具
  14. Java怎样实现验证码?
  15. 有一行电文,已按以下规律译成密码: A-Z a-z B-Y b-y C-X c-x,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并
  16. Android 页面布局xd,页面布局(XD):小尺寸设备上的页面布局《 从设计到代码:布局设计 》...
  17. 动态路由协议:华为路由配置OSPF实验
  18. mac如何共享windows的打印机
  19. NETBASE DAY05(04):设计大型网络拓扑图
  20. Python小记:14.数据分析基础知识点汇总

热门文章

  1. IDEA修改运行内存
  2. 《麦田里的守望者》感
  3. hadoop+HBase+ZooKeeper+Hive完全分布式集群部署安装
  4. 微信二维码海报推广示例
  5. 《95后的指数基金投资课》基础阶段:常见指数与如何投资指数
  6. [Mybatis]复杂环境下的SQL
  7. Android项目 moudle和library转换
  8. 3. Caller 服务调用 - dapr
  9. C语言32位系统下基本类型数据所占字节数
  10. 信号完整性(SI)电源完整性(PI)学习笔记(五)电容的物理基础