由css reset想到的深入理解margin及em的含义

原文地址:http://www.ymblog.net/content_189.html

经常看到这样语句,*{ margin:0px;padding:0px; },用起来很方便吧?
由于学习前端的门槛低,我一直找不到区别于那些用DW的前端的所在点,我总觉得我是用记事本写代码的,我的水平及理解绝对比那些用DW的人呀更胜一筹。但区别在哪里呢?最近,我似乎明白了,拿css来说,前面的很长一段时间,我都是在横向学习css,不断的学习新的东西,制作新的美的页面,我还洋洋得意的说我前端css学的good了,最近我才恍然大悟到,这个阶段,这种表现只不过是学习CSS的一个初级阶段,我并没有进阶,并没有有多大的提高,这也正是,别人问我你能说说你在学习css这方面有哪些深刻的见解?我有吗?我没有,学习几个新属性制作几个炫酷页面就叫做深刻了吗?错的,谁都可以做出很炫很美很清爽的页面,这也就是,当你面对*{ margin:0px;padding:0px; }这行语句的时候,你会觉得非常好用,在哪里用都特别方便,特别的顺手,而你说不出个所以然来,说不出为什么要这么用,说不出你这样用了,浏览器做了哪些事情。

这个道理也是昨天晚上才想明白的,作为立志与前端工程师的我们,你应该清楚,*{ margin:0px;padding:0px; }这样写真的好么?

页面默认的margin值
首先要知道,默认的只具有margin值的元素有哪些,
body,h1-h6,p,div,dl,dd,pre,form,hr,blockquote
--------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------

默认同时具有margin和padding的元素有哪些


至于这里的em是什么意思,请看这篇文章。

至此,我们应该明白,*{ margin:0px;padding:0px; }耗费了多少资源?一个HTML文档有多少标签?每个标签都需要浏览器来渲染一遍这个值,多浪费是不是?

________________________________________________________________________________________

说完了CSS RESITE 来讨论说说margin。

默认的块状元素是可以随意设置margin的上下左右边距。但你是否出现类似的情况,如图,

很简单的结构

样式

一个div中,一个p标签,设置p标签margin-top:50px;后,并没有想象中的效果,而是父元素margin-top了一个值。这是为什么呢?
(这种情况在IE67中不会出现,因为IE的hasLayout渲染导致了这个“表现良好”的外观。详细请看这篇文章

其实你应该想想在这里为什么要用margin,而不用padding,我想你认为这2个效果实现是一样的,,请看这篇文章,何时用margin,何时用padding。首先你得明白,默认的块状元素都是包含有margin,border,padding的,而margin的含义,是指在存在border和padding的基础上,与外部元素的间距。那么我们这里是没有border或者padding的,如果在这里你这只border-top:1px red solid;则正常了。但真的是那样吗?如果这样,那我们每次都要附加一个border或者padding,增加代码量,多不好。其实你应该想到,这里应该使用padding-top,效果将会非常好。那么何时用margin,何时用padding?

何时应当使用margin:
1、需要在border外侧添加空白时。
2、空白处不需要背景(色)时。
3、上下相连的两个盒子之间的空白,需要相互抵消时。如15px + 20px的margin,将得到20px的空白。(注:当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。你可以查看W3Shool CSS外边距合并了解这个基本知识。)

何时应当时用padding:
1、需要在border内测添加空白时。
2、空白处需要背景(色)时。
3、上下相连的两个盒子之间的空白,希望等于两者之和时。如15px + 20px的padding,将得到35px的空白。

仔细对比下,在这里我们应该用padding吧?总结一下,margin是用来分开互不相干的元素,在这里p是div的子元素,而padding,用于元素与内容之间的间隔。

另外默认的行内元素

span,a,strong,label    margin-top/margin-bottom对内联元素没有多大实际效果,但可影响左右边距

img|input|select|textarea|button|虽然是内联元素,也称之为置换对象,因为他们具有inline-block的属性,有自己的宽高,还可以定义margin的上下左右边距。

参考:

用Margin还是用Padding 

不要告诉我你懂margin

由css reset想到的深入理解margin及em的含义的更多相关文章

  1. CSS Reset的相关概念及实例

    原文 简书原文:https://www.jianshu.com/p/fdb79010895c 大纲 1.什么是css reset? 2.CSS reset的实例 1.什么是css reset? 个人理 ...

  2. 【27前端】CSS Reset

    CSS reset就像是一种宁可错杀三千不可放过一个的做法. 一个最简单粗暴的css reset解决方案 *{ margin:0; padding:0; } 多余的话我就不再累赘,想要更多可以参考我的 ...

  3. css reset 以及哪些元素有默认margin padding值

    很多网站在css reset 的时候有如下做法: body, ul, ol, li, p, h1, h2, h3, h4, h5, h6, form, label, dl, dt, dd,fields ...

  4. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  5. HTML常用命名和CSS reset代码【收集总结】

    CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...

  6. css reset重置样式有那么重要吗?

    在以前写html代码的时候,一般都会在head里添加重置样式reset.css,其内容如下: @charset "utf-8"; html, body, div, span, ap ...

  7. 这 30 类 CSS 选择器,你必须理解!

    CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了 ...

  8. css reset的重置作用(可取还是不可取,取决于你)

    一.重置的理由 当今流行的浏览器中,有些都是以自己的方式去理解css规范,这就会到只有的浏览器对css的解释与设计师的css定义初衷相冲突,使得网页的样子在某些浏览器下能正确按照设计师的想法显示.,但 ...

  9. CSS中盒模型的理解

    今天突然看到一篇关于CSS中盒模型的文章,忽然觉得自己竟然遗忘了很多小的地方,所以写一篇文章来记忆一下 (摘抄于千与千寻写的CSS盒子模型理解,并在自己基础上添加了一些东西,希望更完善,对大家有帮助) ...

随机推荐

  1. 【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 先贴错误: 吐槽一下: 进入正题: 新建一个同名数据库 停止MSSQL服务 替换数据库文 ...

  2. git亲测命令

    一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...

  3. 【MySql】查询数据库中所有表及列的信息

    SELECT TABLE_NAME, -- 表名 COLUMN_NAME, -- 字段名 DATA_TYPE, -- 字段类型 COLUMN_COMMENT -- 字段注释 FROM INFORMAT ...

  4. Struts2日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  5. 理解Storm并发

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...

  6. 面向未来的友好设计:Future Friendly

    一年前翻译了本文的一部分,最近终于翻译完成.虽然此设计思想的提出已经好几年了,但是还是觉得应该在国内推广一下,让大家知道“内容策略”,“移动优先”,“响应式设计”,“原子设计”等设计思想和技术的根源. ...

  7. Mono产品生命周期

    软件生命周期 同任何事物一样,一个软件产品或软件系统也要经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生命周期(软件生存周期) .软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期 ...

  8. SSH隧道应用, 突破网络限制

    文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...

  9. 用java开发微信公众号:接收和被动回复普通消息(三)

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本 ...

  10. cookies,sessionStorage和localStorage的区别---web前端sessionStorage和localStorage区别

    sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁.因此sessionStorage不是一种持久化的本地 ...