Compléments sur le float
Le float par Sparrow-style
Clearing floats de Quirksmode(en)
Description du float sur W3schools(en)
Description du clear sur W3schools(en)
Donc, évidemment, dans les liens utiles vous retrouvez l'étape 6 du cursus crée par Sparrow-style, qui est existentiel de lire avant de lire ce tuto, vu qu'il n'est qu'un complément de cette étape! Si vus voulez comprendre les bases du float, il faudrait le lire. De plus, vous retrouverez l'article "Clearing Floats" de Quirksmode qui m'a aidé à trouver une des autres solutions. Vu que je n'ai pas la science infuse, je cite mes sources! Ensuite, bien sûr, vous avez les deux pages de W3Schools sur les float et les clear respectivement, qui vous donnent tout ce qu'il faut savoir dessus! Notez cependant que les trois derniers liens sont tous en anglais! (Raison pour laquelle je ne donne pas simplement les liens mais fait l'effort d'expliquer tout ça ne français )
Ok, attends, c'est quoi le résultat? On essaie de faire quoi, là, exactement?
Eh bien c'est très simple, on voudrait passer de ceci:
Quae dum ita struuntur, indicatum est apud Tyrum indumentum regale textum occulte, incertum quo locante vel cuius usibus apparatum. ideoque rector provinciae tunc pater.
Ou ceci:
Colonne de gauche
Colonne de gauche
Colonne de gauche.
Colonne de gauche
Colonne de gauche
Colonne de gauche.
Colonne de gauche
Colonne de droite.
Colonne de Droite.
Colonne de Droite
Colonne de Droite.
Colonne de Droite
À cela:
Et cela:
En utilisant plusieurs méthodes différentes, autres que celle montrée dans le tuto de cursus écrit par Sparrow. Ceci n'est donc qu'un complément de ce que vous savez déjà, et vous devriez donc savoir ce qu'est un float!
(Notez que j'ai honteusement volé les codes qui sont dans le cursus de Sparrow-Style et dans le tutoriel de Quirksmode respectivement! Allez voir plus haut!)
1) Utilisation de :after
Si vous n'êtes pas confortable avec l'utilisation des pseudo-éléments, je vous invite à lire mon tutoriel dessus, ou alors à passer tout simplement cette solution-ci!
Commençons donc tout de suite le cours, imaginons que vous ayez un div en float, ou n'importe quel objet en float, et que vous décidiez alors de mettre ceci à la suite:
- Code:
<div style="clear: both;"></div>
Cependant, ne voyons pas cette solution de suite. Cherchons d'abord à retirer de la balise HTML tout style.
Euh attends quoi? Pourquoi je devrais faire ça moi?
Parce que c'est tout simplement mal vu de mettre du style dans une balise. Donc dès que vous voyez ceci:
- Code:
<div style="...">
Ok je vois, mais comment je fais ça? C'est pas un peu inutile de mettre un div avec une classe/un id juste après mes float? Autant mettre le style et tant pis...
Je comprends, et c'est bien vrai. C'est pourquoi le CSS3 nous apporte la solution: le pseudo-element :after !
Voilà ce que cela vous donne dans le html:
- Code:
<div id="mon_nom">Ceci est le contenu qui sera en float.</div>
- Code:
.mon_nom {
float: left;
}
.mon_nom:after {
content: "";
display: block;
clear: both;
}
Si je n'ai plus à expliquer ce qui se passe dans le premier bout de code du CSS, il est important de savoir pourquoi ce qui a été écrit dans le pseudo-élément after pour bine comprendre.
Tout d'abord, pourquoi content: ""; ? C'est vide, et il semblerait que ça ne serve à rien... Cependant, il est obligatoire de le mettre, ou alors le pseudo-élément ne va pas "s'afficher"! En règle général, il faut toujours avoir un content, même vide, dans un pseudo-élément pour que ça ait un quelconque effet!
Ensuite, pourquoi le display: block;? En gros, vous dites à votre navigateur de voir ça "comme un div": c'est à dire un bloc, qui se mettrait "à la suite". Par exemple, tentez de mettre une balise span (de type inline) à la place du div dans le code donné plus haut: vous verrez que le clear ne marche tout simplement pas. Il est donc obligatoire de dire à votre navigateur que le pseudo-élément doit se comporter comme une div.
Et enfin: clear: both;, qui est là justement, pour arrêter le float. En gros, vous dites à votre navigateur qu'aucun float n'est permis, ni à droite, ni à gauche. Cela "brise" donc la chaîne des float et évite que les éléments se mettent à la suite.
Tout d'abord, pourquoi content: ""; ? C'est vide, et il semblerait que ça ne serve à rien... Cependant, il est obligatoire de le mettre, ou alors le pseudo-élément ne va pas "s'afficher"! En règle général, il faut toujours avoir un content, même vide, dans un pseudo-élément pour que ça ait un quelconque effet!
Ensuite, pourquoi le display: block;? En gros, vous dites à votre navigateur de voir ça "comme un div": c'est à dire un bloc, qui se mettrait "à la suite". Par exemple, tentez de mettre une balise span (de type inline) à la place du div dans le code donné plus haut: vous verrez que le clear ne marche tout simplement pas. Il est donc obligatoire de dire à votre navigateur que le pseudo-élément doit se comporter comme une div.
Et enfin: clear: both;, qui est là justement, pour arrêter le float. En gros, vous dites à votre navigateur qu'aucun float n'est permis, ni à droite, ni à gauche. Cela "brise" donc la chaîne des float et évite que les éléments se mettent à la suite.
Voilà donc pour la toute première solution alternative! Cependant, ça n'aide en rien avec notre problème de template... zut! Du coup, que faire?
2) Utilisation du overflow
C'est en réalité tout simple: il suffit de mettre un overflow: scroll dans l'objet (div, table, etc) qui contient tous les objets en float. C'est donc la solution à adopter pour notre problème: il suffit d'entourer les sous-forum avec un div ayant une class, comme c'est en général le cas lorsqu'on met des barres en haut et en bas d'une catégorie, et de lui donner ceci. Voici donc le CSS à mettre:
- Code:
.entourage_float {
width: 800px;
overflow: scroll;
}
Notez que le width mit dans ce bout de code est arbitraire: j'ai prit une largeur générale de forum. Cependant, la valeur peut être n'importe quoi...
Le width est important (surtout pour pas que ça ne dépasse pas en largeur comme pour des sous-.forums), mais surtout, ne PAS mettre de hauteur (ou alors, à la limite, mettre height: auto)! Pourquoi? Tout simplement parce que le overflow va mettre des barres automatiquement si la hauteur ou largeur dépasse. De ce fait, il est donc évident qu'il faut faire attention aux margin/largeurs des sous-forums/blocs float dans ce contour, cependant la hauteur s'ajustera de façon automatique.
Le width est important (surtout pour pas que ça ne dépasse pas en largeur comme pour des sous-.forums), mais surtout, ne PAS mettre de hauteur (ou alors, à la limite, mettre height: auto)! Pourquoi? Tout simplement parce que le overflow va mettre des barres automatiquement si la hauteur ou largeur dépasse. De ce fait, il est donc évident qu'il faut faire attention aux margin/largeurs des sous-forums/blocs float dans ce contour, cependant la hauteur s'ajustera de façon automatique.
Cependant, pour certains navigateurs, les barres se mettent automatiquement. C'est donc un problème, parce que bon, souvent, c'est moche! Du coup, il suffit de changer la valeur du overflow et de le mettre en hidden:
- Code:
.entourage_float {
width: 800px;
overflow: hidden;
}
Nous avons donc remplacé le scroll par un hidden, ce qui fait que plus aucune barre ne s'affiche. Cependant, il est d'autant plus important de faire attention à la largeur de tous vos éléments: ceux-ci risquent de disparaître à cause du hidden et donc de ne plus d'afficher! Cependant, cela permet de faire que le fond englobe bien tous les éléments en float
Des questions...
Voilà! Ce sont donc les petites astuces qui vous permettent de bien comprendre le float. Je vais cependant rapidement répondre à quelques questions:
Pourquoi ne jamais utiliser des tableaux plutôt que des float?
Oui, vous avez bien lu: ne jamais utiliser des tableaux. La raison? Premièrement, comme indiqué plus tôt, le HTML ne devrait jamais être utilisée pour la mise en forme, les tableaux y compris. Le float est bien souvent utilisé pour de la mise en forme. De plus, et cette raison est très importante même si beaucoup de personnes ne seraient pas d'accord avec moi y compris FA vu que tout chez eux est en tableau (bien que là c'est un minimum justifié), c'est que les tableaux ne devraient être utilisés que pour contenir des données. Par exemple, un tableau de personnes avec leur nom, prénom, âge, date de naissance, etc. là un tableau est justifié! Cependant, pour mettre en forme un texte avec une image à côté, la justification n'existe pas.
C'est pour cela que je dis que l’utilisation qu'en fait FA est quelque peu justifiée: en effet, les catégories sont un tableau à proprement parler, vu que chaque colonne correspond à un type d'informations: l'état du sous-forum (nouveau messages, pas de nouveaux messages, etc), sa description, son nombre de sujets, son nombre de messages et enfin, le Dernier message. C'est donc un tableau correct. Cependant, dès que vous changez assez la mise en page, ça ne devrait plus être le tableau, car la structure n'y est plus.
De plus, les logiciels pour malvoyants reconnaissent les codes des tableaux, et donc partiront du principe que ce sont des informations classifiées dans un ordre logique (donc première colonne = une chose, deuxième colonne = un autre chose, etc), et pourtant, la plupart des gens n'utilisent pas les tableaux pour contenir des données, mais pour la mise en forme... c'est donc une très mauvaise utilisation! Donc évitez les tableaux lorsque vous pouvez utiliser des float!
C'est pour cela que je dis que l’utilisation qu'en fait FA est quelque peu justifiée: en effet, les catégories sont un tableau à proprement parler, vu que chaque colonne correspond à un type d'informations: l'état du sous-forum (nouveau messages, pas de nouveaux messages, etc), sa description, son nombre de sujets, son nombre de messages et enfin, le Dernier message. C'est donc un tableau correct. Cependant, dès que vous changez assez la mise en page, ça ne devrait plus être le tableau, car la structure n'y est plus.
De plus, les logiciels pour malvoyants reconnaissent les codes des tableaux, et donc partiront du principe que ce sont des informations classifiées dans un ordre logique (donc première colonne = une chose, deuxième colonne = un autre chose, etc), et pourtant, la plupart des gens n'utilisent pas les tableaux pour contenir des données, mais pour la mise en forme... c'est donc une très mauvaise utilisation! Donc évitez les tableaux lorsque vous pouvez utiliser des float!
Pourquoi ne pas utiliser des display: inline-block plutôt que des float?
Là, c'est surtout un problème de compatibilité entre navigateurs! Si certains navigateurs afficheront alors tout bien en ligne et colonne, bien aligné, d'autres mettront tout dans tous les sens, avec des écarts inexpliqués. D'autant plus lorsque votre bloc a du texte (à cause du principe de baseline. Plus d'infos en anglais ici). Donc, si vous voulez que tout soit compatible sur votre forum ou sujet: pas de inline-block!
Bien sûr, si vous voulez vraiment utiliser inline-block (ce n'est pas plus faux que float ), il y a des façons de régler ce problème, mais ce n'est pas le sujet! Ceci reste une question de goût et chaque personne aura sa propre façon de voir les choses, et préférera donc utiliser inline-block plutôt que float, contrairement à moi.
Pourquoi ne pas utiliser des positionnement absolus plutôt que des float?
Cela serait effectivement possible, mais bien souvent plus fastidieux. En effet, cela dépend parfois de la largeur d'un écran, et parfois cela prend plus de temps de tester à chaque fois la position, plutôt que de mettre un simple float! En effet, les problèmes de float se règlent très facilement, et souvent tous de manière similaire, alors que les positionnement absolus doivent être fait souvent en éditant plusieurs fois le code.
C'est donc une alternative viables, mais parfois plus "compliquée" que de simples float! Notez également que les float et les positionnement absolus n'ont pas tout à fait le même but, puisqu0une image en float a le texte qui se "wrap" autour, alors que le positionnement absolu ne peut que mettre deux blocs côte-à-côte: une image avec positionnement absolu à coté d'un seul bloc de texte à positionnement absolu ne sera qu'en bloc, et ne se verra pas "entourée" par le texte.
Notez cependant que le positionnement absolu et le float n'ont pas forcément la même raison d'être. Il serait plus fastidieux de créer une PA en float qu'avec des position, par exemple, et pourtant, le float est très facile à utiliser pour mettre des objets côte-à-côte contrairement au positionnement absolu! Vérifiez donc quelles sont les circonstances et ce qui serait le plus "pratique" à utiliser, avant de vous mettre utiliser l'un ou l'autre!
Conclusion: En somme, il existe bel et bien trois solutions pour clearer vos float: soit avec une div qui suit votre élément contentant un clear, soit avec un pseudo-élément after ayant également un clear, ou alors, avec le div contenant les éléments en float ayant un overflow, soit en scroll, soit en hidden¨!
Je crois que j'ai dit tout ce que j'avais à dire! Du coup, si vous avez des questions, ou que des éléments n'étaient pas clair dans mes explications, n'hésitez pas à poster à la suite! Je me ferais une joie de vous répondre, mais aussi d'éditer le sujet pour apporter des explications supplémentaires! (N'hésitez pas non plus à pointer du doigt des éventuelles fautes! )
Dernière édition par NyoTheNeko le Ven 9 Mai 2014 - 16:08, édité 1 fois