CSS中的字体大小设置属性总结


Posted in HTML / CSS onMay 24, 2016

在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EMS优点多,还有人在说百分比方便,以至于出现了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为单位
这种技术需要一个参考点,一般都是以\<body>的“font-size”为基准。比如说我们使用“1em”等于“10px”来改变默认值“1em=16px”,这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。

CSS Code复制内容到剪贴板
  1. body {   
  2.       font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/  
  3.   }   
  4.   h1 {   
  5.       font-size: 2.4em; /*2.4em × 10 = 24px */  
  6.   }   
  7.   p   {   
  8.       font-size: 1.4em; /*1.4em × 10 = 14px */  
  9.   }   
  10.   li {   
  11.       font-size: 1.4em; /*1.4 × ? = 14px ? */  
  12.   }  

为什么“li”的“1.4em”是不是“14px”将是一个问号呢?如果你了解过“em”后,你会觉得这个问题是多问的。前面也简单的介绍过一回,在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值,其真正的计算公式是:
1 ÷ 父元素的font-size × 需要转换的像素值 = em值
这样的情况下“1.4em”可以是“14px”,也可以是“20px”,或者说是“24px”,总之是一个不确定值,那么解决这样的问题,要么你知道其父元素的值,要么呢在任何子元素中都使用“1em”。这样一来可能又不是我们所需要的方法。

Rem为单位
CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem。在W3C官网上是这样描述rem的——“font size of the root element”。下面我们就一起来详细的了解rem。
前面说了“em”是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。而rem是相对于根元素\<html>,这样就意味着,我们只需要在根元素确定一个参考值,,在根元素中设置多大的字体,这完全可以根据您自己的需要,大家也可以参考下图:
CSS中的字体大小设置属性总结

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

CSS Code复制内容到剪贴板
  1. html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}   
  2.  body {font-size: 1.4rem;/*1.4 × 10px = 14px */}   
  3.  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这么二呢?哈。。。。大家不仿试试,还蛮有意思,说不定这个就是主流的度量单位了。

总结
一、PX特点
1. IE无法调整那些使用px作为单位的字体大小;
2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;
3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。
px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)
em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(引自CSS2.0手册)
任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。
二、EM特点
1. em的值并不是固定的;
2. em会继承父级元素的字体大小。
所以我们在写CSS的时候,需要注意两点:
1. body选择器中声明Font-size=62.5%;
2. 将你的原来的px数值除以10,然后换上em作为单位;
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。
也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。
三、rem特点
rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。

HTML / CSS 相关文章推荐
css3 自定义字体font-face使用介绍
May 14 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
基于css3 animate制作绚丽的动画效果
Nov 24 HTML / CSS
css3 column实现卡片瀑布流布局的示例代码
Jun 22 HTML / CSS
html5新增的定时器requestAnimationFrame实现进度条功能
Dec 13 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
Sep 01 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
Jan 29 HTML / CSS
html5简介及新增功能介绍
May 18 HTML / CSS
Html5 webview元素定位工具的实现
Aug 07 HTML / CSS
wordpress添加Html5的表单验证required方法小结
Aug 18 HTML / CSS
面试必问:圣杯布局和双飞翼布局的区别
May 13 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
May 24 #HTML / CSS
轻松掌握CSS3中的字体大小单位rem的使用方法
May 24 #HTML / CSS
CSS3中的Media Queries学习笔记
May 23 #HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
May 23 #HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 #HTML / CSS
css 元素选择器的简单实例
May 23 #HTML / CSS
css sprite简单实例
May 23 #HTML / CSS
You might like
PHP版自动生成文章摘要
2008/07/23 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
告诉大家什么是JSON
2008/06/10 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
js图片预加载示例
2014/04/30 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python制作mysql数据迁移脚本
2019/01/01 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
高等教育专业自荐信范文
2014/03/26 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书