css 负边距 小记
水平格式化
当我们在元素上设置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 负边距 小记的更多相关文章
- 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负边距
本文主要讨论两点,1.左右负边距对元素宽度的影响:2.负边距对浮动元素的影响. 在讨论这两点前,首先要理解盒模型.文档流. 盒模型,见下图,简单明了. 文档流,将窗体自上而下分成一行行, 并在每行中按 ...
- 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& ...
随机推荐
- spark MySQL jar 包
/** * Created by songcl on 2016/6/24. */ import java.sql.DriverManager //val sqlContext = new org.ap ...
- 引入HBase依赖包带来的麻烦
在一个项目里用到HBase做底层存储,使用maven来管理相关Jar包依赖,用maven来管理依赖包,特别不爽的就是他会将你引入Jar包自己的依赖都搞进来,经常会出现一些类和方法冲突找不到等状况.这次 ...
- 储物柜soket通信协议和中间件实现技术细节
一.中间件程序的职责: 1)对柜机提供soket长连接的服务器端,就是soket server.可提供上万的客户端同时连接.用来实时响应控制请求,中间件必须随时知道某个柜机的在线状态,外部请求时才能判 ...
- 轻量型ORM框架Dapper的使用
在真实的项目开发中,可能有些人比较喜欢写SQL语句,但是对于EF这种ORM框架比较排斥,那么轻量型的Dapper就是一个不错的选择,即让你写sql语句了,有进行了关系对象映射.其实对于EF吧,我说下我 ...
- nodeJS 菜鸟入门
从一个简单的 HTTP 服务开始旅程-- 创建一个 server.js 文件,写入: //最简单的 http 服务例子 var http = require("http"); ht ...
- iOS实现图像素描效果
使用GPUImageSketchFilter对象实现图像素描效果 NSString *const kGPUImageSketchFragmentShaderString = SHADER_STRING ...
- 【rational rose】用例图
- [ShortCut] Visual Studio快捷键
msdn官方快捷键说明:https://msdn.microsoft.com/zh-cn/library/da5kh0wa.aspx 测试工具: visual studio 2013 操作步骤: 1. ...
- AnyChatCoreSDK.h
#ifndef ANYCHATCORESDK_H #define ANYCHATCORESDK_H #include <windows.h> #include <stdlib.h&g ...
- Winform开发框架之附件管理应用
在很多常规的管理系统里面,都可能有附件管理的需求,在我做的一系列医疗行业的病人信息管理系统里面,都希望能很好的管理病人的相关资料,分门别类的进行存储,需要的时候可以预览查看,那么这个功能我们可以把它独 ...