웹 프론트엔드 HTML 튜토리얼 常用的CSS清除浮动的方法优缺点分析(个人学习笔记)_html/css_WEB-ITnose

常用的CSS清除浮动的方法优缺点分析(个人学习笔记)_html/css_WEB-ITnose

Jun 24, 2016 am 11:19 AM

一、抛一块问题砖(display: block)先看现象:

    分析HTML代码结构:

<div class="outer">    <div class="div1">1</div>    <div class="div2">2</div>    <div class="div3">3</div></div>

  

分析CSS代码样式:

.outer{border: 1px solid #ccc;background: #fc9;color: #fff; margin: 50px auto;padding: 50px;}.div1{width: 80px;height: 80px;background: red;float: left;}.div2{width: 80px;height: 80px;background: blue;float: left;}.div3{width: 80px;height: 80px;background: sienna;float: left;}

这里没有给最外层的DIV.outer 设置高度,但是我们知道如果它里面的元素不浮动的话,那么这个外层的高是会自动被撑开的。但是当内层元素浮动后,就出现了一下影响:

(1):背景不能显示 (2):边框不能撑开 (3):margin 设置值不能正确显示

当一个内层元素是浮动的时候,如果没有关闭浮动时,其父元素也就不会再包含这个浮动的内层元素,因为此时浮动元素已经脱离了文档流。也就是为什么外层不能被撑开了!

解决办法如下(使用其他代码示例):

1、父级div定义伪类:after和zoom

<style type="text/css"> .div1{background:#000080;border:1px solid red;} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD}      /*清除浮动代码*/ .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0} .clearfloat{zoom:1}   </style> <div class="div1 clearfloat"> <div class="left">Left</div> <div class="right">Right</div> </div><div class="div2"> div2 </div>

  • 原理:IE8以上和非IE浏览器才支持:after,zoom(IE转有属性)可解决ie6,ie7浮动问题。其中clear:both;指清除所有浮动;content: '.'; display:block;对于FF/chrome/opera/IE8不能缺少,其中content()可以取值也可以为空。visibility:hidden;的作用是允许浏览器渲染它,但是不显示出来,这样才能实现清楚浮动。
  • 优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
  • 缺点:代码多,不少初学者不理解原理,要两句代码结合使用,才能让主流浏览器都支持
  • 建议:推荐使用,建议定义公共类,以减少CSS代码。(相对于空标签闭合浮动的方法代码似乎还是有些冗余,通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B,这个字符本身是不可见的,所以我们可以考虑省略掉 visibility:hidden )
  • 评分:★★★★☆
  • 2、结尾处加空div标签clear:both

    <style type="text/css"> .div1{background:#000080;border:1px solid red} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD}      /*清除浮动代码*/ .clearfloat{clear:both}   </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div><div class="clearfloat"></div></div><div class="div2"> div2 </div>

  • 原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
  • 优点:简单,代码少,浏览器支持好,不容易出现怪问题
  • 缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不爽
  • 建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法
  • 评分:★★★☆☆
  • 3、父级div定义overflow:hidden

    <style type="text/css"> .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD}   </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div></div><div class="div2"> div2 </div>

  • 原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
  • 优点:简单,代码少,浏览器支持好
  • 缺点:不能和position配合使用,因为超出的尺寸的会被隐藏,无法显示需要溢出的元素
  • 建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用
  • 评分:★★★☆☆
  • 4、父级div定义overflow:auto

    <style type="text/css"> .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:auto} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD}   </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div></div><div class="div2"> div2 </div>

  • 原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
  • 优点:简单,代码少,浏览器支持好
  • 缺点:内部宽高超过父级div时,会出现滚动条。
  • 建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。
  • 评分:★★☆☆☆
  • 5、父级div定义height

    <style type="text/css"> .div1{background:#000080;border:1px solid red;/*解决代码*/height:200px;} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD}   </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div> </div><div class="div2"> div2 </div>

  • 原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题
  • 优点:代码简洁
  • 缺点:高度被固定死了,只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
  • 建议:不推荐使用,只建议高度固定的布局时使用
  • 评分:★★☆☆☆
  • 본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

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

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

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

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

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

    뜨거운 주제

    HTML에서``vs.`  '' HTML에서``vs.` '' Jul 19, 2025 am 12:41 AM

    큰 블록 컨텐츠 영역을 나누는 데 사용되는 블록 레벨 요소입니다. 텍스트 또는 내용 조각의 작은 세그먼트를 포장하는 데 적합한 인라인 요소입니다. 특정 차이점은 다음과 같습니다. 1. 단독으로 행, 너비 및 높이, 내부 및 외부 여백을 특화시킬 수 있으며, 이는 종종 헤더, 사이드 바 등과 같은 레이아웃 구조에 사용됩니다. 2. 선을 감싸지 말고 내용 너비 만 차지하며 변색, 대담 등과 같은 로컬 스타일 제어에 사용됩니다. 3. 사용 시나리오 측면에서 전체 영역의 레이아웃 및 구조 구성에 적합하며 전체 레이아웃에 영향을 미치지 않는 소규모 스타일 조정에 사용됩니다. 4. 중첩시 요소가 포함될 수 있으며 블록 레벨 요소는 내부에 중첩되어서는 안됩니다.

    html`link rel = 'preload'`을 사용한 자원을 사전로드합니다 html`link rel = 'preload'`을 사용한 자원을 사전로드합니다 Jul 19, 2025 am 12:54 AM

    LinkRel = "Preload"는 페이지로드 성능을 최적화하고 중요한 리소스를 미리로드하는 데 사용되는 기술입니다. 핵심 목적은 글꼴, 주요 CSS/JS 및 홈 화면 이미지와 같이 홈 화면 렌더링에 중요한 리소스로드를 우선 순위로 삼는 것입니다. 사용할 때주의하십시오. 1. 자원 유형을 지정하도록 AS 속성을 올바르게 설정하십시오. 2. 남용을 피하고 과도한 대역폭 사용을 방지하십시오. 3. 자원이 실제로 사용되도록하십시오. 그렇지 않으면 요청을 낭비하게됩니다. 4. 교차 도메인 자원에 대한 크로스 코리 린 속성. AS 속성 부족과 같은 잘못된 쓰기 방법으로 인해 예압이 유효하지 않습니다. 합리적 사용은 페이지 로딩 효율을 향상시킬 수 있으며, 그렇지 않으면 비생산적 일 수 있습니다.

    초보자를위한 필수 HTML 태그 초보자를위한 필수 HTML 태그 Jul 27, 2025 am 03:45 AM

    HTML을 신속하게 시작하려면 웹 골격을 만들기 위해 몇 가지 기본 태그 만 마스터하면됩니다. 1. 페이지 구조는 필수적이며 루트 요소 인 메타 정보를 포함하며 컨텐츠 디스플레이 영역입니다. 2. 제목을 사용하십시오. 레벨이 높을수록 숫자가 작습니다. 레벨을 건너 뛰지 않도록 태그를 사용하여 텍스트를 분할하십시오. 3. 링크는 태그를 사용하고 HREF 속성과 일치하며 이미지는 태그를 사용하고 SRC 및 ALT 속성을 포함합니다. 4. 목록은 순서가없는 목록 및 주문 된 목록으로 나뉩니다. 각 항목은 표시되며 목록에 중첩되어야합니다. 5. 초보자는 모든 태그를 암기 할 필요가 없습니다. 글을 쓰는 동안 글을 쓰고 확인하는 것이 더 효율적입니다. 기본 웹 페이지를 만들기 위해 구조, 텍스트, 링크, 사진 및 목록을 마스터하십시오.

    Shadow Dom 개념 및 HTML 통합 Shadow Dom 개념 및 HTML 통합 Jul 24, 2025 am 01:39 AM

    Shadowdom은 분리 된 DOM 하위 트리를 생성하기 위해 웹 구성 요소 기술에 사용되는 기술입니다. 1. 일반적인 HTML 요소에서 독립적 인 DOM 구조의 산을 자체 스타일과 동작으로 허용하며 기본 문서에 영향을 미치지 않습니다. 2. att 3. HTML과 함께 사용하면 세 가지 주요 기능이 있습니다. 명확한 구조, 스타일 격리 및 컨텐츠 투영 (슬롯); 4. 참고에는 복잡한 디버깅, 스타일 범위 제어, 성능 오버 헤드 및 프레임 워크 호환성 문제가 포함됩니다. 요컨대, Shadowdom은 재사용 가능 및 비 폴 루팅 UI 구성 요소를 구축하기위한 기본 캡슐화 기능을 제공합니다.

    다른  태그 안에  태그를 넣을 수 있습니까? 다른 태그 안에 태그를 넣을 수 있습니까? Jul 27, 2025 am 04:15 AM

    sinvalidhtml; browsersautomicallycloseThefirstbeOptenTenext, rentingInseparateParAgraphs.linlineElements, orforstylingwithinaparagraph, orforstylingwithinaparagraph, 또는 BlockContainers Orblockcontainers Orblockcontainers

    링크에 대한 HTML` 다운로드 '속성 사용 링크에 대한 HTML` 다운로드 '속성 사용 Jul 17, 2025 am 03:57 AM

    TheHTMLdownloadattributeallowsuserstodownloadfilesdirectlyfromalinkbyusingthetag.Toimplementit,adddownloadtotheanchortag,suchasDownloadPDF,orspecifyacustomfilenamelikeDownloadasmy-document.pdf.1.Itworksbestwithsame-originURLsandcommonfiletypeslikePDF

    HTML`스타일 '태그 : 인라인 대 내부 CSS HTML`스타일 '태그 : 인라인 대 내부 CSS Jul 26, 2025 am 07:23 AM

    스타일 배치 방법은 장면에 따라 선택해야합니다. 1. 인라인은 단일 요소 또는 동적 JS 제어의 임시 수정에 적합합니다. 2. 내부 CSS는 페이지가 적고 간단한 구조가있는 프로젝트에 적합하며, 이는 로그인 페이지의 기본 스타일 설정과 같은 스타일의 중앙 집중식 관리에 편리합니다. 3. 재사용, 유지 보수 및 성능에 우선 순위가 부여되며 대규모 프로젝트를 위해 외부 링크 CSS 파일을 분할하는 것이 좋습니다.

    HTML에 YouTube 비디오를 포함시키는 방법 HTML에 YouTube 비디오를 포함시키는 방법 Jul 16, 2025 am 04:43 AM

    웹 페이지에 YouTube 동영상을 포함 시키려면 YouTube에서 제공 한 임베디드 코드를 직접 복사하여 HTML 페이지에 붙여 넣을 수 있습니다. 1. 대상 비디오 페이지를 열고 올바른 비디오 링크를 확인하십시오. 2. "공유"→ "포함"을 클릭하여 생성 된 iframe 코드를 복사합니다. 3. 또는 수동으로 iframe 태그를 생성하고 src를 https://www.youtube.com/embed/video id로 설정하십시오. 4. 반응 형 너비를 사용하고 허용 된 화면 속성을 추가하는 것이 좋습니다. 5. 고급 제안에는 컨테이너를 사용하여 16 : 9 비율을 달성하고, 성능을 향상시키기위한로드 지연, 개인 정보 보호 정책 팁에주의를 기울이는 것이 포함됩니다.

    See all articles