Propriétés CSS inline-block compatible multi navigateur

Ryan Doherty vient de nous pondre un hack permettant à la propriétés CSS inline-block d'être compatible sur la plupart des navigateurs actuels (Cross-Browser). Pour rappel cette propriété permet de donner un comportement de type "inline" à des éléments de type "block" .. pour l'exemple, c'est le comportement par défaut des images !

Par rapport a des éléments de type "block" mis en "float", inline-block permet un retour à la ligne systématique même avec des blocks de hauteur différentes (alors qu'en float un retour à la ligne vient buter sur le block de la ligne supérieur le plus haut) !

Des blocks de hauteurs différentes en "inline-block"

inline-block-479

Des blocks de hauteurs différentes en "float"

inline-block-4791

On voit tout de suite les avantages de cette propriété !

Le hack

<style>
li {
        width: 200px;
        min-height: 250px;
        border: 1px solid #000;
        display: -moz-inline-stack;
        display: inline-block;
        vertical-align: top;
        margin: 5px;
        zoom: 1;
        *display: inline;
        _height: 250px;
}
</style>

<ul>
        <li>
                <div>
                        <h4>This is awesome</h4>
                        <img src="http://farm4.static.flickr.com/3623/3279671785_d1f2e665b6_s.jpg" alt="lobster" width="75" height="75"/>
                </div>
        </li>
        <li>
                <!-- etc ... -->
        </li>
</ul>

L'effet est ici appliqué aux éléments d'une liste et peut nécessiter quelques ajustements. Le rendu a été testé avec Firefox 2/3, Safari 3, Opera et IE 6/7

Moi il me tarde surtout d'avoir des navigateurs compatible CSS3 utilisé par 90% des internautes ! *Rêve utopiste*

-----

Articles relatifs

  1. 22/02/2009 à 21:31 | #1

    Bonsoir

    Je n’ai qu’un mot : EX-CE-LLENT !!!

    L’inline-block était jusqu’à présent une propriété qui manquait fichtrement à mes projets du fait de sa non compatibilité cross-browsers.

    Je vais tester au plus vite de hack :-)

  2. k-ny
    22/02/2009 à 22:11 | #2

    @Cédric Attention qu’il y a quelques contraintes tout de même ;)

  3. 23/02/2009 à 22:39 | #3

    en tous les cas, l’utilité d’un tel hack répond aux besoins d’un grand nombre de bloggueurs en tout genre

  4. k-ny
    24/02/2009 à 10:40 | #4

    @bernard C’est clair ;)

  5. 04/03/2009 à 10:16 | #5

    Super, je cherchais justement un truc dans le style….
    A mort IE !!

  6. 23/04/2009 à 12:11 | #6

    Bonjour et merci pour cet article ! Pédagogique et concis :)

  7. 02/06/2009 à 02:21 | #7

    Nouveau venu dans le monde de WP (et franchement conquis) , je tombe sur ce site regorgeant d’infos , et cerise sur le gateau , l’auteur semble apprecier l’inline-block « cross browser » … j’aime :) .

    Cette technique , permettant des centrages horizontaux entre elements de tout types est applicable dans IE depuis qu’il est sensible au haslayout … autant dire qu’elle n’est pas nouvelle , souvent incomprise et délicate a mettre en oeuvre et a reproduire dans les autres navigateur de façon plus « standard » .

    La regle -moz-inline-stack pour firefoxe 2 et inferieur , soufre d’un défaut … enfin pas vraiment , car elle stacks(empile) bien les elements les uns sur les autres , un élément enfant tampon supplémentaire déclaré en display block , servira de parent aux contenus en éliminant ce défaut .

    Adieux les tableaux de mise en page ? … non , mais le display : table; pourra enfin etre utilisé a bon escient (quasi jamais en fait) .

    Le display: inline-block; peut enfin intervenir dans les techniques de mise en forme , La disparition de IE7 , 6 et FF2 en fera une valeur sure d’ici peu :) , du moins les alternatives , pour beaucoup complexes (ou assimilé a des bidouilles incompréhensibles) , a mettre en oeuvre n’auront plus lieu d’être , le reflexe « tableau » va pouvoir s’estomper peu a peu :) au profit d’un inline-block insouciant du type d’élèment a styler .

    Enfin , bref , cet article me plait bien même si je trouve toujours que l’info est incomplete ( http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/#comment-189336 )

    j’ai une énième fois tenté d’en expliquer le fonctionnement ici : (voir site mis en lien sous

    Peut-être que ceci peut avoir encore un peu d’intérêt , de vielles version d’IE perdurent encore :)

    Merci pour ce site , petite pépite à « bookmarker » ou mine d’or a explorer … pour un nouveau venu dans wp_ .

    GC

  8. Naoki
    11/10/2009 à 22:51 | #8

    Pour info, il y a un vertical-align:top qui a disparu ici par rapport à l’article original. Peut-être car il a été mis à jour depuis, mais sans celle-ci, perso j’avais des problèmes sous FF.

  9. Julien
    12/10/2009 à 07:56 | #9

    @Naoki
    Bien vu ! Effectivement l’article original à été mis à jour, certainement en même temps qu’une nouvelle version de Firefox. Bref c’est corrigé, merci pour ta vigilance ;)

  10. 22/05/2010 à 13:16 | #10

    Merci pour c’est trés astucieux !

  1. 24/02/2009 à 14:18 | #1
  2. 16/06/2009 à 15:24 | #2
  3. 07/09/2009 à 13:11 | #3
  4. 30/11/2009 à 11:24 | #4
  5. 19/04/2010 à 13:15 | #5