{"id":888,"date":"2011-03-17T22:35:14","date_gmt":"2011-03-17T21:35:14","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=888"},"modified":"2017-03-22T13:40:43","modified_gmt":"2017-03-22T12:40:43","slug":"display-inline-block-une-valeur-trop-peu-utilisee","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/display-inline-block-une-valeur-trop-peu-utilisee","title":{"rendered":"Display inline-block, une valeur trop peu utilis\u00e9e"},"content":{"rendered":"<p><code>Float<\/code>era, <code>float<\/code>era pas&#8230; mais pourquoi ne pas utiliser la valeur <code>inline-block<\/code> de la propri\u00e9t\u00e9 <code>display<\/code> ?<br \/>\nVous connaissez certainement les valeurs <code>block<\/code> ou <code>inline<\/code>, mais moins celle de <code>inline-block<\/code> et pourtant elle peut vous servir dans bien des cas.<!--more--><br \/>\nVoyons dans quelles conditions nous pouvons l&rsquo;utiliser (de mani\u00e8re non exhaustive) dans un premier temps, puis dans un second temps quelques difficult\u00e9s dans son utilisation.<\/p>\n<p class=\"center\"><a class=\"demonstration\" title=\"Visualiser en ligne l'utilisation du inline-block\" href=\"\/blog\/doc\/display-inline-block.html\">Exemples de l&rsquo;article<\/a><\/p>\n<h2>Utiliser <code>display: inline-block<\/code><\/h2>\n<p>Il s&rsquo;agit de la valeur par d\u00e9faut des \u00e9l\u00e9ments <code>input<\/code>.<br \/>\nC&rsquo;est pour cela que l&rsquo;utilisation de cet \u00e9l\u00e9ment est aussi simple : il reste \u00e0 c\u00f4t\u00e9 de votre label, vous pouvez en changer sa largeur, sa hauteur, ses marges, etc..<\/p>\n<h3 id=\"ex-form\">Le formulaire<\/h3>\n<p>Quelle transition !<br \/>\n\u00ab\u00a0Bon allez, c&rsquo;est juste pour le formulaire, je vais utiliser un tableau de mise en page pour ne pas m&#8217;emb\u00eater\u00a0\u00bb.<br \/>\nJe le lis et le vois encore souvent dans les codes sources. (et je l&rsquo;eus fait&#8230;)<br \/>\nSi ce n&rsquo;est pas du tableau ce sera un jeu de <code>float<\/code> et de <code>clear<\/code>.<br \/>\nJe vous propose cette <a title=\"Visualiser en ligne l'utilisation du inline-block dans le cas d'un formulaire\" href=\"\/blog\/doc\/display-inline-block.html#formulaire\">forme de mise en page pour formulaire<\/a>.<\/p>\n<p>Dans cette mise en page les <code>label<\/code> passent d&rsquo;un <code>display<\/code> \u00e0 valeur <code>inline<\/code> \u00e0 un <code>display: inline-block;<\/code><br \/>\nUn \u00e9l\u00e9ment en <code>inline-block<\/code> peut recevoir une valeur de <code>vertical-align<\/code> qui, par d\u00e9faut, ne semble pas \u00eatre la m\u00eame sur <abbr title=\"Internet Explorer\">IE<\/abbr> et sur les autres navigateurs.<\/p>\n<p>Notre code <abbr>CSS<\/abbr> va donc nous permettre d&rsquo;avoir un comportement homog\u00e8ne.<br \/>\nLe <abbr>HTML<\/abbr> :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;form name=\"my_form\" action=\"#result\" method=\"post\"&gt;\r\n\t&lt;p&gt; &lt;label for=\"nom\"&gt;Nom&lt;\/label&gt; &lt;input type=\"text\" id=\"nom\"&gt; &lt;\/p&gt;\r\n\t&lt;p&gt; &lt;label for=\"email\"&gt;E-mail&lt;\/label&gt; &lt;input type=\"e-mail\" id=\"email\"&gt; &lt;\/p&gt;\r\n\t&lt;p&gt; &lt;label for=\"sujet\"&gt;Sujet&lt;\/label&gt; &lt;input type=\"text\" id=\"sujet\"&gt; &lt;\/p&gt;\r\n\t&lt;p&gt; &lt;label for=\"message\"&gt;Message&lt;\/label&gt; &lt;textarea id=\"message\"&gt;&lt;\/textarea&gt; &lt;\/p&gt;\r\n&lt;\/form&gt;<\/code><\/pre>\n<p>Le <abbr>CSS<\/abbr> :<\/p>\n<pre class=\"code\"><code class=\"language-css\">input, textarea {\r\n\t\/*d\u00e9j\u00e0 en inline-block*\/\r\n\twidth: 150px;\r\n\tpadding: 4px;\r\n\tvertical-align: top;\r\n}\r\n\r\n#sujet { width: 250px; }\r\n\r\ntextarea {\r\n\twidth: 300px;\r\n\theight: 5em;\r\n}\r\n\r\nlabel {\r\n\tdisplay: inline-block;\r\n\twidth: 100px;\r\n\tmargin-right: 20px;\r\n\tvertical-align: top;\r\n\ttext-align: right;\r\n}<\/code><\/pre>\n<p><a class=\"demonstration\" title=\"Visualiser en ligne l'utilisation du inline-block dans le cas d'un formulaire\" href=\"\/blog\/doc\/display-inline-block.html#formulaire\">Aper\u00e7u du formulaire<\/a><\/p>\n<h3>Une navigation horizontale (\u00e9l\u00e9ments de liste)<\/h3>\n<p>Le deuxi\u00e8me cas o\u00f9 l&rsquo;on peut remplacer ais\u00e9ment le <code>float<\/code> par du <code>inline-block<\/code> c&rsquo;est celui d&rsquo;une liste dont on souhaite dimensionner les liens plac\u00e9s sur une seule ligne.<br \/>\nLa valeur par d\u00e9faut d&rsquo;un <code>&lt;li&gt;<\/code> pour la propri\u00e9t\u00e9 <code>display<\/code> est <code>list-item<\/code>. Cette valeur est connue pour ses styles par d\u00e9faut (margin-start plus ou moins \u00e9lev\u00e9e, puce de liste de type <code>disc<\/code>, saut de ligne, etc.).<\/p>\n<p>Cette valeur par d\u00e9faut du <code>display<\/code> va nous poser probl\u00e8me si on veut placer tous nos liens sur une seule ligne.<br \/>\nQu&rsquo;\u00e0 cela ne tienne, il nous suffit d&rsquo;appliquer la valeur inline \u00e0 la propri\u00e9t\u00e9 display :<\/p>\n<p>Le code <abbr>HTML<\/abbr> :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;ul&gt;\r\n\t&lt;li&gt;&lt;a href=\"#\"&gt;Item 1&lt;\/a&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;a href=\"#\"&gt;Item 2&lt;\/a&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;a href=\"#\"&gt;Item 3&lt;\/a&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;a href=\"#\"&gt;Item 4&lt;\/a&gt;&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<p>Le code <abbr>CSS<\/abbr> :<\/p>\n<pre class=\"code\"><code class=\"language-css\">li {\r\n\tdisplay: inline;\r\n        list-style: none; \/* pour enlever les puces sur IE7 *\/\r\n\tmargin: 10px;\r\n}<\/code><\/pre>\n<p>Ce tron\u00e7on est plut\u00f4t simple, mais il a le m\u00e9rite de supprimer les styles par d\u00e9faut de notre liste.<\/p>\n<p>Les liens sont un peu coll\u00e9s si on en reste l\u00e0, on va donc leur appliquer de nouveaux styles :<\/p>\n<pre class=\"code\"><code class=\"language-css\">li a {\r\n\tdisplay: inline-block;\r\n\twidth: 100px;\r\n\tpadding: 5px 10px;\r\n\ttext-decoration: none;\r\n\tcolor: #fff;\r\n\tfont-weight: bold;\r\n\tbackground: #999;\r\n} <\/code><\/pre>\n<p><a class=\"demonstration\" title=\"Aper\u00e7u am\u00e9lior\u00e9 de la mise en style du menu avec display: inline-block;\" href=\"https:\/\/www.creativejuiz.fr\/blog\/doc\/display-inline-block.html#navigation\">Aper\u00e7u<\/a><br \/>\nLe lien ainsi styl\u00e9 peut subir autant de transformation que vous le d\u00e9sirez, lui appliquer un background et lui donner les dimensions que vous souhaitez devient un jeu d&rsquo;enfant.<\/p>\n<h2>Quelques soucis&#8230;<\/h2>\n<p>Oui il y en a, sinon \u00e7a ne serait pas marrant !<\/p>\n<h3>Le cas Internet Explorer<\/h3>\n<p>En effet lorsque l&rsquo;on souhaite appliquer un <code>inline-block<\/code> sur un \u00e9l\u00e9ment, la valeur est prise en compte par <abbr>IE<\/abbr> uniquement si celle par d\u00e9faut de l&rsquo;\u00e9l\u00e9ment est <code>inline<\/code>.<br \/>\nPour les cas pr\u00e9c\u00e9dents, nous avions un <code>&lt;label&gt;<\/code> \u00e0 placer en <code>inline-block<\/code>, ceci n&rsquo;a pas pos\u00e9 de probl\u00e8me car la valeur par d\u00e9faut de son <code>display<\/code> est <code>inline<\/code> (idem pour l&rsquo;\u00e9l\u00e9ment <code>&lt;a&gt;<\/code>).<br \/>\nDans l&rsquo;exemple suivant nos \u00e9l\u00e9ments sont par d\u00e9faut en <code>block<\/code>. Le remplacement de cette valeur par <code>inline-block<\/code> ne sera pas compris par <abbr>IE<\/abbr> (version inf\u00e9rieure \u00e0 8).<br \/>\nMais il y a une astuce.<br \/>\nSur une feuille de style alternative (code \u00e0 placer entre les balises <code>&lt;head&gt;<\/code>) :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;!--[if IE 7]&gt;\r\n&lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"styles-ie7.css\" \/&gt;\r\n&lt;![endif]--&gt;<\/code><\/pre>\n<p>il vous faudra pr\u00e9ciser (dans votre <abbr>CSS<\/abbr>) :<\/p>\n<pre class=\"code\"><code class=\"language-css\">element {\r\n   zoom: 1; \/*offre le layout \u00e0 un \u00e9l\u00e9ment (*)*\/\r\n   display: inline;\r\n}<\/code><\/pre>\n<p>(*)<a href=\"#comment-718\">correction Rapha\u00ebl<\/a><br \/>\nPour <abbr>IE<\/abbr> un \u00e9l\u00e9ment <code>inline<\/code> qui poss\u00e8de le <a title=\"Lire l'article sur Haslayout sur Alsacr\u00e9ations (nouvelle fen\u00eatre)\" href=\"http:\/\/www.alsacreations.com\/article\/lire\/76-haslayout-internet-explorer.html\" target=\"_blank\">layout<\/a> aura le m\u00eame comportement qu&rsquo;un <code>inline-block<\/code>.<\/p>\n<h3 id=\"probleme-white-space\">Le probl\u00e8me <code>white-space<\/code><\/h3>\n<p>Venons-en \u00e0 l&rsquo;exemple.<br \/>\nPour une raison qui ne nous int\u00e9resse pas, je souhaite afficher trois divisions les unes \u00e0 c\u00f4t\u00e9 des autres, je sais que la place disponible en largeur est de 900px :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"container\"&gt;\r\n\t&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;\r\n\t&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;\r\n\t&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>En utilisant ce code <abbr>CSS<\/abbr> je devrais pouvoir afficher mes \u00e9l\u00e9ments les uns \u00e0 c\u00f4t\u00e9 des autres :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.container {\r\n\twidth: 900px;\r\n}\r\n.container div {\r\n\tdisplay: inline-block;\r\n\twidth: 300px;\r\n}<\/code><\/pre>\n<p>En effet chaque <code>div<\/code> fait normalement 300px de largeur, comme nous en avons trois nous rentrons pr\u00e9cis\u00e9ment dans les 900px du conteneur.<br \/>\nSauf que l&rsquo;indentation de notre code fait appara\u00eetre un espace blanc (<a lang=\"en\" title=\"Article about white-space property (new windows)\" href=\"http:\/\/www.w3schools.com\/css\/pr_text_white-space.asp\" target=\"_blank\" hreflang=\"en\"><code>white-space<\/code><\/a>) d&rsquo;environ 4px entre chaque \u00e9l\u00e9ment.<\/p>\n<p>Une des solutions est de ne plus indenter la partie du code concern\u00e9e. Cela vous obligerait \u00e0 accepter de ne plus \u00ab\u00a0a\u00e9rer\u00a0\u00bb certaines parties de votre code&#8230; pas super pour la lisibilit\u00e9.<\/p>\n<p>Une autre solution consiste en l&rsquo;utilisation de commentaires HTML, de cette mani\u00e8re :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"container exemple\"&gt;&lt;!--\r\n\t--&gt;&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;&lt;!--\r\n\t--&gt;&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;&lt;!--\r\n\t--&gt;&lt;div&gt;&lt;p&gt;Lorem Elsass ipsum bredele [...]&lt;\/p&gt;&lt;\/div&gt;&lt;!--\r\n--&gt;&lt;\/div&gt; <\/code><\/pre>\n<p>Pas super pratique, surtout si pour le code g\u00e9n\u00e9r\u00e9 vous n&rsquo;avez pas enti\u00e8rement la main dessus (plugins ou fonctions WordPress, ou pas envie de tout modifier).<\/p>\n<p>La derni\u00e8re solution est de passer par du <abbr>CSS<\/abbr>.<br \/>\nIl nous faut \u00ab\u00a0supprimer\u00a0\u00bb le <a lang=\"en\" title=\"Article about white-space property (new windows)\" href=\"http:\/\/www.w3schools.com\/css\/pr_text_white-space.asp\" target=\"_blank\" hreflang=\"en\"><code>white-space<\/code><\/a> entre les <code>div<\/code>. Pour cela nous appliquons la valeur <code>nowrap<\/code> \u00e0 cette propri\u00e9t\u00e9 sur le conteneur. Cette valeur \u00e9tant h\u00e9rit\u00e9e, nous restaurons la valeur par d\u00e9faut sur les enfants du conteneur.<\/p>\n<pre id=\"white-space-css\" class=\"code\"><code class=\"language-css\">.container {\r\n\twidth: 900px;\r\n\twhite-space: nowrap;\r\n}\r\n.container div {\r\n\tdisplay: inline-block;\r\n\twidth: 300px;\r\n\twhite-space: normal;\r\n}<\/code><\/pre>\n<p><a class=\"demonstration\" title=\"Aper\u00e7u de l'alignement des blocs avec display: inline-block;\" href=\"https:\/\/www.creativejuiz.fr\/blog\/doc\/display-inline-block.html#white-space-css\">Aper\u00e7u<\/a><\/p>\n<p><b>Edit : Apr\u00e8s l&rsquo;<a href=\"#comment-725\">intervention de Rapha\u00ebl<\/a> j&rsquo;ai effectu\u00e9 quelques tests qui montrent que la suppression des espaces n&rsquo;est pas effective. Les \u00e9l\u00e9ments sont bien align\u00e9s mais d\u00e9passent de leur parent. Pourtant la m\u00e9thode permet bel et bien un alignement des \u00e9l\u00e9ments et est comprise par tous les navigateurs que j&rsquo;ai pu tester (Safari, Chrome, Firefox, IE&gt;7, Opera, sous XP, Vista et Seven)&#8230;<br \/>\nVoici cependant une solution apport\u00e9e par Rapha\u00ebl (toujours le m\u00eame) sur son espace de jeu : <a href=\"http:\/\/www.ie7nomore.com\/fun\/white-space\/\" target=\"_blank\">http:\/\/www.ie7nomore.com\/fun\/white-space\/<\/a>, ici l&rsquo;aspect \u00ab\u00a0root em\u00a0\u00bb (rem) ne nous int\u00e9resse pas (bien que je vous invite \u00e0 d\u00e9couvrir son utilit\u00e9), c&rsquo;est la simple annulation de la valeur <code>font-size<\/code> sur le parent qui est int\u00e9ressante. Elle a pour effet de supprimer les espaces ind\u00e9sirables, mais vous oblige \u00e0 utiliser une valeur de corps en pixels pour les enfants.<br \/>\n<\/b><\/p>\n<p><span id=\"vertical-align\"><\/span>Une fois ce travail d&rsquo;alignement effectu\u00e9, il arrivera probablement que le contenu ne soit pas align\u00e9 \u00e0 la vertical comme vous le souhaitez.<br \/>\nPour cela je vous rappelle que nous avons la propri\u00e9t\u00e9 <abbr>CSS<\/abbr> : <code>vertical-align<\/code>.<br \/>\nSouvent bien pratique de choisir la valeur <code>top<\/code> pour placer les \u00e9l\u00e9ments en haut de leur conteneur, il vous arrivera probablement de devoir aligner les \u00e9l\u00e9ments entre eux de mani\u00e8re centr\u00e9e (<code>middle<\/code>) ou tout en bas du conteneur (<code>bottom<\/code>).<\/p>\n<p><a class=\"demonstration\" title=\"Un exemple en passant\" href=\"https:\/\/www.creativejuiz.fr\/blog\/doc\/display-inline-block.html#idee\">Petit exemple pour la route<\/a><\/p>\n<p>Merci pour votre lecture \ud83d\ude09<br \/>\nN&rsquo;h\u00e9sitez pas si vous avez des exemples ou des contre-exemples d&rsquo;utilisation&#8230;<\/p>\n<div class=\"sources\">\n<h2>Liens utiles<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.creativejuiz.fr\/blog\/doc\/display-inline-block.html\">Page de d\u00e9monstration de la propri\u00e9t\u00e9 <code>display : inline-block<\/code><\/a><\/li>\n<li><a title=\"Article des int\u00e9gristes sur le sujet (Nouvelle fen\u00eatre)\" href=\"http:\/\/www.lesintegristes.net\/2008\/06\/18\/utiliser-la-propriete-displayinline-block\/\" target=\"_blank\">Un vieil article des Int\u00e9gristes<\/a><\/li>\n<li><a title=\"Tutoriel sur l'utilisation avanc\u00e9e de display (nouvelle fen\u00eatre)\" href=\"http:\/\/www.alsacreations.com\/tuto\/lire\/610-Mise-en-page-CSS-avancee-grace-a-la-propriete-display.html\" target=\"_blank\">Valeurs avanc\u00e9e de la propri\u00e9t\u00e9 <code>display<\/code> sur Alsacr\u00e9ations<\/a><\/li>\n<li><a title=\"Amazon (nouvelle fen\u00eatre)\" href=\"http:\/\/www.amazon.fr\/gp\/product\/2212128266\/ref=as_li_tf_tl?ie=UTF8&amp;tag=creajuiz-21&amp;linkCode=as2&amp;camp=1642&amp;creative=6746&amp;creativeASIN=2212128266\" target=\"_blank\">CSS avanc\u00e9es: Vers HTML 5 et CSS 3 &#8211; Le super nouveau livre de Rapha\u00ebl Goetter<\/a><img decoding=\"async\" style=\"border: none !important; margin: 0px !important;\" src=\"http:\/\/www.assoc-amazon.fr\/e\/ir?t=creajuiz-21&amp;l=as2&amp;o=8&amp;a=2212128266\" alt=\"\" width=\"1\" height=\"1\" border=\"0\" \/>(<a title=\"Site officiel du livre (nouvelle fen\u00eatre)\" href=\"http:\/\/www.goetter.fr\/livres\/css-avancees\/\" target=\"_blank\">site officiel<\/a>)<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Floatera, floatera pas&#8230; mais pourquoi ne pas utiliser la valeur inline-block de la propri\u00e9t\u00e9 display ? Vous connaissez certainement les valeurs block ou inline, mais moins celle de inline-block et pourtant elle peut vous servir dans bien des cas.<\/p>\n","protected":false},"author":4,"featured_media":4812,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[17,9],"tags":[228,287,288,285,286,15],"coauthors":[597],"class_list":["post-888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-tutoriels","tag-astuce","tag-block","tag-css2-1","tag-display","tag-inline","tag-tutoriel"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=888"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/888\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/4812"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=888"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}