我们都知道,一个元素框的大小是由元素内容+内边距+边框+外边距来决定的。

  关于内边距padding,内边距呈现了元素的背景,其设置值是不可以为负的。

  而对于外边距margin,默认为透明,设置值可以为负,其实这也就是所谓的负边距。 


  下面我们来分析一下margin负边距的原理。

  首先我们看看下面的布局:  

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>inline、block、inline-block的区别</title>
<style>
* {
margin: 0;
padding: 0;
} #box {
width: 600px;
margin: 100px auto 0 auto;
border: 1px solid;
padding: 20px;
}
#box #font1 {
color: white;
background: red;
}
#box #font2 {
display: block;
width: 100px;
background: green;
color: white;
}
#box #font3 {
display: inline-block;
width: 100px;
background: blue;
color: white;
} </style>
</head>
<body>
<div id="box">
这是普通文本这是普通文本<span id="font1">这是inline这是inline这是inline</span>这是普通文本这是普通文本
这是普通文本<span id="font2">这是block这是block这是block这是block</span>这是普通文本这是普通文本这是普通文本这是普通文本
这是普通文本这是普通文本这是普通文本这是普通文本<span id="font3">这是inline-block这是inline-block这是inline-block</span>这是普通文本这是普通文本这是普通文本这是普通文本
</div>
</body>
</html>

  效果:

  这里面包括了内联元素(inline)、块级元素(block)和行内块元素(inline-block)三种框类型。

  内联元素(inline):

    在父元素框中的位置由文档流决定。

    其内边距padding决定了红色区域部分的范围,而外边距margin决定了该内联元素框与其他文本流之间的距离,且只有margin-left和margin-right设置有效。

    块级元素可由display: inline属性设置为内联元素。内联元素宽(width)高(height)设置无效。

  块级元素(block):

    在父元素框中的位置由文档流决定,不过总是重起一行,即前后都有一个换行符。

    其内边距padding决定了绿色区域部分的范围,而外边距margin决定了该块级元素框与其他文本流之间的距离。

    元素只有为块级元素,宽(width)高(height)的设置才有效。内联元素可由display: block属性设置为块级元素。

  行内块元素(inline-block):

    在父元素框中的位置由文档流决定,其与块元素的区别在于不重起一行,前后没有换行符。

    其内边距padding决定了蓝色区域部分的范围,而外边距margin决定了该块级元素框与其他文本流之间的距离。

    行内块元素可以设置宽(width)高(height),其余元素可由display: inline-block属性设置为行内块元素。


  弄清楚了三种元素框的表现形式。我们给他们分别设置-20px的外边距。    

 <style>
* {
margin: 0;
padding: 0;
} #box {
width: 600px;
margin: 100px auto 0 auto;
border: 1px solid;
padding: 20px;
}
#box #font1 {
color: white;
background: red;
margin: -20px;
}
#box #font2 {
display: block;
width: 100px;
background: green;
color: white;
margin: -20px;
}
#box #font3 {
display: inline-block;
width: 100px;
background: blue;
color: white;
margin: -20px;
}
</style>

  效果:

  我们发现,整个父元素框变小了,并且外部文本流向各元素框推进了20px的距离,从而元素框的一部分覆盖到了文本流上。


  这就是负边距的实现形式,我们可以这样来比喻:一个人坐在一个桶里飘在海面上,四面都是水,而由于桶的作用,人是接触不到水的。而当桶的边缘发生了破损,水就侵入到了桶里,桶里的人自然后泡到水里了。这个桶就好比外边距,而里面的人时元素的内容,外面的水自然就是文本流了。比喻也许有点不恰当,不过大概意思就是这样了。

  我们可以用负边距做很多事情,比如多列等高、元素的居中、宽度自适应、元素框外边的裁剪等等。

【CSS】 布局之剖析负边距的更多相关文章

  1. CSS布局 - 三栏布局

    CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...

  2. css负边距自适应布局

    单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> ...

  3. (转)CSS布局-负边距-margin

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  4. CSS布局奇淫巧计之-强大的负边距

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  5. CSS布局之-强大的负边距

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  6. css负边距之详解

    自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...

  7. css中的负边距

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  8. CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)

    一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...

  9. CSS 负边距读后感

    最近看到一篇讲解CSS 负边距的文章: http://segmentfault.com/a/1190000003750411?utm_source=Weibo&utm_medium=share ...

随机推荐

  1. linux 用户和组

    每个用户拥有一个UID,操作系统实际使用的是用户ID,而非用户名 每个用户属于一个主组,而且属于一个或多个附属组 每个组有一个GroupID 每个进程以一个用户身份运行,并受该用户可访问的资源限制 每 ...

  2. [修正] Firemonkey Windows 控件有虚线残影问题

    说明:在 Wndows 显示时,有时控件左方会显示一条虚线 适用:Firemonkey Windows (Berlin 或更高版) 修正方法: 请将源码 FMX.Canvas.D2D.pas 复制到自 ...

  3. word2010多级列表编号为什么会变成黑块

    把光标放置在黑块的后面 在键盘上按左方向键,则黑块变灰色(为选中状态) 然后ctrl+shift+s, 出现窗口“apply styles" 点击"reapply", 搞 ...

  4. django drf GenericAPIView和ListAPIView

    drf提供了更快捷的查询方法ListModelMixin+GenericAPIView,和ListAPIView 1.ListModelMixin+GenericAPIView from django ...

  5. windows系统重装流程

    新电脑或者电脑因系统文件损坏都需要重装系统,因为之前工作中有一段时间经常帮同事装系统,总结了一些经验,现分享给大家. 重装系统大体有下列几种种常见方法: 1. 系统重装盘: 2. 从U盘重装: 3. ...

  6. SSL证书可以给多个域名使用吗?

    欢迎访问网易云社区,了解更多网易技术产品运营经验 从信任等级的角度来说,SSL证书主要分为三类: 1.域名型https证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站: 2. ...

  7. Perl+OpenGL 重绘inkscape生成的svg矢量图

    Perl+OpenGL 重绘inkscape生成的svg矢量图 还不够完善,先挖个坑,后面慢慢填 Code: [全选] [展开/收缩] [Download] (Untitled.pl) =info A ...

  8. Ubuntu16.04实用python脚本 - 启动nautilus(Gnome的文件管理器)!

    nautilus是Gnome的图形的文件管理器,可以很方便管理各种文件,但是通常我们不是在root用户下,如果想在root下使用,必须在shell里面输入命令: sudo nautilus 这样做固然 ...

  9. lua 5.3 英文手册 自己收集整理版

    /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);//创建lua虚拟机 LUA ...

  10. php从文本读入数据,处理结果再导入到文本

    1,php从文本逐行读入数据,保存到数据组.使用fopen读取文本内容,逐行读取文本是$majorId = trim(fgets($rfile, 4096));. $rfile = fopen(&qu ...