<!-- 《CSS世界》张鑫旭著 -->

margin 无效情形解析

(1)display 计算值 inline 的非替换元素的垂直 margin 是无效的。对于内联替换元素,垂直 margin 有效,并且没有 margin 合并的问题,所以图片永远不会发生 margin 合并。

(2)表格中的<tr>和<td>元素或者设置 display 计算值是 table-cell 或 table-row 的元素 margin 都是无效的。

(3) margin 合并的时候,更改 margin 值可能是没有效果的。以父子 margin 重叠为例,假设父元素设置有 margin-top: 50px,则此时子元素设置 margin-top: 30px 就没有任何效果表现,除非大小比 50px 大,或者是负值。

(4)绝对定位元素非定位方位的 margin 值“无效”。例如:

img { top: 10%; left: 30%; }

此时 right 和 bottom 值属于 auto 状态,也就是右侧和底部没有进行定位,此时这两个方向设置 margin 值我们在页面上是看不到定位变化的。例如:

img {
top: 10%; left: 30%;
margin-right: 30px;
}

此时 margin-right: 30px 几乎就是摆设。是 margin 没起作用吗?实际上不是的,绝对定位元素任意方位的 margin 值无论在什么场景下都一直有效。譬如这个例子,假设<img>宽度 70%,同时父元素是具有定位属性,且 overflow 设置为 auto 的元素,则此时就会出现水平滚动条,因为 margin-right: 30px 增加了图片的外部尺寸。

那为什么一般情况下没有效果呢?主要是因为绝对定位元素的渲染是独立的,普通元素和兄弟元素是心连心,你动我也动,但是绝对定位元素由于独立渲染无法和兄弟元素插科打诨,因此,margin 无法影响兄弟元素定位,所以看上去“无效”。

(5)定高容器的子元素的 margin-bottom 或者宽度定死的子元素的 margin-right 的定位“失效”。

<div class="box">
<div class="child"></div>
</div> .box {
height: 100px;
}
.child {
height: 80px;
margin-bottom: 100px;
}

这里,margin-bottom: 100px 是不会在容器底部形成 100px 的外间距的,看上去像是“失效”一样。margin-right 的例子类似。

实际上,这个现象的本质和上面绝对定位元素非对立方位的 margin 值“无效”类似。原因在于,若想使用 margin 属性改变自身的位置,必须是和当前元素定位方向一样的 margin 属性才可以,否则,margin 只能影响后面的元素或者父元素。

例如,一个普通元素,在默认流下,其定位方向是左侧以及上方,此时只有 margin-left 和 margin-top 可以影响元素的定位。但是,如果通过一些属性改变了定位方向,如 float: right 或者绝对定位元素的 right 右侧定位,则反过来 margin-right 可以影响元素的定位, margin-left 只能影响兄弟元素。

(6)鞭长莫及导致的 margin 失效。

<div class="box">
<img src="1.jpg">
<p>内容</p>
</div> .box > img {
float: left;
width: 256px;
}
.box > p {
overflow: hidden;
margin-left: 200px;
}

其中的 margin-left: 200px 是无效的,准确地讲,此时的<p> 的 margin-left 从负无穷到 256px 都是没有任何效果的。

(7)内联特性导致的 margin 无效。(和幽灵空白节点有关,所以前提是文档声明是HTML5文档声明)

《CSS世界》读书笔记(十三)的更多相关文章

  1. CSS揭秘读书笔记 (一)

    CSS揭秘读书笔记      (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px  solid  hsla(0,0%,100%,.5); background: ...

  2. 《CSS世界》笔记二:盒模型四大家族

    上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...

  3. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  4. 《css世界》笔记之流、元素与基本尺寸

    1. 块级元素 基本特性:就是一个水平流上只能单独显示一个元素,多个块级元素则换行显示. 块级元素和"display 为block 的元素"不是一个概念,display:list- ...

  5. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

  6. 《Two Days DIV + CSS》读书笔记——CSS选择器

    1.1.2 CSS选择器 CSS 选择器最基本的有四种:标签选择器.ID 选择器.类选择器.通用选择器. [标签选择器] 一个完整的 HTML 页面由很多不同的标签组成,而标签选择器,则是决定哪些标签 ...

  7. 《Two Days DIV + CSS》读书笔记——CSS控制页面方式

    1.1 你必须知道的知识 (其中包括1.1.1 DIV + CSS的叫法解释:1.1.2 DIV + CSS 名字的误区:以及1.1.3 W3C简介.由于只是背景知识,跳过该章.) 1.2 你必须掌握 ...

  8. CSS Grid 读书笔记

    基本概念 MDN上的解释是这样的 CSS Grid Layout excels at dividing a page into major regions or defining the relati ...

  9. css揭秘读书笔记

    currentColor属性让hr和段落相同的颜色: div { color: red; } hr { background: currentColor; /* 一定要设置高度*/ height: 0 ...

  10. css进阶读书笔记

    说明:努力在十一左右,最迟双11之前掌握所有css知识要点 一.摘自<写给大家看的CSS书(第2版)>(虽然书比较旧,09年版的,但对于我这种刚入门的小菜鸟 来说,能学到的还是挺多的) 1 ...

随机推荐

  1. BOM 浏览器对象模型_XMLHttpRequest 对象

    XMLHttpRequest 对象 浏览器与服务器之间,采用 HTTP 协议 通信. 用户在浏览器地址栏键入一个网址,或者通过网页表单向服务器提交内容,这时浏览器就会向服务器发出 HTTP 请求 AJ ...

  2. 3D Slicer Hide 3D Cube and Axis Labels Programmatically 使用代码隐藏三维视图中的方框和坐标轴标签

    在3D Slicer中,我们如果想在自己写的插件中来修改三维视图中的默认设置的话,那么首先就需要获得三维视图的结点,其类型为vtkMRMLViewNode,获得了这个结点后,我们就可以用代码来修改一系 ...

  3. 十四、JavaWeb监听器

    JavaWeb监听器 三大组件: l Servlet l Listener l Filter Listener:监听器 初次相见:AWT 二次相见:SAX 监听器: l 它是一个接口,内容由我们来实现 ...

  4. Oracle JDK 1.8 openJDK11 定制化JDK

    小结: 1. https://mp.weixin.qq.com/s/4rkgisFRJxokXZ4lyFXujw 京东JDK在大数据平台的探索与研究 臧琳 亿级流量网站架构 3月11日

  5. Jmeter正则表达式提取器

    https://www.cnblogs.com/tudou-22/p/9566894.html Jmeter中关联是通过“添加—后置处理器—正则表达式提取器”来获取数据 一.获取单个数据

  6. spring-data-redis2.0以上配置redis连接

    1.所需的maven依赖 <dependency> <groupId>org.springframework.data</groupId> <artifact ...

  7. war 包tomcat部署和maven的tomcat插件部署的不同

    不用插件 1在linux服务器上下载号tomcat 或者上传tomcat 2上传war包,最好创建一个目录房war包,和tomcat 3解压war包,jar -xvf war   或者unzip wa ...

  8. python学习笔记3-列表

    # 1.列表长度可变,内容可修改 a = [0,1,2,3] a[0] = 'a0' a # ['a0', 1, 2, 3] # 2.添加元素 # 2.1列表末尾添加元素 a.append(4) a ...

  9. 20175211 2018-2019-2 《Java程序设计》第五周学习总结

    目录 教材学习内容总结 第六章 接口与实现 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 学习进度条 参考资料 教材学习内容总结 第六章 接口与实现 6.1 接口 ...

  10. idea没配置Tomcat容器报错及解决方法

    servlet报错,提示没有一个容器,需要一个容器来运行,说明没有tomcat容器. 看看idea的配置有没有配置tomcat? 果然没有配置tomcat容器(正常画红框的地方会出现配置的tomcat ...