水平格式化

  当我们在元素上设置width的时候,影响的是内容区的宽度  但是当我们又为元素指定指定了内边距 边框 外边距 还是会增加宽度值  (IE传统盒模型 内边距 边框 会在元素的宽度内扩展 margin会增加宽度  W3C标准盒模型  内边距 外边距  边框的宽度都会增加元素的宽度 )  下面我以W3C标准盒模型来讨论负边距对元素的影响

#test {
width:200px;
background: red;
padding: 20px;
border:10px solid black;
margin: 20px;
}
<p id="test">aaa</p>

上面这个p元素占据的宽度值    =   margin(left+right) + padding(left+right) + border(left+right) + contentwidth    = 20*2 + 20*2 + 10*2 + 200 = 300px

正常流中的块级元素框的水平部分总和等于父元素(父元素一般也为块级元素)的width

在这影响元素的宽度值的7个属性中 只有3个值能设置为auto  元素的contentwidth margin-left margin-right   在说负边距之前还是要对auto进行一下说明

(1)正常的情况下直接设置这三个属性的和等于父元素的宽度

(2)设置auto值的时候 会根据其他的值 自动的使总和等于父元素的宽度值

#test {
width:200px;
background: red; margin:0 auto 0 100px; } div {
width:500px;
} <div><p id="test">aaa</p></div>

上面的例子 我们设置父元素的包含元素 margin-left:100px    margin-right:auto   width:200px    父元素的宽度为500px

发现右边距自动的变成了200px

2.1  左右边距均为auto  width为一定宽度  会将父元素剩余的内容宽度(父元素的内容宽度-子元素的内容宽度) 平均的分配给margin-left margin-right 实现子元素在父元素的居中

2.2  一个外边距为auto 子元素的width为auto   另一个外边距为定长

#test {
width:auto;
background: red;
margin:0 auto 0 100px;
} div {
width:500px;
}
<div><p id="test">aaa</p></div>

此时设置为auto的外边距会变成0 width会自动的填充剩余的值(尽可能的宽)

2.3 如果都设置为auto    那两个外边距会变成0  子元素的宽度会变成父元素的内容宽度

下面我们来考虑负边距的情况


#test {
  width:auto;
  background: red;
  margin:0 -150px 0 100px;
}
div {
  width:500px;
}


<div><p id="test">aaa</p></div>

 

上面的例子中父元素的内容宽度为500    子元素的宽度为auto  margin-left为100 margin-right为-150px       我们看一下它实际的内容宽度的值

550 > 500  也就是我们子元素的宽度超出了父元素的内容宽度     其实这是可以的          100 + auto(550) + (-150)  = 500   auto为了满足总的宽度之和等于父元素的内容宽度  变成了550

在考虑负边距对元素的影响的时候,浏览器会认为负边距缩小了元素的宽度  实际上元素的宽度是没有变化的

p {
background: red;
display:inline-block;
width:100px;
margin-right: -20px; } <p>aaaaaaa</p><span>aaaa</span>

上面的例子中元素的宽度实际上还是100  但是由于负边距的设置 浏览器认为它的边界变小了 后边的元素就流进了它的里面

下面的图是没有设置margin-right为负的情况

不同于position:relative   position:relative  会使元素相对于原来的位置在文档流中偏移 但是不会丢失原来文档流的位置

具体的应用可以参考http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html

参考   CSS权威指南

css 负边距 小记的更多相关文章

  1. css负边距自适应布局

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

  2. CSS 负边距读后感

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

  3. css负边距之详解

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

  4. 浅析CSS负边距

    本文主要讨论两点,1.左右负边距对元素宽度的影响:2.负边距对浮动元素的影响. 在讨论这两点前,首先要理解盒模型.文档流. 盒模型,见下图,简单明了. 文档流,将窗体自上而下分成一行行, 并在每行中按 ...

  5. CSS负边距margin的应用

    原文 简书原文:https://www.jianshu.com/p/75a178e65207 相关文章 CSS负margin的影响:https://www.cnblogs.com/shcrk/p/93 ...

  6. css负边距之详解(子绝父相)

    来源 | http://segmentfault.com 原文 |  The Definitive Guide to Using Negative Margins   自从1998年CSS2作为推荐以 ...

  7. css 负边距

    负边距 可以改变 他在文档流中的尺寸 当块级元素设置 margin: -10px;  这个快 的大小没变但是他的定位的位置向上串了,压住了上面的文字   而且在他后面的文字  会爬到他身上 而前面的文 ...

  8. CSS 负边距自适应布局

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

  9. CSS负边距自适应布局三例

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

随机推荐

  1. CAS认证原理图

  2. .net和java和谐相处之安卓客户端+.net asp.net mvc webapi 2

    作为没有花很多时间转java,把java当C#用的我,在做服务器端程序的时候,自然不想考虑java web,java需要学的框架太多了,看了一下Java Servlet,始终没有编码的冲动.经过几天的 ...

  3. Win7下安装git

    1.下载并安装git for windows版本:msysgit http://msysgit.github.com/   成功安装后,即可使用了,右键一个目录后可以看到菜单选项: 选择Git Gui ...

  4. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  5. Apache 配置多端口网站

    跳过安装步骤. 1. apache安装目录/conf/httpd.conf,如果你是采用wamp集成环境,那么在 wamp/bin/apache下. 2. 在httpd.conf中,找到 #LoadM ...

  6. STL中的set/multiset小结

    (1)使用set/multiset之前必须包含头文件<set>:#include<set> (2)namespace std{ template <class T, cl ...

  7. java中String byte HexString的转换

    原文:http://blog.sina.com.cn/s/blog_62e9ec530101ebv6.html HexString——>byte public static byte[] hex ...

  8. 对于Discuz!NT不允许新用户注册的解决办法

    客户论坛用的是Discuz!NT,但是用户注册总是提示不允许新用户注册,对于这个问题,网上好多说的是管理员登录后台,在"用户与访问控制"里将允许新用户注册改为"是&quo ...

  9. ActiveMQ学习(一)——MQ的基本概念

    1) 队列管理器 队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务. 2) 消息 在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的 ...

  10. [Tool] PowerDesigner

    一般项目的生命周期: 1.需求分析 2.需求规格说明书 3.总体设计 4.详细设计 5.编码实现 6.测试,试运行. 7.验收 8.后期维护 PowerDesigner 可以把软件生命周期的每一个阶段 ...