웹 프론트엔드 HTML 튜토리얼 Containing Floats 包含浮动_html/css_WEB-ITnose

Containing Floats 包含浮动_html/css_WEB-ITnose

Jun 24, 2016 pm 12:00 PM
포함하다 뜨다

原文: http://www.complexspiral.com/publications/containing-floats/

 

正因为浮动功能强大,而且很有用,所以常被用作布局的技巧工具。你可能看到过图1中的情形,这是仅由两个div元素实现的,每个div中有一个浮动的图片。

图1. 那是不正确的

 

这可能不是作者的意图,但是考虑到所使用的样式,这是正确的布局啊。我们是这样创建的:

div.item {border: 1px solid; padding: 5px;}div.item img {float: left; margin: 5px;}
로그인 후 복사

以上是所有的样式。在图1中看到的结果是因为div元素没有“拉伸”以包含住其中的浮动图片。从另外的角度来看,出现这种情况是因为浮动元素“伸出”了div元素的底部。

这不是一个bug,也不是CSS的缺陷。事实上,许多作者大部分情况下想要这种伸出的行为。仅仅在图1中显示的例子不是他们想要的。

理解问题

那什么时候作者想要浮动伸出包含元素的效果时被认为是正确的呢?很简单:从历史上看最常见的使用浮动的情况是什么。考虑下图2和生成此效果的基本标记结构。

图2. 浮动图片,流动文本

( http://meyerweb.com/other/china/jul31.html穿越中国)

<p> ...text... <img  class="picture lazy"  src="/static/imghw/default1.png"  data-src="jul31-03-sm.jpg"     style="max-width:90%" border="0" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > ...text...</p><p> ...text...</p>
로그인 후 복사
将流动的文本环绕在图片周围这种实践可追溯到很久以前。这就是从Netscape1.1开始将这种能力添加到Web的原因,也是CSS使用属性float使其成为可能的原因。但是再仔细看看图2。浮动图片伸出了包含它的元素。我们通过给段落添加边框可以看得更清楚,如图3所示。
로그인 후 복사
图3.在段落上添加边框
로그인 후 복사

所以现在我们知道了浮动元素伸出包含它们的元素为什么是重要的了。如果不伸出,图2将是图4的样子。

图4. 如果浮动元素扩展它们的父元素

这将是设计者不能够接受的。所以,为了保留Web设计的传统和作者的期望,CSS被设计成允许浮动元素伸出包含它们的元素的底部。虽然这对于一般的文本流是必须的,但主要问题出现在把浮动用于布局用途的时候。

清除解决方案

如果浮动被用在非表格布局中,那么需要某种方式让包含它们的元素拉伸以包含住它们。目前,需要一点结构性的hack。既然我们要在包含元素的底部放一个元素来清除以前浮动的底部,clear是我们的答案。我们仅需要在容器结束之前插入一个块级元素,并清除浮动。考虑:

<div class="item"> <img  src="/static/imghw/default1.png"  data-src="w6144.gif"  class="lazy" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > Widget 6144 <br>$39.95 <hr></div><div class="item"> <img  src="/static/imghw/default1.png"  data-src="w6145.gif"  class="lazy" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > Widget 6145 <br>$44.95 <hr></div>
로그인 후 복사
现在我们将以下规则应用到前面的标记上,得到图5的效果。
로그인 후 복사
로그인 후 복사
로그인 후 복사
div.item hr {display: block; clear: left; margin: -0.66em 0;  visibility: hidden;}
로그인 후 복사

图5 使用水平规则强制扩展

通过确保hr元素是块级的,又是正常流的一部分,而且清除了浮动,我们强制div“拉伸包含住”左浮动的图片。

负数的顶部和底部margin一般产生关闭hr占用的空间的效果。然而,这不是精度的,而且浏览器之间也不尽相同。水平规则的半神秘性使得很难确切预测将会出现什么状况。hr的有效高度可能是0,或者一个小正数,或者甚至是一个负数高度。

因此,在需要精确清除效果的情况下,作者可以使用div取代hr来创建清除效果。例如:

div.clearer {clear: left; line-height: 0; height: 0;}<div class="item"> <img  src="/static/imghw/default1.png"  data-src="w6144.gif"  class="lazy" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > Widget 6144 <br>$39.95 <div class="clearer"> </div></div>
로그인 후 복사

设置Float来修复Float

有一种方式可以避免过度使用到现在为止讨论过的结构性hack,虽然这些结构性hack有时候仍然是必要的。在大多数浏览器中,正如CSS2.1中所定义的,浮动元素会扩展以便包含任何从它遗传的浮动元素。所以在小产品例子中,我们可以移除“clearer”元素,使用这些风格替代:

div.item {float: left; border: 1px solid; padding: 5px; width: 60%;}div.item img {float: left; margin: 5px;}
로그인 후 복사
注意我们浮动了图片和“item”div。通过设置div的宽度超高50%,我们确保div不会出现在同一行,而是垂直地堆积在一起。效果如图6。图6 使用浮动实现拉伸以包含住浮动元素。
로그인 후 복사
就标记和风格而言,很明显这样管理起来更简单了。然而,到现在为止讨论过的hack仍然是有用的。假设你想在商品的下面放些建议文本。为了让文本不流到商品的右边,我们需要插入清除hack。这会引导我们创建如下标记,如图7所示。
로그인 후 복사
로그인 후 복사
로그인 후 복사
<div class="item"> <img  src="/static/imghw/default1.png"  data-src="w6144.gif"  class="lazy" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > Widget 6144 <br>$39.95</div><div class="item"> <img  src="/static/imghw/default1.png"  data-src="w6145.gif"  class="lazy" alt="Containing Floats 包含浮动_html/css_WEB-ITnose" > Widget 6145 <br>$44.95</div> <div class="clearer"> </div> <p>Widgets are sold on an "as is" basis without    warranty or guarantee.</p>
로그인 후 복사

图7 浮动加hack实现想要的布局
로그인 후 복사

起清除作用的div有效地将正常流推下来,强制任何后面的内容跟在被清除元素后面,因此跟在浮动div后面。
로그인 후 복사
使用浮动包含浮动的潜在缺陷是依赖浏览器对多层嵌套的浮动元素的布局的一致解释。如果这些浮动元素是更复杂布局的一部分,情况变得更脆弱,该部件可能使用了浮动,定位或表格。这不是说这些布局不可能实现。然而,他们可能涉及大量的试验和错误,避免晦涩浮动和其他可能潜藏在渲染引擎内部的布局 bug。
로그인 후 복사
<strong>总结</strong>
로그인 후 복사
通过理解浮动和正常流之间的相互联系,理解清除可用来处理浮动周围的正常流,作者可以把浮动当作一个非常强大的布局工具。由于浮动最初不是用于布局,为了让它们达到预期有些hack可能是必要的。这可能涉及包含浮动的浮动元素,“清除”元素,或者两者的结合。
로그인 후 복사
展望未来,已有各种提议要增强CSS,允许作者声明一个元素拉伸以包含住其中的任何浮动元素。很明显将这种能力添加到CSS是受欢迎的,但是截止到本文撰写时,还没有添加这种能力,对这种能力的支持可能还需要很长一段时间。源代码 http://files.cnblogs.com/jeffma/code.rar
로그인 후 복사

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

HTML, CSS 및 jQuery: 플로팅 효과가 있는 버튼 만들기 HTML, CSS 및 jQuery: 플로팅 효과가 있는 버튼 만들기 Oct 24, 2023 pm 12:09 PM

HTML, CSS 및 jQuery: 플로팅 효과가 있는 버튼을 만들려면 특정 코드 예제가 필요합니다. 소개: 요즘 웹 디자인은 HTML, CSS 및 JavaScript와 같은 기술을 사용하여 다양한 측면을 추가할 수 있습니다. 페이지에 이러한 특수 효과 및 대화형 효과가 있습니다. 이 기사에서는 HTML, CSS 및 jQuery를 사용하여 플로팅 효과가 있는 버튼을 만드는 방법을 간략하게 소개하고 구체적인 코드 예제를 제공합니다. 1. HTML 구조 먼저, 우리는

수레를 지울 수 있는 방법이 있나요? 수레를 지울 수 있는 방법이 있나요? Feb 22, 2024 pm 04:00 PM

부동 소수점을 지우는 방법이 있습니까? 웹 페이지 레이아웃에서 부동 소수점은 요소가 문서 흐름에서 벗어나 다른 요소에 상대적으로 배치되도록 하는 일반적인 레이아웃 방법입니다. 그러나 플로팅 레이아웃을 사용할 때 자주 발생하는 문제는 상위 요소가 플로팅 요소를 올바르게 래핑할 수 없어 페이지의 레이아웃이 무질서해지는 것입니다. 따라서 상위 요소가 플로팅된 요소를 올바르게 래핑할 수 있도록 플로트를 지우는 조치를 취해야 합니다. 부동 소수점을 지우는 방법에는 여러 가지가 있습니다. 다음에서는 일반적으로 사용되는 몇 가지 방법을 소개하고 구체적인 코드 예제를 제공합니다.

HTML 레이아웃 팁: 부동 요소 제어에 위치 속성을 사용하는 방법 HTML 레이아웃 팁: 부동 요소 제어에 위치 속성을 사용하는 방법 Oct 21, 2023 am 09:22 AM

HTML 레이아웃 기술: 위치 속성을 사용하여 부동 요소를 제어하는 ​​방법 웹 디자인에서 레이아웃은 매우 중요한 부분입니다. 합리적인 레이아웃을 통해 웹 페이지를 더욱 아름답고 읽기 쉽게 만들 수 있으며 사용자 경험을 향상시킬 수 있습니다. 레이아웃을 구현하는 과정에서 플로팅 요소의 제어는 핵심 포인트 중 하나입니다. HTML은 부동 요소를 제어할 수 있는 위치 속성을 제공합니다. 이 기사에서는 위치 속성을 사용하여 부동 요소를 레이아웃하고 특정 코드를 제공하는 방법을 소개합니다.

CSS 이미지 속성 안내: 개요 및 표시 CSS 이미지 속성 안내: 개요 및 표시 Oct 25, 2023 am 08:57 AM

CSS 이미지 속성 안내: 개요 및 디스플레이CSS는 프런트 엔드 개발의 필수 부분이며 이미지 속성도 필수적입니다. 이 문서에서는 이미지 속성에 대한 두 가지 중요한 개념인 개요와 표시에 중점을 둘 것입니다. 이 문서에서는 해당 정의, 사용법 및 특정 코드 예제를 자세히 설명합니다. 개요 속성 개요: 개요 속성은 레이아웃 공간을 차지하지 않고 요소 주위에 개요를 만드는 데 사용됩니다. 그것은

JavaScript를 사용하여 문자열에 특정 문자가 포함되어 있는지 확인하는 방법은 무엇입니까? JavaScript를 사용하여 문자열에 특정 문자가 포함되어 있는지 확인하는 방법은 무엇입니까? Oct 21, 2023 am 08:23 AM

JavaScript를 사용하여 문자열에 특정 문자가 포함되어 있는지 확인하는 방법은 무엇입니까? JavaScript에서는 여러 가지 방법을 사용하여 문자열에 특정 문자가 포함되어 있는지 확인할 수 있습니다. 아래에서는 일반적으로 사용되는 세 가지 방법을 소개하고 해당 코드 예제를 제공합니다. 방법 1: indexOf() 메서드 사용 문자열의 indexOf() 메서드를 사용하여 문자열에 지정된 문자가 포함되어 있는지 확인할 수 있습니다. 문자열에서 특정 문자가 처음으로 나타나는 인덱스를 반환합니다.

jQuery를 도입하는데 필요한 패키지는 무엇입니까? jQuery를 도입하는데 필요한 패키지는 무엇입니까? Feb 23, 2024 pm 12:00 PM

jQuery는 JavaScript 프로그래밍을 단순화하는 간단하고 강력한 기능을 제공하는 잘 알려진 JavaScript 라이브러리입니다. 웹 프로젝트에 jQuery를 도입할 때 필요한 패키지를 도입하려면 HTML 파일에 다음 코드를 추가해야 합니다. 내 웹 페이지

CSS 플로트 및 클리어 플로트: 플로트 및 클리어 플로트 마스터하기 CSS 플로트 및 클리어 플로트: 플로트 및 클리어 플로트 마스터하기 Nov 18, 2023 am 10:56 AM

CSS 플로팅 및 플로트 지우기: 플로트 플로트 및 지우기 기술을 익히려면 웹 디자인 및 개발에서 CSS 플로트(float)가 일반적인 레이아웃 기술 중 하나입니다. float를 사용하여 요소를 왼쪽이나 오른쪽으로 이동하여 페이지의 요소를 조정하고 정렬할 수 있습니다. 그러나 부동 요소는 부모 요소의 높이가 접히는 등 페이지에 몇 가지 문제를 일으킬 수도 있습니다. 그러므로 수레를 사용하고 제거하는 기술을 익히는 것이 매우 중요합니다. 이 기사에서는 CSS 부동 및 클리어 부동 기술에 중점을 두고 구체적인 내용을 제공합니다.

CSS 레이아웃 속성의 포괄적인 목록: 표시, 위치 및 부동 CSS 레이아웃 속성의 포괄적인 목록: 표시, 위치 및 부동 Oct 20, 2023 pm 05:36 PM

CSS 레이아웃 속성의 전체 목록: 표시, 위치 및 floatCSS는 웹 페이지의 스타일을 제어하는 ​​데 사용되는 마크업 언어입니다. 웹 페이지 레이아웃을 디자인할 때 레이아웃 속성은 매우 중요합니다. CSS는 다양한 레이아웃 속성을 제공하며 가장 일반적으로 사용되는 속성은 표시, 위치 및 부동입니다. 이 기사에서는 이러한 세 가지 레이아웃 속성을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 표시 속성 표시 속성은 요소를 지정하는 데 사용됩니다.

See all articles