css中em和rem的区别-程序员宅基地

在css中单位长度用的最多的是px、em、rem,这三个的区别是:

  px是固定的像素,一旦设置了就无法因为适应页面大小而改变。

  em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。

对于em和rem的区别一句话概括:em相对于父元素,rem相对于根元素。

rem中的r意思是root(根源),这也就不难理解了。

 

em

  • 子元素字体大小的em是相对于父元素字体大小
  • 元素的width/height/padding/margin用em的话是相对于该元素的font-size

上代码:

复制代码
<div>
    我是父元素div
    <p>
        我是子元素p
        <span>我是孙元素span</span>
    </p>
</div>
复制代码
复制代码
div {
  font-size: 40px;
  width: 10em; /* 400px */
  height: 10em;
  border: solid 1px black;
}
p {
  font-size: 0.5em; /* 20px */ 
  width: 10em; /* 200px */
  height: 10em;
  border: solid 1px red;
}
span {
  font-size: 0.5em;  
  width: 10em;
  height: 10em;
  border: solid 1px blue;
  display: block;
}
复制代码

结果如下:

巩固测验:你能说出孙元素span的font-size和width吗?

答案:我猜你会说10px、100px,哈哈,其实逻辑上是正确的,但是如果你是chrome浏览器我不得不告诉你应该是12px、120px。因为chrome设置的最小

字体大小为12px,意思就是说低于12px的字体大小会被默认为12px,当然这一尬境可以由css3解决,这里就不多说了。

 

chrome默认的字体大小是12px,也就是1em默认为12px,如果最外层的父元素直接把font-size设为1.5em,那么该元素的字体大小为18px(12*1.5)。

 

rem

rem是全部的长度都相对于根元素,根元素是谁?<html>元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。

上代码:(html代码如上,只是把css代码的元素长度单位变了)

复制代码
html {
    font-size: 10px;
    }
div {
    font-size: 4rem; /* 40px */
    width: 30rem;  /* 300px */
    height: 30rem;
    border: solid 1px black;
}
p {
    font-size: 2rem; /* 20px */
    width: 15rem;
    height: 15rem;
    border: solid 1px red;
}
span {
    font-size: 1.5rem;
    width: 10rem;
    height: 10rem;
    border: solid 1px blue;
    display: block;
} 
复制代码

所以你可以说出span的font-size具体值吗?

当用rem做响应式时,直接在媒体中改变html的font-size那么用rem作为单位的元素的大小都会相应改变,很方便。

看到这里我想我们都更深刻的体会了em和rem的区别(参照物不同)。

 

总结

在做项目的时候用什么单位长度取决于你的需求,我一般是这样的:

像素(px):用于元素的边框或定位。

em/rem:用于做响应式页面,不过我更倾向于rem,因为em不同元素的参照物不一样(都是该元素父元素),所以在计算的时候不方便,相比之下rem就只有一个参照物(html元素),这样计算起来更清晰。

转载于:https://www.cnblogs.com/nannan1221/p/10772977.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30687051/article/details/99047055

智能推荐

OpenLayers-Geometry格式转换-程序员宅基地

文章浏览阅读341次。Geometry有多种格式,例如WKT, GML, KML等格式。OpenLayers提供Geometry格式的转换方法,可以实现不同格式的Geometry的转换。Geometry格式转换类位于OpenLayers.Format命名空间下。本文以WKT--> GML的转换来说明OpenLayers Geometry格式转换方法的使用。1. 定义WKT Geometry..._openlayers 单几何转多几何

十五. MySQL explain 执行计划_start temporary-程序员宅基地

文章浏览阅读409次。目录一. EXPLAIN 执行计划基础解释二. EXPLAIN 字段解释id一. EXPLAIN 执行计划基础解释解释: 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySql是如何处理接收的SQL语句的,然后进行指定的修改通过EXPLAIN+SQL语句,查看该语句的执行计划,执行顺序,可以获取到当前执行的SQL语句的查询耗时时间,索引是否生效,使用了几个索引等…,分析优进行优化,借用大神整理的EXPLAIN用法,EXPLAIN作用查看表的读取顺序数据读取操作的操作类型_start temporary

NR5G R17 Cell selection and reselectio——小区选择和重选_nr同频小区重选-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏43次。本文设计NR小区选择和小区重选,包括异频、异系统以及同频和同优先级异频的小区重选。_nr同频小区重选

android html audio,html5 用audio的playbackRate属性控制播放速度在安卓手机不起作用?...-程序员宅基地

文章浏览阅读209次。speed:function(th){varself=this,speed=$(th).data('speed');self.Audio.playbackRate=speed;console.log("speed="+speed)}speed 有0.5 , 0.8 , 1 几种速度,在ios上没有问题,但是我的安卓手机却没有反应,不知是什么原因..._audio控制速度属性

matlab中plot画图参数的设置_matlab plot图例怎么设置false-程序员宅基地

文章浏览阅读9.5k次,点赞3次,收藏16次。Matlab画图中的参数设置_matlab plot图例怎么设置false

靶场-Hacker_Kid-v1.0.1-程序员宅基地

文章浏览阅读193次。5.nmap扫描出来的信息知道这里是tornado框架,可能存在ssti注入,测试:192.168.12.170:9999/?name={{3*3}}3.对9999端口的登录页面进行登录,用户admin失败,saket/Saket!2./usr/bin/python2.7 权限设置是有问题的,查找与root相关的进程。base64解密后,发现用户名和密码:admin/Saket!2.对靶机ip进行端口扫描,53端口、80端口和9999端口。1.主机发现,发现靶机ip:192.168.12.170。_hacker_kid-v1.0.1

随便推点

Unity 创建ab包(AssetBundle)_u3d如何定义为ab包-程序员宅基地

文章浏览阅读1k次。* AssetBundle:简称AB包* 用处:1.ab是一个压缩包:包含模型,贴图,预制体,声音,甚至整个场景,可以在游戏运行的时候加载* 2.它自身保存着互相依赖的关系* 3.压缩包:LZMA和LZ4压缩算法,减少包的体积大小,更快的进行网络传输* 4.把一些可以下载的内容放在AB包里面,可以减少安装包的大小*** ab包:* 1.存在于硬盘上的文件,这个压缩包我们可以认为是一..._u3d如何定义为ab包

CV资源:网站,Companies,Labs及牛人-程序员宅基地

文章浏览阅读499次。学习网站:http://videolectures.net/ (you can find everything)https://www.learnopencv.com/companies:(1) Google AI:https://ai.google/about/(2) Facebook AI Research (FAIR):https://research.fb.com/...

【Linux监控平台搭建】Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做和Zabbix客户端安装_zabbix server 和客户端要求版本一直吗-程序员宅基地

文章浏览阅读281次。一、Linux监控平台介绍cacti、nagios、zabbix、smokeping、open-falcon等等 cacti、smokeping偏向于基础监控,成图非常漂亮 cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取_zabbix server 和客户端要求版本一直吗

xwiki的搭建及jetty升级_jetty容器怎么升级-程序员宅基地

文章浏览阅读663次。本文属于原创,未经过允许,请勿转载Topic1: 如何搭建xwikixwiki的搭建对于自己学习或者小型范围内的使用,建议直接安装带有flavor版本的xwiki, 因为distribution的版本在安装完后初始化在国内网的情况下, 插件下载不下来,导致页面不够友好。步骤1:下载 xwiki包:https://www.xwiki.org/xwiki/bin/view/Downl..._jetty容器怎么升级

安卓项目连接虚拟机出现MIT droid4x-win(minsdk(api 21))> devicesdk(×××)_mitdroid4x-程序员宅基地

文章浏览阅读381次。MIT droid4x-win(minsdk(api 21))> devicesdk(×××)今天又是被安卓搞崩溃????的一天!!!上午代码五分钟,调试两小时。被安卓自带的虚拟机气的都困????了,到了上课时间,便想喜新厌旧了。下午下了一个海马玩模拟器(Droid4X,听说现在官网被黑了,下不到,想下的小伙伴请移步我的下载区),流畅的一批啊。这谁**还用安装虚拟机啊,海马玩它不香吗???(非..._mitdroid4x

Netty系列之Netty 服务端创建(绝对好文)-程序员宅基地

文章浏览阅读96次。2019独角兽企业重金招聘Python工程师标准>>> ..._netty能创建多少种类型的服务

推荐文章

热门文章

相关标签