HTML 外边距折叠,以及消除的办法_html/css_WEB-ITnose
有如下的HTML
<body> <div class="page"> <div class="mains"> <div class="content"></div> </div> </div></body>
以及如下的css
html,body{ padding: 0px; margin: 0px; width: 100%; height: 100%; }html{ background: aliceblue; }body{ background:antiquewhite; }.page { width: 600px; height: 300px; background: mediumaquamarine;}.mains { width: 300px; height: 200px;background: yellow;}.content{ width: 200px; height: 100px;background:mistyrose;}
在常规流中显示的效果如下(图1)
此时,为.content添加以下样式
.content{width: 200px; height: 100px;background:mistyrose; margin-top: 10px; }
显示效果(图2)
这里可能会出乎很多人的意料,按我们正常的理解,.content外部有.mains的包围,那.content应该是顶部距离.mains 10px才是,可实际情况他们并没有分开,甚至最终的结果感觉是body顶部距离html顶部10px(至于这感觉对不对呢?也许不完全如此).这就是“外边距折叠”
接下来我们再给.mains加上margin-top样式
.mains {width: 300px;height: 200px;background: yellow;margin-top: 10px;}
其显示效果与“图2”一样,那么我们修改.mians的margin-top的值
.mains {width: 300px;height: 200px;background: yellow;margin-top: 20px;}
显示效果如下(图3)
此时的效果并不是相距30px,而是取了两则中最大的值20px.
接着给.page加上“margin-top: 20px;”效果不变,给body加上也是一样的效果。但如果给html加上该样式
html{ background: aliceblue; margin-top: 20px; }
显示效果(图4)
从以上结果可得知,在常规流中,html里面的元素(包括body)的外边距都是针对html元素的边缘来确定的。而html元素的外边距是针对浏览器顶部决定的。从其得知,html元素其实生成了BFC.
那么问题来了,如果这样,那设置的html的背景色真的是html元素的吗?(因为设置html的margin-top: 20px;后背景色用的仍是对html元素设置的样式值)会不会其实是浏览器的背景色?
对于“图2”和“图3”,其实我们绝大多数情况要的不是这样的效果,要的其实是针对父元素的margin-top. 对于这种上下级元素而言,他们的margin是针对最近的BFC块来定位的,所以,我们只要能让其父元素生产BFC就可以实现我们想要的效果。例如我对.mains添加以下的样式:
overflow: hidden;
那么我们想要的效果也就出来了,如下所示:
如果我们不在.mains上添加,而是在.page上添加,那结果将会如下所示
将.mains和.page同时加上overflow: hidden; 其结果如下:
这不就是我们想要达到的效果吗~~
以上是针对“父子关系”的元素外边距折叠以及解决的办法,至于兄弟元素的折叠问题就相对简单多了。当然解决的办法也是一样。
推荐该链接供大家学习:
http://www.w3cplus.com/css/understanding-bfc-and-margin-collapse.html
根据w3c规范,两个margin是邻接的必须满足以下条件:
必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个BFC当中。
没有线盒,没有空隙(clearance,下面会讲到),没有padding和border将他们分隔开
-
都属于垂直方向上相邻的外边距,可以是下面任意一种情况
元素的margin-top与其第一个常规文档流的子元素的margin-top
元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top
height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom
高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom
以上的条件意味着下列的规则:
创建了新的BFC的元素(例如浮动元素或者'overflow'值为'visible'以外的元素)与它的子元素的外边距不会折叠
浮动元素不与任何元素的外边距产生折叠(包括其父元素和子元素)
绝对定位元素不与任何元素的外边距产生折叠
inline-block元素不与任何元素的外边距产生折叠
一个常规文档流元素的margin-bottom与它下一个常规文档流的兄弟元素的margin-top会产生折叠,除非它们之间存在间隙(clearance)。
一个常规文档流元素的margin-top 与其第一个常规文档流的子元素的margin-top产生折叠,条件为父元素不包含 padding 和 border ,子元素不包含 clearance。
一个 'height' 为 'auto' 并且 'min-height' 为 '0'的常规文档流元素的 margin-bottom 会与其最后一个常规文档流子元素的 margin-bottom 折叠,条件为父元素不包含 padding 和 border ,子元素的 margin-bottom 不与包含 clearance 的 margin-top 折叠。
一个不包含border-top、border-bottom、padding-top、padding-bottom的常规文档流元素,并且其 'height' 为 0 或 'auto', 'min-height' 为 '0',其里面也不包含行盒(line box),其自身的 margin-top 和 margin-bottom 会折叠。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.
