单位主要用在规定元素的数值性css属性的,这里主要讨论应用的比较多的是width height  padding margin font-size,而单位中应用最广泛就是%、px、em

百分比

百分比,关键就是参考的父元素,在正常流和浮动时,就是包裹着当前元素的元素;在相对定位、绝对定位时,就是当前元素相对于的定位的元素,其实这个很好理解,在这种情况下元素框从文档流完全删除,和原来的文档流没有关系,其包含块可能是文档中的另一个元素或者是初始包含块。下文中提到的父元素都是基于这些知识上,因此不再强调。严格意义上来说,百分比不能算是一种单位,可以理解为包含数值和单位的数据,不管父元素的该属性是什么单位,都是将数值*百分比+单位计算出child的属性值。

html代码如下:

<body>
<div class="container">
<div class="child"></div>
</div>
</body>

css代码如下:

.container{
width: 800px;
height: 400px;
padding: 10px;
background-color: #228F45;
}
.child{
width: 80%;
height: 80%;
background-color: #D5DED8;
}
width height

1.border-sizing为默认值content-box时,container(图1)与child的box model(图2)如下


图1


图2


图3


图4

container的内容宽度和高度为800、400,child的width=800*80%=640,heigth=400*80%=320,在这种情况下,container(图3)与      child的box model(图4)如上,由于设置box-sizing为border-box,所以container的内容宽度和高度分别为780、380,child的width=780*80%,height=380*80%;由此可见,元素的height或width设置成百分比,是相对于父元素的内容高度。

padding和margin

padding和margin的值为百分比是相对于父元素的width计算的,不管是padding-left,还是padding-top。将.container中添加padding:10%,child 的box model如下图


图5

padding = width*800,这是在box-sizing为默认的情况下计算的。margin同理。

font-size

设置container的font-size : 20px,.child的font-size:80%,则浏览器计算出来的结果为child 的font-size为16px.

em

em是相对单位长度,官方是这样描述的:相对于当前对象内文体的字体尺寸。官方说得比较含糊,但可以明确的是跟字体尺寸相关,具体到css属性就是font-size。

在正常情况下,浏览器的默认字体大小为16px(排除修改了浏览器的默认设置的)。所以在例子中,对于container的包含块body来说,由于没有设置body的font-size,因此body的font-size为16px,等同于1em,body的子元素如果没有设置font-size的情况下,都默认为            1em=16px来计算。

还是用上面的html做例子来说明,css代码如下:

.container{
width: 20em;
height: 10em;
padding: 10px;
background-color: #228F45;
}
.child{
width: 10em;
height: 5em;
background-color: #D5DED8;
}

查看container (图6)和 child(图7)的盒模型如下


图6


图7


图8


图9

container: width=20*16,height=10*16.child同理。这种情况比较简单。现在我们在.container中添加font-size:1.5em,child中添加font-size: 0.8em。body中还是1em=16px,container的font-size=16*1.5=24px,child的font-size=24*0.8=19.2px,所以在container一个字的宽度为24px, 即1em=24px,相对应地计算出宽和高为480*240,在child一个字的宽度为19.2px,即1em=19.2px,相对应地计算出宽和高为192*96。container (图8)和 child(图9)的盒模型见上方。以上可得知em为单位的换算会继承父元素,有累积效果。padding和margin的计算方式同width、height。

px

px是相对长度单位,指屏幕上的一个像素点,而每英寸的像素是dpi,dpi值越高越清晰。width、height、padding、margin、font-size属性值用这个为单位没有什么特殊的,目前在web上使用的比较广泛。其他几种单位在browser上也是转换成px来表现的。

总结

em和百分比比较类似,都是相对于父元素,有累积效果,em与px的换算并不是固定的。IE无法调整使用px为单位的字体大小,因此对于响应式变得如此流行的今天,当web应用移植到手机上时,显得不太合适。使用em作为字体单位,可以使页面字体得到恰当地缩放,效果也会好很多。

CSS中的那点事儿(一)--- CSS中的单位1的更多相关文章

  1. css样式布局中position的那些事儿

    哎,页面布局及设计开发.对于一个一直从事后台开发来说屌丝来说,确实是件非常费时.费力,非常艰难的一件事. 今晚是想实现把多张重叠在一起.或是标记一张图片中不同的位置然后赋以超链接.花了一晚上的时间,才 ...

  2. iOS之在webView中引入本地html,image,js,css文件的方法 - sky//////////////////////////////////////ZZZZZZZZZZZZZZZ

    iOS之在webView中引入本地html,image,js,css文件的方法   2014-12-08 20:00:16CSDN-sky_2016-点击数:10292     项目需求 最近开发的项 ...

  3. Web开发中20个很有用的CSS库

    来源: 微信公众号文章 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS库,框架,应用这 ...

  4. Web 开发中 20 个很有用的 CSS 库

    转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供 ...

  5. jQuery中添加/改变/移除改变CSS样式例子

    在jquery中对于div样式操作我们会使用到CSS() removeClass() addClass()方法来操作了,下面我们就整理了几个例子大家一起来看看吧.     CSS()方法改变CSS样式 ...

  6. css padding在ie7、ie6、firefox中的兼容问题

    padding 简写属性在一个声明中设置所有内边距属性. 说明这个简写属性设置元素所有内边距的宽度,或者设置各边上内边距的宽度.行内非替换元素上设置的内边距不会影响行高计算:因此,如果一个元素既有内边 ...

  7. CSS知识总结之设计模式(持续学习中)

    OOCSS 参考:http://coding.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss  ...

  8. 文字在div中水平和垂直居中的的css样式

    文字在div中水平和垂直居中的的css样式 text-align:center; /*水平居中*/ line-height: 20px; /*行距设为与div高度一致*/ 示例如下: HTML元素 & ...

  9. 【CSS】思考和再学习——关于CSS中浮动和定位对元素宽度/外边距/其他元素所占空间的影响

      一.width:auto和width:100%的区别   1.width:100%的作用是占满它的参考元素的宽度.(一般情况下参考元素 == 父级元素,这里写成参考元素而不是父级元素,在下面我会再 ...

随机推荐

  1. 关于虚拟机IP网段和公司内网网段的问题?

    开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    请教一个问题,为了解决电脑换网络环境就连不上虚拟机的问题,我虚拟机使用的nat模式,我的VMnet8IP是192 ...

  2. GoldenDict词典下载安装

    Debian/Ubuntu下载: sudo apt-get install goldendict 添加中文维基百科/维基词典: 选择[词典]->[词典来源]->[维基百科]->[添加 ...

  3. TCP/IP 协议栈

    TCP(传输控制协议) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 在因特 ...

  4. C# 多线程小试牛刀

    前言 昨天在上班时浏览博问,发现了一个问题,虽然自己在 C# 多线程上没有怎么尝试过,看了几遍 CLR 中关于 线程的概念和讲解(后面三章).也想拿来实践实践.问题定义是这样的: 对于多线程不是很懂, ...

  5. 转:C#并口热敏小票打印机打印位图

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: class LptControl { private s ...

  6. Java获取指定时间段的年份(开始、结束时间)、月份(开始、结束时间)、天数(开始、结束时间)

    package test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleD ...

  7. flask的debug模式下,网页输入pin码进行调试

    网站后端Python+Flask .FLASK调试模式之开启DEBUG与PIN使用? 自动加载: # 方式一 1 2 if __name__ == '__main__':     app.run(ho ...

  8. BUPT复试专题—树查找(2011)

    https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4?tpId=67&tqId=29641&rp=0&a ...

  9. mahout in Action2.2-聚类介绍-K-means聚类算法

    聚类介绍 本章包含 1 实战操作了解聚类 2.了解相似性概念 3 使用mahout执行一个简单的聚类实例 4.用于聚类的各种不同的距离測算方法 作为人类,我们倾向于与志同道合的人合作-"鸟的 ...

  10. 【leetcode】 26. Remove Duplicates from Sorted Array

    @requires_authorization @author johnsondu @create_time 2015.7.22 18:58 @url [remove dublicates from ...