>  기사  >  웹 프론트엔드  >  BFC 및 높이 붕괴 문제에 대해

BFC 및 높이 붕괴 문제에 대해

一个新手
一个新手원래의
2017-10-24 09:04:072262검색

  아마도 이 개념을 작년에 접하게 됐을 겁니다. 간략하게 기록해두긴 했지만, 최근 가을 채용과 겹치기 때문에, 더 깊은 인상을 남기기 위해 여기에 글을 쓰겠습니다.

  BFC란 무엇입니까?

  페이지의 모든 요소에는 BFC라고 하는 암묵적 속성인 블록 형식 지정 컨텍스트(블록 수준 형식 지정 컨텍스트)가 있습니다.

 BFC의 용도는 무엇인가요? BFC를 활성화하는 방법은 무엇입니까? BFC를 켜면 어떻게 되나요?

여기서는 먼저 몇 가지 작은 상황을 살펴보겠습니다. 그리고 몇 가지 다른 질문도 던져보세요

     (1) 


<p class="p1">
    <p class="p2">p2</p>
    <p class="p3">p3</p></p><p class="p4"></p>


            .p1{
                width: 50px;
                background-color: #bfc;
                margin-bottom:50px;
            }
            .p2{
                width: 50px; height: 50px;
                background-color: #0000FF;
                margin-bottom:50px;
                color: #fff;
            }
            .p3{
                width: 50px;height: 50px;
                background-color: #0000FF;
                margin:50px 0 50px 0;
                color: #fff;            
            }
            .p4{width: 100px; height: 100px;background-color: #bfc; }

   ∨한번 봅시다. 여기 4개의 상자가 있습니다. 파란색은 50px입니다.

된장 초록색 것 은 상위 요소 p1이고 그것의 margin-bottom과 하위 요소 p3은 모두 50px

입니다. 상위 요소와 하위 요소의 여백이 겹치고 아래쪽에 있는 p의 아래쪽 여백이 분명합니다. 100px가 아닌 50px입니다.

  ②p2와 p3 사이의 거리도 50px이므로 둘 사이의 수직 여백도 축소됩니다.

  그렇다면 어떤 상황에서 세로 여백이 겹쳐지는지 살펴보겠습니다.

   ① 우선 가로 여백은 어떠한 경우에도 겹치지 않으므로 첫 번째 점은 세로임을 분명히 해주세요.

  ② 인접, 인접하다는 것은 요소가 클리어, 콘텐츠, 패딩, 테두리로 구분되지 않는다는 점입니다. (플로트를 지우는 일반적인 방법의 원리는 나중에 명확히 할 수 있습니다.)

   코드를 보면 p1과 p3, p2와 p3이 모두 인접 관계라는 것을 알 수 있습니다. 따라서 수직 여백이 축소됩니다.

                                     실제로) BFC가 유용할 것입니다. 먼저 효과를 보고 어떻게 하는지 이야기해보겠습니다.

    p1과 p3가 BFC를 켠 후(p1의 오버플로는 자동 또는 숨김, p3은 부동), p2와 p3 사이의 여백이 겹치는 대신 추가되는 것을 볼 수 있습니다.

  p1과 p3 아래쪽 여백도 분리됩니다. 또한 상위 요소에 대해 BFC가 켜져 있으면 인접한 하위 요소와의 여백 겹침이 취소될 수 있습니다(자식을 열 필요가 없음). 여기서는 인접한 형제 요소 간의 효과를 보여주기 위해 완전히 활성화됩니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ                               log Upover in in>> in>>>>>>|

    

실제로 인접한 요소 중 하나가 BFC가 켜져 있는 한 물론 이 경우 플로팅 문제를 해결하는 것을 고려해야 합니다. 예를 들어 지금 예시에서는 p3이 켜집니다. 플로팅되지만 p1은 BFC를 켜지 않습니다. 높은 수준의 붕괴가 발생했습니다.

    (2) 还是刚刚的例子,把p2和p4去掉,p3开启浮动,此时父元素p1发生高度塌陷

    当我们开启p1的BFC后成功解决由于浮动引起的高度塌陷。原理是开启了BFC的元素,其子元素也会参与到高度计算中。

    即第二个作用就是避免浮动引起的高度塌陷

     接下来来说说如何开启BFC:overflow(非visible)【注意在处理父子外边距折叠时应是父元素开启BFC】、float(非none)、position(非static和relative)、display(inlined-block、table-cell、table-caption)。其中之一即可。

    兼容:ie6中没有BFC,但有hasLayout,与BFC类似。开启:直接将元素的zoom设置为1。 zoom表示放大的意思,后面跟一个数字,即放大倍数。

     那么有的时候的需求是父元素不能动overflow,那要解决高度塌陷怎么办,还有另外的清除浮动方案。

    挺多的,百度都有,那这里就举一个最常用的例子吧。


.clear:after{
    content: &#39;&#39;;
    clear: both;
    display: block;    
}

     把这个类添加到高度塌陷的父元素上即可。

    这里顺便讲讲这个做法的原理吧。

      一个元素开启浮动后,其旁边的留白部分如果够后面的元素补上,后面的元素就会补上,后面的元素(一定要非浮动)加了clear后,就可以清除其周围浮动的效果,使其不会补到上面去,就可以把父元素的高度撑开。

    利用这个原理,我们在父元素后面增加一个:after伪元素,让其清除浮动,又不至于补上浮动的留白,从css增加空的content对比直接增加空p的好处就是避免增加多余的dom节点。

위 내용은 BFC 및 높이 붕괴 문제에 대해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.