목차
1 Floating은 레이아웃에 편리함을 제공하지만 새로운 문제를 가져오기도 합니다
2.1.1 添加空p清理浮动
2.1.2 使用CSS插入元素
2.1.3 大师手笔
2.2.1 利用float来使父容器形成BFC
2.2.2 使用BFC的其它局限
2.2.3 hasLayout
3 一个相对靠谱的解决方案" >3 一个相对靠谱的解决方案
4 最后
웹 프론트엔드 CSS 튜토리얼 CSS 클리어 플로트 처리

CSS 클리어 플로트 처리

Jun 28, 2017 am 10:32 AM
clear

float 속성은 CSS 레이아웃에서 자주 사용되지만 float 속성을 사용하면 일반 흐름에서 상위 컨테이너와 분리되므로 매우 고민스럽습니다.

1 Floating은 레이아웃에 편리함을 제공하지만 새로운 문제를 가져오기도 합니다


CSS 클리어 플로트 처리

 1 nbsp;html> 2  3  4     <meta> 5     <title>Clear float</title> 6     <style> 7         .container{ 8             margin: 30px auto; 9             width:600px;10             height: 300px;11         }12         .p{13             border:solid 3px #a33;14         }15         .c{16             width: 100px;17             height: 100px;18             background-color: #060;19             margin: 10px;20             float: left;21         }22     </style>23 24 25     <p>26         </p><p>27             </p><p></p>28             <p></p>29             <p></p>30         31     32 33 
로그인 후 복사

CSS 클리어 플로트 처리

우리가 바라는 효과는 이렇습니다

하지만 결과는 이렇습니다

부모 컨테이너와 No Floating Child Elements, 일반적으로 알려진 붕괴로서 이 현상을 없애기 위해서는 클리어 플로팅 기술이 필요합니다.

2

2.1 float를 지우려면clear 속성을 사용하세요.

  1. clear속성은 무엇인가요?

    clear 속성은 요소의 어느 쪽이 다른 부동 요소를 허용하지 않는지 지정합니다. 지금 당장 코드를 수정하세요

    <p>
        </p><p></p>
        <p></p>
        <p></p>
    로그인 후 복사
  2. <p></p>

    第二个p添加了clear:both属性后,其左侧的p(第一个p)不再浮动,所以后面的p都还行(huan hang)了。我们可以利用这点儿在父容器的最后添加一个空的p,设置属性clear:left,这样就可以达到我们目的了。

    2.1.1 添加空p清理浮动

    对我们刚才代码稍作修改


    <p>
        </p><p></p>
        <p></p>
        <p></p>
        <p></p>
    로그인 후 복사

    也就是在父容器最后添加 


    <p></p>
    로그인 후 복사
    로그인 후 복사

    看看效果

    果真好使了,有些同学看了后可能感觉奇怪,为什么想上一个例子修改第二个p


    <p></p>
    로그인 후 복사
    로그인 후 복사

    没有变成这样的效果

    说一下自己的拙见,clear:left属性只是消除其左侧p浮动对它自己造成的影响,而不会改变左侧p甚至于父容器的表现,在父容器看来,三个p还都是float的,所以高度依旧塌陷。但是我们在最后添加了一个非浮动的p,由于它有clear:left属性,所以它会按照左侧p不浮动来定位自己,也就是定位到下一行,而父容器看到有一个非浮动、普通流的子元素元素,会将其包围,这样造成了顺便也把三个浮动元素也包裹起来的效果,高度不再塌陷(不知道说明白没有或者这种理解对不对,还望明白的同学指点)。

    当然除了添加p,还可以添加br等其它html元素,原理相同,不再赘述。

    2.1.2 使用CSS插入元素

    上面的做法浏览器兼容性不错,但是有个很大的问题就是向页面添加了内容来达到改变效果的目的,也就是数据和表现混淆,既然是变现,看看怎么使用CSS来解决这一问题。根本的做法还是向父容器最后追加元素,但我们可以利用CSS的:after伪元素来做此事。

    添加一个类 floatfix


    CSS 클리어 플로트 처리

    .floatfix:after{
        content:"."; 
        display:block; 
        height:0; 
        visibility:hidden; 
        clear:left;
    }
    로그인 후 복사

    CSS 클리어 플로트 처리

    对父容器添加此类


    <p>
        </p><p>1</p>
        <p>2</p>
        <p>3</p>
    로그인 후 복사
    로그인 후 복사

    这样我们就可以看到正确效果了

    简单解释一下,对父容器添加floatfix类后,会为其追加一个不可见的块元素,然后设置其clear属性为left,和刚才原理类似。

    2.1.3 大师手笔

    Nicolas Gallagher 在A new micro clearfix hack中提供了一种看起来更清爽的做法


    .floatfix:after{
        content:"";
        display:table;
        clear:both;
    }
    로그인 후 복사

    Nicolas Gallagher原文中还有:before是为了处理margin边距重叠,本文中没有列出来。

    有同学会提出来了上面方法看起来不错,但是IE6、7不支持伪元素怎们办?这就需要我们使用BFC/haslayout的姿势了

    2.2 使父容器形成BFC

    经过了前些日子园里关于BFC的狂轰滥炸相信大家都对BFC有了一定的了解,不过瘾的同学可以看看 Block Format Content,BFC有三个特性

    • BFC会阻止垂直外边距(margin-top、margin-bottom)叠加

    • BFC不会重叠浮动元素

    • BFC可以包含浮动

    我们可以利用BFC的第三条特性来“清浮动”,这里其实说清浮动已经不再合适,应该说包含浮动。也就是说只要父容器形成BFC就可以,简单看看如何形成BFC

    • float为 left|right

    • overflow为 hidden|auto|scroll

    • display为 table-cell|table-caption|inline-block

    • position为 absolute|fixed

    我们可以对父容器添加这些属性来形成BFC达到“清浮动”效果

    2.2.1 利用float来使父容器形成BFC

    简单修改一下代码


    <p>
        </p><p>1</p>
        <p>2</p>
        <p>3</p>
    로그인 후 복사
    로그인 후 복사

    这样我们可以得到结果

    我们可以看到父容器高度没有塌陷,但是长度变短了,因为p应用float‘后会根据内容来改变长度,这个在很多时候很有用,但是我们不希望有这种效果怎么办?

    2.2.2 使用BFC的其它局限

    上面提到使用BFC使用float的时候会使父容器长度缩短,而且还有个重要缺陷——父容器float解决了其塌陷问题,那么父容器的父容器怎么办?难道要全部使用folat吗(确实有这种布局方式倒是)。BFC的几种方式都有各自的问题,overflow属性会影响滚动条和绝对定位的元素;position会改变元素的定位方式,这是我们不希望的,display这几种方式依然没有解决低版本IE问题。。。

    看起来还是第一种方式比较好,可是低版本IE该怎么办呢?

    2.2.3 hasLayout

    我们知道在IE6、7内有个hasLayout的概念,很多bug正式由hasLayout导致的,当元素的hasLayout属性值为false的时候,元素的尺寸和位置由最近拥有布局的祖先元素控制。当元素的hasLayout属性值为true的时候会达到和BFC类似的效果,元素负责本身及其子元素的尺寸设置和定位。我们可以利用这点儿在IE6、7下完成清浮动,先看看怎么使元素hasLayout为true

    • position: absolute

    • float: left|right

    • display: inline-block

    • width: 除 “auto” 外的任意值

    • height: 除 “auto” 外的任意值

    • zoom: 除 “normal” 外的任意值

    • writing-mode: tb-rl

    在IE7中使用overflow: hidden|scroll|auto 也可以使hasLayout为true

    3 一个相对靠谱的解决方案

    经过上面的比较我们可以得出一个相对靠谱的解决方案

    • 在IE+、现代浏览器上使用伪元素

    • 在IE6、7使用hasLayout

    具体应该使用哪种方式来使元素hasLayout为true呢?相对而言zoom:1比较好,因为不会造成其它影响。想造成只在IE6、7上使用某些CSS的效果,我们还得需要一些CSS hack的知识,感兴趣同学可以看看 CSS hack,我们可以写出这样的CSS


    CSS 클리어 플로트 처리

    .floatfix{
        *zoom:1;
    }.floatfix:after{
        content:"";
        display:table;
        clear:both;
    }
    로그인 후 복사

    CSS 클리어 플로트 처리

    4 最后

    虽然我们得出了一种浏览器兼容的靠谱解决方案,但这并不代表我们一定得用这种方式,很多时候我们的父容器本身需要position:absolute等形成了BFC的时候我们可以直接利用这些属性了,大家要掌握原理,活学活用。总而言之清理浮动两种方式

    1. 利用 clear属性,清除浮动

    2. 使父容器形成BFC

위 내용은 CSS 클리어 플로트 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

GraphQL 캐싱 작업 GraphQL 캐싱 작업 Mar 19, 2025 am 09:36 AM

최근에 GraphQL 작업을 시작했거나 장단점을 검토 한 경우 "GraphQL이 캐싱을 지원하지 않음"또는

Redwood.js 및 동물 군을 사용하여 이더 리움 앱 구축 Redwood.js 및 동물 군을 사용하여 이더 리움 앱 구축 Mar 28, 2025 am 09:18 AM

최근 Bitcoin의 가격이 20k 달러가 넘는 USD가 최근에 등반되면서 최근 30k를 끊었으므로 Ethereum을 만드는 데 깊이 다이빙을 할 가치가 있다고 생각했습니다.

vue 3 vue 3 Apr 02, 2025 pm 06:32 PM

그것은#039; VUE 팀에게 그것을 끝내는 것을 축하합니다. 나는 그것이 막대한 노력과 오랜 시간이라는 것을 알고 있습니다. 모든 새로운 문서도 있습니다.

브라우저에서 유효한 CSS 속성 값을 얻을 수 있습니까? 브라우저에서 유효한 CSS 속성 값을 얻을 수 있습니까? Apr 02, 2025 pm 06:17 PM

나는 누군가이 매우 합법적 인 질문으로 글을 썼습니다. Lea는 브라우저에서 유효한 CSS 속성 자체를 얻는 방법에 대해 블로그를 작성했습니다. 이는 이와 같습니다.

CI/CD에 약간 CI/CD에 약간 Apr 02, 2025 pm 06:21 PM

"웹 사이트"는 "모바일 앱"보다 더 잘 맞지만 Max Lynch 의이 프레임이 마음에 듭니다.

반응 형 디자인을위한 브라우저 비교 반응 형 디자인을위한 브라우저 비교 Apr 02, 2025 pm 06:25 PM

목표가 귀하의 사이트를 동시에 다른 크기로 표시하는 이러한 데스크탑 앱이 많이 있습니다. 예를 들어, 글을 쓸 수 있습니다

WordPress 블록 편집기에서 Markdown 및 현지화 사용 WordPress 블록 편집기에서 Markdown 및 현지화 사용 Apr 02, 2025 am 04:27 AM

WordPress 편집기에서 사용자에게 직접 문서를 표시 해야하는 경우 가장 좋은 방법은 무엇입니까?

끈적 끈적한 포지셔닝 및 대시 Sass가있는 쌓인 카드 끈적 끈적한 포지셔닝 및 대시 Sass가있는 쌓인 카드 Apr 03, 2025 am 10:30 AM

다른 날, 나는 Corey Ginnivan의 웹 사이트에서 스크롤 할 때 카드 모음이 서로 쌓이는 것을 발견했습니다.

See all articles