Que fait la classe clearfix dans css? [dupliquer]

cette question a déjà une réponse ici:

j'ai vu div les étiquettes utilisent une classe clearfix quand c'est un enfant divs utilisez la propriété float . La classe clearfix ressemble à ceci:

.clearfix:after {
    clear: both;
    content: ".";
    display: block;
    height: 0;
    visibility: hidden;
}
.clearfix {
    display: inline-block;
}
.clearfix {
    display: block;
}

j'ai constaté que si je n'utilise pas clearfix lorsque j'utilise la propriété bottom-border , la bordure apparaîtrait au-dessus de l'enfant divs . Quelqu'un peut m'expliquer ce que le clearfix classe? De plus, Pourquoi y a-t-il deux propriétés display ? Cela semble très étrange pour moi. Je suis particulièrement curieux de savoir ce que signifie content:'.' .

Merci, G

85
demandé sur Thaddeus Albers 2012-03-03 08:46:30

3 réponses

Comment fonctionnent les flotteurs

quand des éléments flottants existent sur la page, des éléments non-flottants envelopper autour les éléments flottants, similaire à la façon dont le texte va autour d'une image dans un journal. Du point de vue d'un document (le but original de HTML), c'est ainsi que les flotteurs fonctionnent.

float vs display:inline

avant l'invention de display:inline-block , les sites Web utilisent float pour mettre les éléments les uns à côté des autres. float est préférable à display:inline car avec ce dernier, vous ne pouvez pas définir les dimensions de l'élément (largeur et hauteur) aussi bien que les capitonnages verticaux (haut et bas) - ce que les éléments flottants peuvent faire puisqu'ils sont traités comme des éléments de bloc.

Float problèmes

le problème principal est que nous employons float contre son but prévu.

un autre est que alors que float permet des éléments côte à côte de niveau bloc, flotteurs ne donnent pas la forme à son conteneur . C'est comme position:absolute , où l'élément est "sorti de la mise en page". Par exemple , lorsqu'un conteneur vide contient 100px x 100px <div> , le <div> ne donnera pas 100px en hauteur au conteneur.

contrairement à position:absolute , elle affecte le contenu qui l'entoure. Contenu après l'élément flottant "enrouler" autour de l'élément. Il commence par rendre à côté de lui et puis en dessous de lui, comme comment le texte de journal coulerait autour d'une image.

Clearfix à la rescousse

Ce clearfix n'est à force de contenu après la flotte ou le récipient contenant la flotte pour le rendu ci-dessous. Il y a beaucoup de versions pour clear-fix, mais son nom vient de la version qui est couramment utilisée - celle qui utilise la propriété CSS clear .

exemples

voici plusieurs façons de faire clearfix , selon le navigateur et le cas d'utilisation. Il suffit de savoir comment utiliser la propriété clear dans CSS et comment les flotteurs se présentent dans chaque navigateur pour obtenir une correction parfaite.

ce que vous avez

votre style fourni est une forme de clearfix avec compatibilité ascendante. j'ai trouvé un article à propos de ce clearfix. Il s'avère, c'est un vieux clearfix - toujours la restauration des vieux navigateurs. Il y a une nouvelle version plus propre de celui-ci dans l'article aussi. Voici la répartition:

  • le premier clearfix que vous avez ajoute un pseudo-élément invisible, qui est appelé clear:both , entre l'élément cible et l'élément suivant. Cela force le pseudo-élément à se transformer en dessous de la cible, et le suivant élément sous le pseudo-élément.

  • le second ajoute le style display:inline-block qui n'est pas supporté par les navigateurs antérieurs. inline-block est comme inline mais vous donne certaines propriétés qui bloquent les éléments, comme la largeur, la hauteur ainsi que le rembourrage vertical. Ceci a été ciblé pour IE-MAC.

  • il s'agit de la nouvelle application de display:block en raison de la règle IE-MAC ci-dessus. Cette règle était "cachée" IE-MAC.

en somme, ces 3 règles gardent le .clearfix cross-browser de travail, avec de vieux navigateurs à l'esprit.

122
répondu Joseph 2014-08-05 13:47:09

Lorsqu'un élément, tel qu'un div est floated , son conteneur parent ne tient plus compte de sa hauteur, c'est-à-dire

<div id="main">
  <div id="child" style="float:left;height:40px;"> Hi</div>
</div>

le conteneur parent ne mesure pas 40 pixels par défaut. Cela provoque beaucoup de petits bizarreries bizarres si vous utilisez ces conteneurs pour structurer la disposition.

ainsi la classe clearfix que divers cadres utilisent résout ce problème en faisant le conteneur parent "reconnaître" le contenu élément.

au jour le jour, j'utilise normalement des cadres tels que 960gs, Bootstrap Twitter pour poser et ne pas déranger avec la mécanique exacte.

peut lire plus ici

http://www.webtoolkit.info/css-clearfix.html

18
répondu Damon Aw 2015-02-26 07:13:25

clearfix est le même que overflow:hidden . Les deux enfants clairs flottés du parent, mais clearfix ne coupera pas l'élément qui débordent à elle est parent . Il fonctionne également en IE8 et ci-dessus.

il n'est pas nécessaire de définir "." dans content & .clearfix. Il suffit d'écrire comme ceci:

.clr:after {
    clear: both;
    content: "";
    display: block;
}

HTML

<div class="parent clr"></div>

lire ces liens pour plus

http://css-tricks.com/snippets/css/clear-fix / ,

quelles méthodes de ‘clearfix’ puis-je utiliser?

5
répondu sandeep 2018-03-03 14:05:01