====== Css Hacks ====== Les hacks css sont un ensemble de techniques qui permettent de contourner les problèmes d'affichages récurrents. Ils sont assez bien connus, et souvent bien documentés sur les blogs. ===== Clearfix ===== La technique du clearfix permet de corriger un comportement qui peut paraître étrange dans les navigateurs du type webkit (Chrome, Safari...) et Gecko (Firefox, Flock, Camino...). ==== Symptôme ==== Le background d'un élément ne s'affiche pas, ou la border n'encadre pas ce qu'on voudrait. Par exemple : le résultat de gauche souhaité n'est pas obtenu (à droite, c'est le bug). {{:ressources:html:clearfix_bg_result.png?200|}}{{:ressources:html:cearfix_bg_bug.png?200|}} ==== Contexte ==== Dans un élément #container, on met plusieurs éléments en float left. Ce #container nous est utile pour mettre un background ou un border, et celui-ci ne s'affiche pas
block #1
block #2
block #3
body{ font: italic normal normal 1.2em Times, "Times New Roman", serif; color:#000; } #container{ width:920px; border:1px dashed #ccc; } .block{ float:left; width:200px; margin:10px; padding:5px; background-color:#eee; } Ce qu'on s'attend à voir, c'est un #content qui encadre ses 3 blocks en float left. {{:ressources:html:clearfix_result.png|}} Ce qu'on a à la place, c'est ceci : {{:ressources:html:clearfix_bug.png|}} ==== Solution ==== Quand on a un élément (souvent une div) qui ne contient que des éléments en float (left de préférence), elle a 0 pixels de hauteur. Il faut forcer un clear:both pour que le #container s'étende jusqu'en dessous des éléments float. La solution la plus simple, c'est d'ajouter une div vide qui a pour class .clearfix au même niveau que les éléments en float.
block #1
block #2
block #4
Et dans le CSS, on spécifie pour la classe .clearfix l'attribut clear:both. .clearfix{ clear:both; } Voir par exemple la modification à effectuer dans le blog "Celebrating life" {{:ressources:html:celebrating_clearfix.zip|}} ===== Dancing floats ===== #FIXME finish da hax Parfois, les éléments float ne se casent pas vérifier * les width * les margin * les padding (voir [[#Padding space]]) ===== Padding space ===== #FIXME finish da hax Firefox risque d'augmenter la largeur des éléments lorsqu'on spécifie un padding. ===== Margin space ===== #FIXME finish da hax Deux éléments ont un espace vertical entre eux alors qu'on a bien spécifié les margin et les paddings à 0 Ca vient de la margin d'un élément intérieur qui se propage (souvent un h1 ou un p)