rem、px、em之间的区别以及网页响应式设计写法

个人收藏用,转载自:http://www.w3cplus.com/css3/define-font-size-with-css3-rem

在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px vs. pt vs. percent这样的PK大局。不幸的是,仍然有不同的利弊,使各种技术都不太理想,但又无法不去用。真是进也难,退也难呀。

最近在学习em的相关知识的时候,无意之间让我拾得一宝,就是使用rem来设置Web页面的字体大小。让我一下子就来劲了,一口气看完并测试了一回,还真是爽歪歪的呀。师傅说好东西不能吃独食,于我就在这里给大家吹吹这个从没见过的REM

在详细介绍rem之前,我们先一起来回顾一下我们常用的两种记量单位,也是备受争论的两个:

  1.  PX为单位
  2.  EM为单位

PX为单位

在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小,这时会使用我们的Web页面布局被打破。这样对于那些关心自己网站可用性的用户来说,就是一个大问题了。因此,这时就提出了使用“em”来定义Web页面的字体。

em为单位

前面也说了,使用是“px”为单位是比较方便,而又一致,但在浏览器中放大或缩放浏览页面时会存在一个问题,要解决这个问题,我们可以使用“em”单位。Richard Rutter'在《How to size text using ems》一文中有做过详细的介绍,追至早一点,Richard Rutter也在《How to Size Text in CSS》中进行过深入的剖析。

这种技术需要一个参考点,一般都是以<body>的“font-size”为基准。比如说我们使用“1em”等于“10px”来改变默认值“1em=16px”,这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。

    body {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}h1 {font-size: 2.4em; /*2.4em × 10 = 24px */}p    {font-size: 1.4em; /*1.4em × 10 = 14px */}li {font-size: 1.4em; /*1.4 × ? = 14px ? */}

 

为什么“li”的“1.4em”是不是“14px”将是一个问号呢?如果你了解过“em”后,你会觉得这个问题是多问的。前面也简单的介绍过一回,在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值,其真正的计算公式是:

1 ÷ 父元素的font-size × 需要转换的像素值 = em值

这样的情况下“1.4em”可以是“14px”,也可以是“20px”,或者说是“24px”,总之是一个不确定值,那么解决这样的问题,要么你知道其父元素的值,要么呢在任何子元素中都使用“1em”。这样一来可能又不是我们所需要的方法。

这里我只是简单的介绍了一个这两个单位的使用,具体一点的大家可以参阅:

  1.  Best Practices的站长Kyle的《CSS Font-Size: em vs. px vs. pt vs. percent》
  2.  Converting px into percentage and em for relative CSS font sizes
  3.  Em Vs Percent Widths
  4.  CSS: Units of Measurement
  5.  Jennifer Kyrnin的Using Points, Pixels, Ems, or Percentages for CSS Fonts

Rem为单位

CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem。在W3C官网上是这样描述rem的——“font size of the root element” 。下面我们就一起来详细的了解rem。

前面说了“em”是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。而rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值,,在根元素中设置多大的字体,这完全可以根据您自己的需,大家也可以参考下图:

我们来看一个简单的代码实例:

                     

            html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}body {font-size: 1.4rem;/*1.4 × 10px = 14px */}h1 { font-size: 2.4rem;/*2.4 × 10px = 24px*/}

 

我在根元素<html>中定义了一个基本字体大小为62.5%(也就是10px。设置这个值主要方便计算,如果没有设置,将是以“16px”为基准 )。从上面的计算结果,我们使用“rem”就像使用“px”一样的方便,而且同时解决了“px”和“em”两者不同之处。

浏览器的兼容性

rem是CSS3新引进来的一个度量单位,大家心里肯定会觉得心灰意冷呀,担心浏览器的支持情况。其实大家不用害怕,你可能会惊讶,支持的浏览器还是蛮多的,比如:Mozilla Firefox 3.6 、Apple Safari 5 、Google Chrome、IE9 和Opera11 。只是可怜的IE6-8无法,你们就把他们当透明了吧,我向来都是如此。

不过使用单位设置字体,可不能完全不考虑IE了,如果你想使用这个REM,但也想兼容IE下的效果,可你可考虑“px”和“rem”一起使用,用"px"来实现IE6-8下的效果,然后使用“Rem”来实现代浏览器的效果。就让IE6-8不能随文字的改变而改变吧,谁让这个Ie6-8这么老呢?哈。。。。大家不仿试试,还蛮有意思,说不定这个就是主流的度量单位了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏服务器架构图

1&#xff1a;ARPG类型游戏 2:MMORPG 3:MOBA 4:卡牌类 5&#xff1a;棋盘类 转载于:https://www.cnblogs.com/like-minded/p/8297718.html

GlassFish 4带来了Java EE 7

真是惊喜 除了推出新的iOS 7外&#xff0c;苹果在wwdc上什么也没提供。 碰巧的是&#xff0c;在他们的主题演讲后不久&#xff0c;又有7个人正式露面。 GlassFish 4.0已于昨天晚上发布&#xff08;显然是不需要的&#xff09;。 新的Java EE 7参考实现自动成为当今第一个可用的…

bootstrap的栅格布局与两列布局结合使用

在工作中我们常常需要实现响应式布局&#xff0c;这个可以使用bootstrap的栅格系统来实现&#xff0c;我们在列里也需要实现一部分的响应式。比如下面的效果图&#xff0c;需要实现左边图标固定&#xff0c;右边的自适应 &#xff1a; 左边固定宽度&#xff0c;右边自适应&…

JVM性能魔术技巧

HotSpot是我们众所周知和喜爱的JVM&#xff0c;是Java和Scala汁流淌的大脑。 多年来&#xff0c;许多工程师对其进行了改进和调整&#xff0c;并且在每次迭代中&#xff0c;其代码执行的速度和效率都接近本机编译代码。 JIT&#xff08;“即时”&#xff09;编译器是其核心。…

mysql 10个日期,MySQL自学篇(10)——日期函数

MySQL自学篇(十)——日期函数日期和时间函数(1)获取当前日期的函数和时间的函数CURDATE()和CURRENT_DATE()函数&#xff0c;获取当前日期select current_date(),curdate(),curdate()0;curdate()0 表示将当前时间转化为数值型CURTIME()和CURRENT_TIME()获取当前时间select cur…

python-flask-请求源码流程

启动先执行manage.py 中的 app.run() class Flask(_PackageBoundObject):   def run(self, hostNone, portNone, debugNone, **options):from werkzeug.serving import run_simpletry:#run_simple 是werkzeug 提供的方法&#xff0c;会执行第三个参数 self()run_simple(ho…

正则表达式强化,爬虫练习

re模块下的常用方法 import re ret re.findall(\d(\.\d)?, 1.232.34)   print(ret) 结果&#xff1a; [.23,.34] # findall的正则表达式里面有分组(),()里面的内容优先显示 ret re.findall(\d(?:\.\d)?, 1.232.34)print(ret)    结果&#xff1a;…

Linux LVM管理

LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。 本文内容&#xff1a; 创建和管理LVM扩容LVM分区一、创建和管理LVM 要创建一个LVM系统&#xff0c;一般需要经过以下步骤&#xff1a; 1、 创建…

USB OTG插入检测识别

一 USB引脚一般四根线&#xff0c;定义如下&#xff1a; 为支持OTG功能&#xff0c;mini/micro usb接口扩展了一个ID引脚&#xff08;第4脚&#xff09; A设备端ID脚接地&#xff0c;则初始状态为Host&#xff0c;例如PC和支持OTG设备做主设备时 B设备端ID脚悬空&#xff0c;默…

CSS3与页面布局学习笔记(三)——BFC、定位、浮动、7种垂直居中方法

一、BFC与IFC 1.1、BFC与IFC概要 BFC&#xff08;Block Formatting Context&#xff09;即“块级格式化上下文”&#xff0c; IFC&#xff08;Inline Formatting Context&#xff09;即行内格式化上下文。常规流&#xff08;也称标准流、普通流&#xff09;是一个文档在被显示…

Java垃圾回收(2)

并行清理 今天&#xff0c;我们介绍了并行GC的工作原理。 具体来说&#xff0c;这是在Eden上运行Parallel Scavenge收集器&#xff0c;在Tenured一代中运行Parallel Mark and Sweep收集器的组合。 您可以通过传递-XX&#xff1a; UseParallelOldGC来获得此选项&#xff0c;尽管…

Navicat Premium创建MySQL存储过程

1、使用Navicat Premium打开创建函数向导&#xff0c;操作&#xff1a;连接名——数据库——函数——新建函数 2、选择过程——输入存储过程参数——完成&#xff08;这一步可以不填写参数&#xff0c;编写存储过程代码的时候设置参数&#xff09; 3、按照要求完成存储过程代码…

CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset

一、盒子模型&#xff08;Box Model&#xff09; 盒子模型也有人称为框模型&#xff0c;HTML中的多数元素都会在浏览器中生成一个矩形的区域&#xff0c;每个区域包含四个组成部分&#xff0c;从外向内依次是&#xff1a;外边距&#xff08;Margin&#xff09;、边框&#xff…

mysql中将某个字段做计算,mysql创建计算字段使用子查询教程

作为计算字段使用子查询使用子查询的另一方法是创建计算字段。假如需要显示 customers表中每个客户的订单总数。订单与相应的客户ID存储在 orders 表中。为了执行这个操作&#xff0c;遵循下面的步骤。(1) 从 customers 表中检索客户列表。(2) 对于检索出的每个客户&#xff0c…

Android GreenDao使用教程

一、Greendao简介 Greendao是一款用于数据库创建与管理的框架&#xff0c;由于原生SQLite语言比较复杂繁琐&#xff0c;使得不少程序员不得不去学习SQLite原生语言&#xff0c;但是学习成本高&#xff0c;效率低下&#xff0c;所以不少公司致力于开发一款简单的数据库管理框架&…

Java垃圾回收(1)

这是有关垃圾收集&#xff08;GC&#xff09;的系列文章中的第一篇。 我希望能够涵盖整个系列过程中的理论知识以及热点虚拟机中的所有主要收集器。 这篇文章仅说明什么是垃圾回收&#xff0c;以及不同回收器共有的元素。 我为什么要在乎&#xff1f; 您的Java虚拟机可以为您管…

少锁定Java对象池

自从我写任何东西以来已经有一段时间了&#xff0c;我一直在忙于我的新工作&#xff0c;该工作涉及在性能调整方面做一些有趣的工作。 挑战之一是减少应用程序关键部分的对象创建。 尽管Java随着时间的推移改进了GC算法&#xff0c;但垃圾回收打h一直是Java的主要难题。 Azul是…

php数据库postgresql,PHP 操作 PostgreSQL数据库

1.要让PHP支持PostgreSQL&#xff0c;就需要重新编译PHP&#xff1b;./configure --prefix/usr/local/php5 --with-apxs2/usr/local/apache2/bin/apxs --with-mysql/usr/local/mysql --with-config-file-path/usr/local/php5 --with-zlib --enable-mbstringall --with-mysql…

uestc summer training #2

A 增广 #include<bits/stdc.h> using namespace std; const int MAXN 1000000 10; vector<int> g[MAXN]; int a[MAXN], b[MAXN], sz[MAXN], cnt[MAXN]; bool mg[MAXN], vis[MAXN]; int n, m; bool dfs(int u, int f -1) {if (g[u].empty()) //如果当前数没有位…

mysql有实例名这个概念,MySQL的一些概念笔记

1.MySQL Server、MySQL实例、MySQL数据库MySQL数据库指的是实际存在的物理操作系统文件的集合&#xff0c;也可以指逻辑数据的集合。为了访问、处理数据&#xff0c;我们需要一个数据库管理系统&#xff0c;也就是MySQL Server(也称为MySQL服务器)。MySQL实例指的是MySQL进程及…