Maison interface Web tutoriel HTML Containing Floats 包含浮动_html/css_WEB-ITnose

Containing Floats 包含浮动_html/css_WEB-ITnose

Jun 24, 2016 pm 12:00 PM
Inclure 浮动

原文: 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;}
Copier après la connexion

以上是所有的样式。在图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>
Copier après la connexion
将流动的文本环绕在图片周围这种实践可追溯到很久以前。这就是从Netscape1.1开始将这种能力添加到Web的原因,也是CSS使用属性float使其成为可能的原因。但是再仔细看看图2。浮动图片伸出了包含它的元素。我们通过给段落添加边框可以看得更清楚,如图3所示。
Copier après la connexion
图3.在段落上添加边框
Copier après la connexion

所以现在我们知道了浮动元素伸出包含它们的元素为什么是重要的了。如果不伸出,图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>
Copier après la connexion
现在我们将以下规则应用到前面的标记上,得到图5的效果。
Copier après la connexion
Copier après la connexion
Copier après la connexion
div.item hr {display: block; clear: left; margin: -0.66em 0;  visibility: hidden;}
Copier après la connexion

图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>
Copier après la connexion

设置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;}
Copier après la connexion
注意我们浮动了图片和“item”div。通过设置div的宽度超高50%,我们确保div不会出现在同一行,而是垂直地堆积在一起。效果如图6。图6 使用浮动实现拉伸以包含住浮动元素。
Copier après la connexion
就标记和风格而言,很明显这样管理起来更简单了。然而,到现在为止讨论过的hack仍然是有用的。假设你想在商品的下面放些建议文本。为了让文本不流到商品的右边,我们需要插入清除hack。这会引导我们创建如下标记,如图7所示。
Copier après la connexion
Copier après la connexion
Copier après la connexion
<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>
Copier après la connexion

图7 浮动加hack实现想要的布局
Copier après la connexion

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

HTML, CSS et jQuery : Créez un bouton avec un effet flottant HTML, CSS et jQuery : Créez un bouton avec un effet flottant Oct 24, 2023 pm 12:09 PM

HTML, CSS et jQuery : Créer un bouton avec un effet flottant nécessite des exemples de code spécifiques Introduction : De nos jours, la conception Web est devenue une forme d'art En utilisant des technologies telles que HTML, CSS et JavaScript, nous sommes en mesure d'ajouter divers aspects à la page. . De tels effets spéciaux et effets interactifs. Cet article présentera brièvement comment utiliser HTML, CSS et jQuery pour créer un bouton avec un effet flottant et fournira des exemples de code spécifiques. 1. Structure HTML Tout d'abord, nous devons

Existe-t-il un moyen d'effacer les flotteurs ? Existe-t-il un moyen d'effacer les flotteurs ? Feb 22, 2024 pm 04:00 PM

Existe-t-il une méthode pour effacer les flottants ? Des exemples de code spécifiques sont requis. Dans la mise en page Web, les flottants sont une méthode de mise en page courante qui permet aux éléments de se détacher du flux de documents et d'être positionnés par rapport aux autres éléments. Cependant, un problème souvent rencontré lors de l'utilisation d'une mise en page flottante est que l'élément parent ne peut pas envelopper correctement l'élément flottant, ce qui entraîne une mise en page désordonnée de la page. Par conséquent, nous devons prendre des mesures pour effacer le flotteur afin que l'élément parent puisse envelopper correctement l'élément flottant. Il existe de nombreuses façons d'effacer les flottants. Ce qui suit présente plusieurs méthodes couramment utilisées et donne des exemples de code spécifiques.

Conseils de mise en page HTML : Comment utiliser l'attribut position pour le contrôle des éléments flottants Conseils de mise en page HTML : Comment utiliser l'attribut position pour le contrôle des éléments flottants Oct 21, 2023 am 09:22 AM

Compétences en mise en page HTML : Comment utiliser l'attribut position pour contrôler les éléments flottants Dans la conception Web, la mise en page est un élément très important. Grâce à une mise en page raisonnable, les pages Web peuvent être rendues plus belles et plus faciles à lire, et l'expérience utilisateur peut être améliorée. Dans le processus de mise en œuvre de la mise en page, le contrôle des éléments flottants est l'un des points clés. HTML fournit l'attribut position, grâce auquel nous pouvons contrôler les éléments flottants. Cet article explique comment utiliser l'attribut position pour disposer des éléments flottants et fournit du code spécifique.

Guide des propriétés des images CSS : contour et affichage Guide des propriétés des images CSS : contour et affichage Oct 25, 2023 am 08:57 AM

Guide des propriétés des images CSS : outline et displayCSS font partie intégrante du développement front-end, et les propriétés des images sont également essentielles. Dans cet article, nous nous concentrerons sur deux concepts importants concernant les propriétés de l'image : le contour et l'affichage. Cet article détaillera leur définition, leur utilisation et des exemples de code spécifiques. Présentation de l'attribut outline : L'attribut outline est utilisé pour créer un contour autour d'un élément sans occuper d'espace de mise en page. c'est

Comment savoir si une chaîne contient des caractères spécifiques en utilisant JavaScript ? Comment savoir si une chaîne contient des caractères spécifiques en utilisant JavaScript ? Oct 21, 2023 am 08:23 AM

Comment savoir si une chaîne contient des caractères spécifiques en utilisant JavaScript ? En JavaScript, nous pouvons utiliser plusieurs méthodes pour déterminer si une chaîne contient des caractères spécifiques. Trois méthodes couramment utilisées seront présentées ci-dessous et des exemples de code correspondants seront donnés. Méthode 1 : utiliser la méthode indexOf() Vous pouvez utiliser la méthode indexOf() de la chaîne pour déterminer si une chaîne contient les caractères spécifiés. Il renvoie l'index de la première occurrence d'un caractère spécifique dans une chaîne, tel que

Quels sont les packages nécessaires pour que jQuery soit introduit ? Quels sont les packages nécessaires pour que jQuery soit introduit ? Feb 23, 2024 pm 12:00 PM

jQuery est une bibliothèque JavaScript bien connue qui fournit des fonctions simples et puissantes pour simplifier la programmation JavaScript. Lors de l'introduction de jQuery dans votre projet Web, vous devez ajouter le code suivant au fichier HTML pour introduire les packages nécessaires : Ma page Web

Flotteurs CSS et flotteurs transparents : maîtriser les flotteurs et les flotteurs transparents Flotteurs CSS et flotteurs transparents : maîtriser les flotteurs et les flotteurs transparents Nov 18, 2023 am 10:56 AM

Flotteurs CSS flottants et de compensation : Maîtriser les compétences des flotteurs flottants et de compensation nécessite des exemples de code spécifiques dans la conception et le développement Web, les flotteurs CSS (float) sont l'une des techniques de mise en page courantes. Vous pouvez utiliser float pour déplacer des éléments vers la gauche ou la droite afin d'ajuster la position et la disposition des éléments sur la page. Cependant, les éléments flottants peuvent également causer certains problèmes sur la page, comme la hauteur de l'élément parent qui s'effondre, etc. Par conséquent, il est très important de maîtriser les compétences nécessaires pour utiliser les flotteurs et les nettoyer. Cet article se concentrera sur les techniques de flottement et de compensation CSS et fournira des informations spécifiques.

Liste complète des propriétés de mise en page CSS : affichage, position et float Liste complète des propriétés de mise en page CSS : affichage, position et float Oct 20, 2023 pm 05:36 PM

Liste complète des propriétés de mise en page CSS : affichage, position et float CSS est un langage de balisage utilisé pour contrôler le style des pages Web. Les propriétés de mise en page sont très importantes lors de la conception de la mise en page d'une page Web. CSS fournit une variété de propriétés de mise en page, dont les plus couramment utilisées sont l'affichage, la position et le flotteur. Dans cet article, nous présenterons en détail ces trois propriétés de mise en page et fournirons des exemples de code spécifiques. Attribut d'affichage L'attribut d'affichage est utilisé pour spécifier l'élément

See all articles