深入解析clearfix清除浮动
深入解析clearfix清除浮动
我想大家在写CSS的时候应该都对清除浮动的用法深有体会,今天我们就还讨论下clearfix的进化史吧。
.clear{clear:both;line-height:0;}
clearfix清除浮动
首先在很多很多年以前我们常用的清除浮动是这样的。
现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。
这种做法如果在页面复杂的布局要经常清除浮动的时候就会产生很多的空标签,增加了页面无用标签,不利于页面优化。但是我发现大型网站中 居然还在使用这种清除浮动的方法。有兴趣的同学可以上他们首页搜索一下他们的.blank0这个样式名称。
因此有很多大神就研究出了 clearfix 清除浮动的方法,直接解决了上面的缺陷,不需要增加空标签,直接在有浮动的外层加上这个样式就可以了,这也是我们今天要讨论的clearfix进化史。
起源
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } .clearfix { display: inline-table; } * html .clearfix { height: 1%; }//Hides from IE-mac .clearfix { display: block; }//End hide from IE-mac
解释一下以上的代码:
对大多数符合标准的浏览器应用第一个声明块,目的是创建一个隐形的内容为空的块来为目标元素清除浮动。
第二条为clearfix应用 inline-table 显示属性,仅仅针对IE/Mac。利用 * 对 IE/Mac 隐藏一些规则:
height:1% 用来触发 IE6 下的haslayout。
重新对 IE/Mac 外的IE应用 block 显示属性。
最后一行用于结束针对 IE/Mac 的hack。(是不是觉得很坑爹,Mac下还有IE)
起源代码可能也是很早期的时候了,再往后Mac下的IE5也发展到IE6了,各种浏览器开始向W3C这条标准慢慢靠齐了。所以就有了下面这个写法出现了。
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } * html .clearfix { zoom: 1; } /* IE6 */
IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。
在一个有float 属性元素的外层增加一个拥有clearfix属性的p包裹,可以保证外部p的height,即清除"浮动元素脱离了文档流,包围图片和文本的 p 不占据空间"的问题。
Jeff Starr 在这里针对IE6/7用了两条语句来触发haslayout。我在想作者为什么不直接用 * 来直接对 IE6/7 同时应用 zoom:1 或者直接就写成:
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } .clearfix{*zoom:1;}
但是对于很多同学这种优化程度代码还是不够给力,clearfix 发展到现在的两个终极版。
重构clearfix浮动
构成Block Formatting Context的方法有下面几种:
float的值不为none。
overflow的值不为visible。
display的值为table-cell, table-caption, inline-block中的任何一个。
position的值不为relative和static。
很明显,float和position不合适我们的需求。那只能从overflow或者display中选取一个。
因为是应用了.clearfix和.menu的菜单极有可能是多级的,所以overflow: hidden或overflow: auto也不满足需求(会把下拉的菜单隐藏掉或者出滚动条),那么只能从display下手。
我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个,但是display: inline-block会产生多余空白,所以也排除掉。
剩下的只有table-cell, table-caption,为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting Context。
因为display: table会产生一些匿名盒子,这些匿名盒子的其中一个(display值为table-cell)会形成Block Formatting Context。
这样我们新的.clearfix就会闭合内部元素的浮动。
后面又有人对此进行了改良:
终极版一:
.clearfix:after { content:"\200B"; display:block; height:0; clear:both; } .clearfix {*zoom:1;}/*IE/7/6*/
解释下:content:"\200B";这个参数,Unicode字符里有一个“零宽度空格”,即 U+200B,代替原来的“.”,可以缩减代码量。而且不再使用visibility:hidden。
终极版二:
.clearfix:before,.clearfix:after{ content:""; display:table; } .clearfix:after{clear:both;} .clearfix{ *zoom:1;/*IE/7/6*/ }
这两个终极版代码都很简洁,终极版一和二都可以使用,以上代码都经过测试,大家赶紧用一下吧,如果有什么问题请及时跟我反馈,如果你还停留在clearfix的老代码的时候就赶紧更新一下代码吧。
以上就是clearfix清除浮动进化史的内容,更多相关内容请关注PHP中文网(www.php.cn)!
相关文章:

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Les méthodes d'utilisation de HTML pour aligner les zones de saisie incluent : l'utilisation de l'attribut text-align pour spécifier la gauche, la droite ou le centre pour aligner le texte de la zone de saisie. Utilisez la propriété float pour faire flotter la zone de saisie vers la gauche ou la droite de la page afin d'affecter son alignement relatif.

Les cinq façons d'effacer les flottants sont : 1. Utiliser l'attribut clear ; 2. Utiliser l'attribut overflow ; 3. Utiliser le pseudo-élément clearfix 4. Utiliser la disposition en grille ; Introduction détaillée : 1. Utilisez l'attribut clear, qui est la méthode la plus couramment utilisée pour effacer les flottants. Vous pouvez ajouter un élément après l'élément flottant et y ajouter le style "clear: Both;" définir l'élément parent Set "overflow: auto;" et ainsi de suite.

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.

La mise en page fait référence à une méthode de composition adoptée dans la conception Web pour organiser et afficher les éléments d'une page Web selon certaines règles et structures. Grâce à une mise en page raisonnable, la page Web peut être rendue plus belle et plus soignée, et offrir une bonne expérience utilisateur. Dans le développement front-end, il existe de nombreuses méthodes de mise en page parmi lesquelles choisir, telles que la mise en page traditionnelle des tableaux, la mise en page flottante, la mise en page de positionnement, etc. Cependant, avec la promotion de HTML5 et CSS3, les technologies de mise en page réactives modernes, telles que la mise en page Flexbox et la mise en page Grid, sont devenues

Pour analyser pourquoi le flottement ne peut pas être effacé à l'aide de l'attribut overflow, des exemples de code spécifiques sont nécessaires Introduction : Dans la mise en page Web, des problèmes avec les éléments flottants sont souvent rencontrés. Afin de résoudre l'impact des éléments flottants, nous utilisons généralement une méthode de dégagement des flotteurs. Cependant, nous constatons parfois que les flottants ne peuvent pas être correctement effacés à l'aide de l'attribut overflow. Cet article approfondira ce problème et fournira des exemples de code spécifiques. 1. Pourquoi devons-nous nettoyer les flotteurs ? Les éléments flottants signifient retirer l'élément du flux de documents en définissant l'attribut float.

La propriété float en CSS permet aux éléments de sortir du flux de documents et de s'aligner le long du bord de leur élément parent, et est utilisée pour créer et aligner des images de texte, des barres latérales de menu flottantes et des éléments qui se chevauchent. Les valeurs d'attribut des éléments flottants incluent left (float gauche), right (float droit), aucun (float clair) et hériter (hériter). Pour éviter qu'un élément flottant ne provoque le débordement de l'élément parent, vous pouvez utiliser la technique clearfix pour ajouter un élément vide et effacer le flottant.

Les moyens d'effacer les flotteurs en CSS incluent l'attribut clear, l'attribut de débordement, la classe clearfix, la classe clearfix de l'élément parent, le pseudo-élément pour effacer le flotteur, l'attribut de débordement de l'élément parent et la combinaison de l'attribut clear et de BFC. Introduction détaillée : 1. Utilisez l'attribut clear, une méthode simple et couramment utilisée pour effacer les flottants. En ajoutant un élément vide au niveau du bloc après l'élément flottant et en définissant l'attribut clear pour celui-ci, vous pouvez effacer l'effet flottant précédent et le créer. Les éléments ci-dessous sont disposés normalement et ainsi de suite.

La raison pour laquelle le flotteur de compensation de débordement n'est pas valide peut être que la hauteur de l'élément flottant n'est pas définie, que l'élément flottant est effacé, que l'élément de compensation est avant l'élément flottant, que la hauteur de l'élément transparent n'est pas définie ou que l'élément transparent est effacé. est après l'élément flottant, etc. Introduction détaillée : 1. La hauteur de l'élément flottant n'est pas définie. Lorsque la hauteur de l'élément flottant n'est pas définie, elle peut ne pas être effacée. La hauteur de l'élément flottant est déterminée par son contenu, donc si le contenu n'en a pas. height, l'élément flottant n'a pas non plus de hauteur ;2. Flottant L'élément est effacé, lorsque l'élément flottant est effacé, la propriété de débordement peut ne pas s'effacer, etc.
