单位主要用在规定元素的数值性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. 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】

    ShangHai2006 Homework Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 918  Solved: 460[Submit][Statu ...

  2. Vue && Angular 双向绑定检测不到对象属性的添加和删除

    由于ES5的限制 Vue  && Angular 双向绑定检测不到对象属性的添加和删除  还有数组增加索引.这些改变不会触发change事件.Vue是因为实例化的时候已经把各个属性都s ...

  3. uva 10561 sg定理

    Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...

  4. RRAS

    远程访问控制是Windows NT.Win200x Server提供的一种远程服务,它允许用户从远端通过拨号连接连接到一个本地的计算机网络,一旦建立了连接,就相当于处在了本地的LAN中,从而可以使用各 ...

  5. R语言入门视频笔记--5--自定义函数

    自定义函数 你可以输出一段代码,创建一个你自己定义的函数 蛋是如果你两个自定义函数的名字重复的话,后面的会把前面的替换掉 举个栗子: hanshu1 <- function(x)  sqrt(v ...

  6. sql 注入 及 in 注入

    原文地址: http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 除了校验参数内容,过滤长度和sql关键字. 解决in条件拼接 ...

  7. 表单form-input标签禁止聚焦输入

    1.input标签禁止聚焦输入(针对小程序) <input type="text" disabled /> input标签禁止聚焦输入(针对网页html) 1).< ...

  8. (3)Swing常用组件

    JTextField-文本框 继承自javax.swing.text.JTextComponent类

  9. 深入探究Java中hashCode()和equals()的关系

    目录 一.基础:hashCode() 和 equals() 简介 equals() hashCode() 二. 漫谈:初识 hashCode() 与 equals() 之间的关系 三. 解密:深入理解 ...

  10. SPOJ 26108 TRENDGCD - Trending GCD

    Discription Problem statement is simple. Given A and B you need to calculate S(A,B) . Here, f(n)=n, ...