CSS外边距叠加问题

2024-05-24 05:48

本文主要是介绍CSS外边距叠加问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://www.cnblogs.com/winter-cn/archive/2012/11/16/2772562.html

读过李松峰老师翻译的新书中《CSS设计师指南(第3版》的外边距叠加部分( http://www.ituring.com.cn/article/16969)实在是有些捉急啊,这地方实在是有些没写到位,也有错误(如“叠加的只是垂直外边距,水平外边距不叠加”)

margin collapsing现象

BFC(block formatting context)中相邻的两个block-level的盒,上一个box的下边距会跟下一个box的上边距发生叠加,即两者取最大的,而不是相加:

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px}#blue {margin:10px 10px 10px 10px}#red {margin:10px 10px 10px 10px}

</style>
</head>
<body>

<div id="green" style="background:lightgreen;height:100px;width:100px;"></div>
<div id="blue" style="background:lightblue;height:100px;width:100px;"></div>
<div id="red" style="background:pink;height:100px;width:100px;"></div>

</body>
</html>

margin collapsing与方向无关

《CSS设计师指南(第3版》中讲到“叠加的只是垂直外边距,水平外边距不叠加”,这个说法是错误的,叠加与否完全取决于两个box是否是位于同一BFC的两个相邻box,与水平垂直无关,下面例子中,更改了body的writing-mode,于是叠加发生在了水平方向(仅ie可看)

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px}#blue {margin:10px 10px 10px 10px}#red {margin:10px 10px 10px 10px}
body {
writing-mode:tb-rl;
}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"></div> <div id="blue" style="background:lightblue;height:100px;width:100px;"></div> <div id="red" style="background:pink;height:100px;width:100px;"></div> </body> </html>

margin collapsing仅仅发生在BFC

margin collapsing不发生在IFC

当把元素的display属性设为inline-block,它们都位于IFC当中,所以不论水平还是竖直方向,都不会发生叠加:

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px;
display:inline-block;}#blue {margin:10px 10px 10px 10px;
display:inline-block; }#red {margin:10px 10px 10px 10px;
display:inline-block;}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"></div><div id="blue" style="background:lightblue;height:100px;width:100px;"></div><br/><div id="red" style="background:pink;height:100px;width:100px;"></div> </body> </html>
margin collapsing不发生在floats

当把元素的float属性设为left,它们都不在正常流中,更不在BFC中了,同样不论水平还是竖直方向,都不会发生叠加:

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px;
float:left;}#blue {margin:10px 10px 10px 10px;
float:left; }#red {margin:10px 10px 10px 10px;
clear:left;
float:left;}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"></div> <div id="blue" style="background:lightblue;height:100px;width:100px;"></div>
<div id="red" style="background:pink;height:100px;width:100px;"></div>
</body> </html>

margin collapsing可能跨元素

当一个容器既没有border又没有padding时,它的第一个子box的的margin也能跟它的上一个容器的margin发生叠加:

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px;
}#blue {margin:5px 10px 10px 10px;
}#red {margin:10px 10px 10px 10px;
}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"> </div> <div id="blue" style="background:lightblue;height:100px;width:100px;">
<div id="red" style="background:pink;height:100px;width:100px;"></div>
</div>
</body> </html>

margin collapsing不能跟padding(内边距)折叠

有padding(内边距)的时候,上一节的情况不发生:

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px;
}#blue {margin:10px 10px 10px 10px;
padding:10px 10px 10px 10px;
}#red {margin:10px 10px 10px 10px;
}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"> </div> <div id="blue" style="background:lightblue;height:100px;width:100px;">
<div id="red" style="background:pink;height:100px;width:100px;"></div>
</div>
</body> </html>

 

margin collapsing不能跟跨越BFC

当一个容器在其内部创建新的BFC时,跨元素折叠的情况也不会发生。

<!doctype HTML>
<html>
<head>
<style type="text/css">
#green {margin:10px 10px 10px 10px;
}#blue {margin:10px 10px 10px 10px;
overflow:hidden;
}#red {margin:10px 10px 10px 10px;
}
</style> </head> <body> <div id="green" style="background:lightgreen;height:100px;width:100px;"> </div> <div id="blue" style="background:lightblue;height:100px;width:100px;">
<div id="red" style="background:pink;height:100px;width:100px;"></div>
</div>
</body>

这篇关于CSS外边距叠加问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997544

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异