찾다
웹 프론트엔드HTML 튜토리얼CSS-浮动篇float_html/css_WEB-ITnose

Float是一个强大的属性,但是它也会困扰我们如果我们不知道它的工作原理的话.这篇文章主要介绍float的原理和基本用法.

我们可以看到float在印刷世界的应用-杂志.很多杂志文章都是左边一个图片,右边的文本浮动环绕着左边的图片.在HTML/CSS的世界中,有浮动样式的图片,文字将会包裹在它的周围,就像杂志的布局一样.图片只是浮动属性众多应用中的一个,我们也可以通过浮动来实现两栏(多栏)布局.实际上,我们可以在任意的HTML元素上使用浮动(块元素).

浮动的定义

来自W3C的定义:

A float is a box that is shifted to the left or right on the current line. The most interesting characteristic of a float (or “floated” or “floating” box) is that content may flow along its side (or be prohibited from doing so by the “clear” property). Content flows down the right side of a left-floated box and down the left side of a right-floated box.

简单来说就是设置了浮动的元素会浮动到相应的左边或者右边,内容会跟着填充到浮动元素的对应地方.

浮动有四个属性值:left|right|inherit|none,分别是左浮动,右浮动,继承(来自父元素的浮动属性值)和无.

来一个杂志效果的例子:

杂志效果浮动

图片的样式为:

img {     float: right;    margin: 10px;}

 

浮动的表现

HTML有一个规则:正常文档流.在正常文档流下,每个块元素(div,p,h1...)都会换行.而浮动的元素在正常文档流下是最先布局的,然后脱离正常的文档流显示在它父元素的左边或者右边.所以浮动元素不再换行而是显示在元素的旁边.

看一个例子:没有设置浮动的三个块

块元素的样式:

.block {     width: 200px;    height: 200px;}

这三个块是在正常文档流下的显示,每个元素在上个元素的正下方,现在我们把三个块都设置左浮动:

.block {     float: left;    width: 200px;    height: 200px;}

效果看这里:左浮动

浮动之后每个块元素都跟在浮动元素的后面.如果父元素没有足够的宽度,那么浮动的元素将会自动换行显示.看这个例子,然后试着缩小浏览器窗口,浮动的块元素会自动换行.

 

清除浮动

浮动元素脱离了正常的文档流,所以会对在浮动之后的文档结构产生影响,因此我们在浮动元素过后,也要相应的清除浮动,让文档结构恢复到正常的文档流.清除浮动的方法有很多中,首先 最基本的就是对应的clear属性.

clear的属性值:left|right|both|inherit|none,相应的浮动对应相应的清除浮动.下面我们来看一个浮动的例子,一共四个块元素,前面两个浮动,后面两个不浮动,结构如下:

<div class="block pink float"></div><div class="block blue float"></div><div class="block green"></div><div class="block orange"></div>

.block {    width: 200px;    height: 200px;}.float { float: left; }.pink { background: #ee3e64; }.blue { background: #44accf; }.green { background: #b7d84b; }.orange { background: #E2A741; }

结果看这里

咦,绿色的块去哪里了呢?然后看看源代码,选中绿色块的HTML,原来在粉红色块的正下方.两个浮动元素的显示正如我们期望的那样,左浮动并在一排显示,但是它们已经脱离了正常的文档流,好像它们并不在那里一样.所以第一个没有浮动的元素就占领了它们的位置,被浮动元素遮盖住.所以我们需要清除浮动,让绿色的块显示.

代码结构如下:

<div class="block pink float"></div><div class="block blue float"></div><div class="block green clear"></div><div class="block orange"></div>

.block {    width: 200px;    height: 200px;}.float { float: left; }.clear { clear: left; }.pink { background: #ee3e64; }.blue { background: #44accf; }.green { background: #b7d84b; }.orange { background: #E2A741; }

通过clear:left这个css样式,绿色的块显示了,正确的清除浮动能让元素在浮动的基础上也不影响正常的文档流.清除浮动后的效果

 

利用浮动属性进行布局

在用DIV布局的现在,DIV+float是我们大部分都喜欢用来实现分栏布局的一种方法.我们来看一个简单的两栏布局.

CSS如下:

#container {    width: 960px;    margin: 0 auto;}#content {    float: left;    width: 660px;    background: #fff;}#navigation {    float: right;    width: 300px;    background: #eee;}#footer {    clear: both;    background: #aaa;    padding: 10px;}

通过设置#content左浮动,#navigation右浮动,总宽度为#container来实现了两栏布局.要注意的是,#footer一定要清除浮动,因为同时存在左浮动和右浮动,所以使用clear:both来清楚两边的浮动.

来看一下如果没有对#footer进行清除浮动的结果.戳这里

 

浮动优先

浮动元素在HTML中放置在不同的位置也会产生不用的显示结果.我们来看一个例子.戳这里

例子中图片向右浮动并且在HTML结构中在未浮动元素P之前.代码结构如下:

<div id="container">    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p></div>

#container {    width: 280px;    margin: 0 auto;    padding: 10px;    background: #aaa;    border: 1px solid #999;}img {    float: right;}

现在我们改变HTML的结构,把浮动元素IMG放在P元素的后面.

<div id="container">    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p>    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" ></div>

具体效果戳这里

图片这时已经没有包含在#container里,因为浮动优先原则里,之前的例子都是浮动元素在未浮动元素之前,所以得到的结果都是在我们的预期之内,而现在我们没有按照这个规则写我们的HTML结构,所以图片溢出在了包含它的父元素之外,这是由于collapsing.

当一个父元素包含了一些浮动元素,而这些浮动元素并没有向它应该的方式围绕在未浮动元素周围时collapsing就出现了.正如上面的例子中,浮动元素IMG就像并不在#container中一样.

一个最常见去修复这个问题的方式就是在我们的浮动元素后面添加一个有清除浮动属性的元素,跟我们之前清除浮动的方式很像,只是新增了一个额外的元素,代码看下面:

<div id="container">    <p>This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.</p>    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <div   style="max-width:90%"></div></div>

但是新增了一行额外的代码并不是一个很好的方法,下面我们有几个其他的方法.

现在有一个HMTL,一个父元素有三个浮动的图片,代码结构如下:

<div id="container">    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" >    <img  src="/static/imghwm/default1.png"  data-src="image.gif"  class="lazy" / alt="CSS-浮动篇float_html/css_WEB-ITnose" ></div>

#container {    width: 260px;    margin: 0 auto;    padding: 10px 0 10px 10px;    background: #aaa;    border: 1px solid #999;}img {    float: left;    margin: 0 5px 0 0;}

我们可以很快的意识到父元素并没有包含浮动的图片,因为浮动元素并不在文档流中,所以对于父元素来说它是空的,结果看这里

现在我们用CSS来修复这个问题而不是添加额外的HTML标记.有一个方法能让父元素自己清除它包含的浮动元素的浮动-overflow:hidden.要注意的是overflow属性并不是为清除浮动而设计的,它可以隐藏内容和滚动条.现在我们在#container上使用这个属性.

#container {    overflow: hidden;    width: 260px;    margin: 0 auto;    padding: 10px 0 10px 10px;    background: #aaa;    border: 1px solid #999;}

显示结果戳这里

还有清除浮动的方法就是使用伪类选择器:

#container:after {    content: ".";    display: block;    height: 0;    clear: both;    visibility: hidden;}

总结:

浮动可以让你的布局变得随意和响应式,同时清除浮动的方式也有很多种,选择你最习惯和喜欢的方式,让布局变得更加优美.

 

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
HTML 태그가 웹 개발에 중요한 이유는 무엇입니까?HTML 태그가 웹 개발에 중요한 이유는 무엇입니까?May 02, 2025 am 12:03 AM

htmltagsareessentialforwebdevelopmentasthuctureandenhancewebpages.1) thefinelayout, semantics 및 internactivity.2) semantictagsimproveAccessibility 및 sseo.3) appleasoftagscanoptimizeperformanceandenseRocRossercompatiber.

HTML 태그 및 속성에 일관된 코딩 스타일을 사용하는 것의 중요성을 설명하십시오.HTML 태그 및 속성에 일관된 코딩 스타일을 사용하는 것의 중요성을 설명하십시오.May 01, 2025 am 12:01 AM

일관된 HTML 인코딩 스타일은 코드의 가독성, 유지 가능성 및 효율성을 향상시키기 때문에 중요합니다. 1) 소문자 태그 및 속성 사용, 2) 일관된 압입 유지, 3) 단일 또는 이중 인용문을 선택하고 고수하십시오. 4) 프로젝트에서 다양한 스타일을 혼합하지 않으십시오.

Bootstrap 4에서 멀티 프로 젝트 회전 목마를 구현하는 방법은 무엇입니까?Bootstrap 4에서 멀티 프로 젝트 회전 목마를 구현하는 방법은 무엇입니까?Apr 30, 2025 pm 03:24 PM

솔루션 Bootstrap4에서 다중 프로 젝트 회전 목마를 구현하는 것은 부트 스트랩 4에서 멀티 프로 젝트 회전 목마를 구현하는 것은 쉬운 일이 아닙니다. 부트 스트랩 ...

DeepSeek 공식 웹 사이트는 마우스 스크롤 이벤트를 관통하는 효과를 어떻게 달성합니까?DeepSeek 공식 웹 사이트는 마우스 스크롤 이벤트를 관통하는 효과를 어떻게 달성합니까?Apr 30, 2025 pm 03:21 PM

마우스 스크롤링 이벤트 침투의 효과를 달성하는 방법은 무엇입니까? 웹을 탐색하면 종종 특별한 상호 작용 디자인이 발생합니다. 예를 들어, DeepSeek 공식 웹 사이트에서 � ...

HTML 비디오의 재생 제어 스타일 수정 방법HTML 비디오의 재생 제어 스타일 수정 방법Apr 30, 2025 pm 03:18 PM

HTML 비디오의 기본 재생 제어 스타일은 CSS를 통해 직접 수정할 수 없습니다. 1. JavaScript를 사용하여 사용자 정의 컨트롤을 만듭니다. 2. CSS를 통해 이러한 통제를 아름답게합니다. 3. video.js 또는 plyr와 같은 라이브러리를 사용하여 호환성, 사용자 경험 및 성능을 고려하면 프로세스를 단순화 할 수 있습니다.

휴대 전화에서 기본 선택을 사용하면 어떤 문제가 발생합니까?휴대 전화에서 기본 선택을 사용하면 어떤 문제가 발생합니까?Apr 30, 2025 pm 03:15 PM

휴대 전화에서 기본 선택을 사용하는 데있어 잠재적 인 문제는 모바일 애플리케이션을 개발할 때 종종 상자를 선택해야 할 필요가 있습니다. 일반적으로 개발자 ...

휴대 전화에서 기본 선택을 사용하는 단점은 무엇입니까?휴대 전화에서 기본 선택을 사용하는 단점은 무엇입니까?Apr 30, 2025 pm 03:12 PM

휴대 전화에서 기본 선택을 사용하는 단점은 무엇입니까? 모바일 장치에서 애플리케이션을 개발할 때는 올바른 UI 구성 요소를 선택하는 것이 매우 중요합니다. 많은 개발자 ...

Three.js 및 Octree를 사용하여 방에서 3 인칭 로밍의 충돌 처리를 최적화하는 방법은 무엇입니까?Three.js 및 Octree를 사용하여 방에서 3 인칭 로밍의 충돌 처리를 최적화하는 방법은 무엇입니까?Apr 30, 2025 pm 03:09 PM

Three.js 및 Octree를 사용하여 방에서 3 인칭 로밍의 충돌 처리를 최적화하십시오. 3.js의 Octree를 사용하여 방에서 3 인칭 로밍을 구현하고 충돌을 추가하십시오 ...

See all articles

핫 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 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!