浅析CSS负边距
本文主要讨论两点,1、左右负边距对元素宽度的影响;2、负边距对浮动元素的影响。
在讨论这两点前,首先要理解盒模型、文档流。
盒模型,见下图,简单明了。

文档流,将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流。
有三种情况将使得元素脱离文档流而存在,分别是浮动,绝对定位,固定定位.。但是在IE中浮动元素也存在于文档流中。
绝对定位,,即完全脱离文档流,相对于position属性非static值的最近父级元素进行偏移。
固定定位,,即完全脱离文档流,相对于视区进行偏移。
相对定位,,即相对于元素在文档流中位置进行偏移.,但保留原占位。
现在步入正题。
1、左右负边距对元素宽度的影响。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>左右负边距对元素宽度的影响</title>
<style>
*{
margin: 0;
padding: 0;
}
#wraper{
width: 400px;
height: 50px;
margin: auto;
}
#content{
background-color: #000;
height: 50px;
}
</style>
</head>
<body>
<div id="wraper">
<div id="content"></div>
</div>
</body>
</html>
代码效果如下图图一,给id为content的div添加属性margin-left: -100px后的效果图如下图图二;给id为content的div添加属性margin-right: -100px;后的效果图如下图图三。
图一:
图二:
图三:
从以上效果可以看出,左右负边距可以影响元素的宽度。
对此,很好理解,我们都知道,margin-left是正值时content的左边界将右移(左边界远离父元素的左边界,从而宽度减小),而此处margin-left为负值,反过来就是content的左边界将向左移动(从而把宽度拉大)。右外边距为负值的情况同理。
2、负边距对浮动元素的影响
从上例中我们可以知道,如果把border设为0,并假想border是元素的边界,当margin和padding也都为0时,元素的边界将与border重合。
负边距实际上是改变元素的边界位置,改变效果和正边距的相反。
举个栗子:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>负边距对浮动元素的影响</title>
<style>
*{
margin: 0;
padding: 0;
}
div{
width: 200px;
height: 200px;
float: left;
}
#one{
background-color: red;
}
#two{
background-color: blue;
}
#three{
background-color: yellow;
}
</style>
</head>
<body>
<div id="one">one</div>
<div id="two">two</div>
<div id="three">three</div>
</body>
</html>
效果如下图图四。
图四:
给div添加属性margin-right: -100px效果图如下图图五。
图五:
原来margin-right为0,所以三个div紧挨在一起,如果margin-right为正,他们将隔开一定距离,为负,当然就重叠啦!由此可以推测,当浏览器窗口的宽度小于300px时,黄色的div将被挤到下一行。
参考资料:
1、关于盒模型(http://www.cnblogs.com/SkySoot/archive/2012/04/17/2453000.html);
2、关于负边距 (http://www.51xuediannao.com/html+css/htmlcssjq/css-margin.html);
浅析CSS负边距的更多相关文章
- css负边距自适应布局
单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> ...
- CSS 负边距读后感
最近看到一篇讲解CSS 负边距的文章: http://segmentfault.com/a/1190000003750411?utm_source=Weibo&utm_medium=share ...
- css负边距之详解
自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...
- css 负边距 小记
水平格式化 当我们在元素上设置width的时候,影响的是内容区的宽度 但是当我们又为元素指定指定了内边距 边框 外边距 还是会增加宽度值 (IE传统盒模型 内边距 边框 会在元素的宽度内扩展 ma ...
- CSS负边距margin的应用
原文 简书原文:https://www.jianshu.com/p/75a178e65207 相关文章 CSS负margin的影响:https://www.cnblogs.com/shcrk/p/93 ...
- css负边距之详解(子绝父相)
来源 | http://segmentfault.com 原文 | The Definitive Guide to Using Negative Margins 自从1998年CSS2作为推荐以 ...
- css 负边距
负边距 可以改变 他在文档流中的尺寸 当块级元素设置 margin: -10px; 这个快 的大小没变但是他的定位的位置向上串了,压住了上面的文字 而且在他后面的文字 会爬到他身上 而前面的文 ...
- CSS 负边距自适应布局
单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"& ...
- CSS负边距自适应布局三例
单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset=”UTF-8″> <title& ...
随机推荐
- 18、ESC/POS指令集在android设备上使用实例(通过socket)
网上关于通过android来操作打印机的例子太少了,为了方便更多的开发同仁,将近日所学分享一下. 我这边是通过android设备通过无线来对打印机(佳博58mm热敏式-58130iC)操作,实现餐厅小 ...
- linux下在某行的前一行或后一行添加内容
linux的sed工具是十分强大的,能很容易的实现在某关键词的前一行或后一行增加内容.今天在批量修改tomcat的日志时就用到了该功能. 一.在某行的前一行或后一行添加内容 具休操作如下: #匹配行前 ...
- 《编写高质量代码:改善Java程序的151个建议》笔记
To fight the unthinkable,you have to be willing to do the unthinkable. 不要在循环中使用try catch,应该放在循环的外面 ...
- Java中HashMap排序
注: 转载于 http://www.cnblogs.com/xingyun/archive/2012/12/09/2809962.html package com.holdobject; import ...
- 设计模式之装饰模式(Decorator)
装饰模式原理:给对象增加特性,这种特性是一种累加的效果 代码如下 #include <iostream> #include <string> #include <list ...
- 【bzoj1006】[HNOI2008]神奇的国度
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3114 Solved: 1401[Submit][Sta ...
- 网络(一),libevent客户端部分
网络模块() 一.服务端: 暂时就以libevent模块,共享内存等下 .GS打开,首先创建4个libevent子线程,当然为每个线程设置连接通知回调函数,这个是基于sockpair的,然后再创建一个 ...
- Lessons learned from manually classifying CIFAR-10
Lessons learned from manually classifying CIFAR-10 Apr 27, 2011 CIFAR-10 Note, this post is from 201 ...
- win8 获取管理员权限
Win8 下动不动 就弹出要管理员权限什么....... 网上找到很多方法. 什么注册表什么..... 不行.. 以下这个方法可行. 按WIN+R,运行对话框中输入gpedit.msc,开启 ...
- JavaScript创建命名空间、类及类成员
JavaScript代码: //为String对象增加方法isNullOrEmpty String.isNullOrEmpty = function (a) { if (a != null & ...