由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. .NET Core 系列5 :使用 Nuget打包类库

    NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系, ...

  2. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  3. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  4. 调用AJAX做登陆和注册

    先建立一个页面来检测一下我们建立的用户名能不能用,看一下有没有已经存在的用户名吗 可以通过ajax提示一下 $("#uid").blur(function(){ //取用户名 va ...

  5. SQL Server 常用内置函数(built-in)持续整理

    本文用于收集在运维中经常使用的系统内置函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID') 2,查看对象的 ...

  6. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

  7. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

  8. android通过webview调起支付宝app支付

    webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...

  9. C#多线程之线程同步篇3

    在上一篇C#多线程之线程同步篇2中,我们主要学习了AutoResetEvent构造.ManualResetEventSlim构造和CountdownEvent构造,在这一篇中,我们将学习Barrier ...

  10. setCapture、releasCapture 浅析

    1. setCapture 简介 setCapture可以将鼠标事件锁定在指定的元素上,当元素捕获了鼠标事件后,该事件只能作用在当前元素上. 以下情况会导致事件锁定失败: 当窗口失去焦点时,锁定的事件 ...