{"id":276,"date":"2009-04-26T16:51:42","date_gmt":"2009-04-26T14:51:42","guid":{"rendered":"http:\/\/www.gatellier.be\/blog\/?p=276"},"modified":"2009-04-27T11:22:58","modified_gmt":"2009-04-27T09:22:58","slug":"ie-vertical-align-middle","status":"publish","type":"post","link":"https:\/\/gatellier.be\/blog\/ie-vertical-align-middle\/","title":{"rendered":"CSS: vertical-align:middle pour Internet Explorer 6 et 7"},"content":{"rendered":"<p>Depuis la fin des mises en pages en tableaux html, centrage vertical d&#8217;un \u00e9l\u00e9ment dans son conteneur a toujours pos\u00e9 des probl\u00e8mes.<\/p>\n<h3>Internet Explorer et le vertical-align<\/h3>\n<p>En cause, Internet Explorer dans les versions 6 et 7 (je ne parle m\u00eame pas des versions ant\u00e9c\u00e9dantes) ne supportent pas correctement la propri\u00e9t\u00e9 <acronym title=\"Cascading Style Sheet\">CSS<\/acronym> <strong><a href=\"\/\/www.w3.org\/TR\/CSS21\/tables.html#value-def-table-cell\" title=\"d\u00e9finition du display:table\" hreflang=\"en\"><code>display:table-cell<\/code><\/a><\/strong>.<\/p>\n<p>En effet, le seul moyen correct de centrer verticalement un \u00e9l\u00e9ment est de faire en sorte que l&#8217;\u00e9l\u00e9ment parent se comporte comme une <a href=\"\/\/www.w3.org\/TR\/CSS21\/visudet.html#propdef-vertical-align\" title=\"d\u00e9finition du vertical-align\" hreflang=\"en\">cellule de tableau<\/a> (d&#8217;o\u00f9 des <a href=\"\/\/giveupandusetables.com\/\" hreflang=\"en\" title=\"Dois-je renoncer et employer des tableaux?\">r\u00e9actions folkloriques<\/a>). <\/p>\n<p>Le <code>display:table-cell<\/code> a \u00e9t\u00e9 introduit dans <a href=\"\/\/msdn.microsoft.com\/en-us\/library\/ms530751.aspx\" title=\"Propri\u00e9t\u00e9s CSS rajout\u00e9es dans IE8\" hreflang=\"en\">Internet Explorer 8<\/a>. Avant \u00e7a, toutes les solutions avaient leurs revers&nbsp;: <strong><code>line-height<\/code><\/strong> qui ne permet pas d&#8217;avoir des espacements de lignes correct, hauteur des \u00e9l\u00e9ments imp\u00e9rativement fixe, <strong>hacks CSS<\/strong> myst\u00e9rieux (dont on ne conna\u00eetra pas le comportement dans les futurs navigateurs).<\/p>\n<p>Bref, rien qui ne me satisfait pleinement.<\/p>\n<h3>CSS vertical-align:middle;<\/h3>\n<p>Dans Firefox 2 (pc), Firefox 3 (pc\/mac), Chrome 1.0.154, Safari (4 pc, 3.2.1 mac), Opera 9.64 (pc\/mac), Camino, Shira, IE8, le code suivant est bien rendu.<\/p>\n<p style=\"text-align:center;\"><a href=\"\/\/noscript.be\/demo\/vertical-align-middle\/IE6-fix.htm\"><img decoding=\"async\" src=\"\/\/static.gatellier.be\/i\/090426\/vertical-align-middle.png\" alt=\"texte centr\u00e9 verticalement correctement avec vertical-align:middle dans les browsers CSS\" \/><\/a><\/p>\n<h4>Le code <acronym title=\"HyperText Markup Language\">HTML<\/acronym><\/h4>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;div class=&quot;v&quot;&gt;\r\n\t&lt;div&gt;Ce texte devrait \u00eatre centr\u00e9 verticalement&lt;\/div&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<h4>Le code <acronym title=\"HyperText Markup Language\">CSS<\/acronym><\/h4>\n<pre class=\"brush: css; title: ; notranslate\" title=\"\">\r\n&lt;style type=&quot;text\/css&quot;&gt;\r\n.v {\r\n\tdisplay:table-cell;\r\n\tvertical-align:middle;\r\n\t\/*les 3 lignes suivantes ne sont pas n\u00e9cessaires*\/\r\n\tbackground:#900;\r\n\theight:250px;\r\n\twidth:150px;\r\n}\r\n.v div {\r\n\t\/*non n\u00e9cessaire, juste de la d\u00e9coration pour mieux visualiser*\/\r\n\tbackground:#090;\r\n}\r\n&lt;\/style&gt;\r\n<\/pre>\n<p>Par contre dans IE 6 et 7, l&#8217;alignement vertical n&#8217;est pas pris en compte et la bo\u00eete de texte reste en haut de la bo\u00eete bleue.<\/p>\n<p style=\"text-align:center;\"><a href=\"\/\/noscript.be\/demo\/vertical-align-middle\/IE6-fail.htm\"><img decoding=\"async\" src=\"\/\/static.gatellier.be\/i\/090426\/vertical-align-middle-IE6.png\" alt=\"texte centr\u00e9 verticalement incorrectement dans IE6\" \/><\/a><\/p>\n<h3>Expressions CSS \u00e0 la rescousse<\/h3>\n<p><a href=\"\/blog\/css-pseudo-classes-internet-explorer\/\" title=\"CSS: Pseudo classes sur Internet Explorer\">Encore une fois<\/a>, les <strong>expressions CSS d&#8217;Internet Explorer<\/strong> &ndash; qui, je sais, ne sont pas recommand\u00e9es pour des raisons de performances et qui ont \u00e9t\u00e9 supprim\u00e9es d&#8217;IE8 &ndash; peuvent nous \u00eatre bien utiles.<\/p>\n<h4>Code<\/h4>\n<pre class=\"brush: css; title: ; notranslate\" title=\"\">\r\n&lt;!--&#x5B;if lt IE 8]&gt;\r\n&lt;style type=&quot;text\/css&quot;&gt;\r\n.v {\r\n\tposition:relative;\r\n\twidth:expression(this.childNodes&#x5B;0].offsetWidth+&quot;px&quot;);\r\n}\r\n.v div {\r\n\tposition:absolute;\r\n\ttop:50%;\r\n\tmargin-top:expression(-this.offsetHeight\/2);\r\n}\r\n&lt;\/style&gt;\r\n&lt;!&#x5B;endif]--&gt;\r\n<\/pre>\n<p>Le contenu sera positionn\u00e9 en absolu, \u00e0 cinquante pourcent du top, par rapport \u00e0 son conteneur. Il aura aussi une <strong>marge n\u00e9gative de la moiti\u00e9 de sa hauteur<\/strong>.<\/p>\n<p>Comme, le contenu est plac\u00e9 en absolu, il sort du flux de la page. Sa largeur est donc report\u00e9e sur le conteneur.<\/p>\n<h3>Remarques et limitations&nbsp;:<\/h3>\n<ul>\n<li>voir la <strong><a href=\"\/\/noscript.be\/demo\/vertical-align-middle\/IE6-fix.htm\">d\u00e9mo<\/a><\/strong><\/li>\n<li>Les commentaires conditionnels sont employ\u00e9s pour cibler les version d&#8217;Internet Explorer inf\u00e9rieures \u00e0 8.<\/li>\n<li>Les expressions css ne sont pas ex\u00e9cut\u00e9es si le navigateur \u00e0 le JavaScript d\u00e9sactiv\u00e9.<\/li>\n<li>Les impacts de preformance sont \u00e0 tenir en compte&nbsp;: les expressions CSS sont recalcul\u00e9es \u00e0 chaque changement de propri\u00e9t\u00e9s CSS dans la page (redimensionnement du navigateur etc,&#8230;)<\/li>\n<li>Le comportement d&#8217;un \u00e9l\u00e9ment en <code>display:table-cell<\/code> est diff\u00e9rent de celui d&#8217;un <code>display:block<\/code>. S&#8217;il doit prendre la largeur d&#8217;un conteneur, il faudra sp\u00e9cifier celle-ci.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Les expressions CSS de IE 6 et 7 permettent de centrer verticalement un \u00e9l\u00e9ment et donc de simuler le &#8216;vertical-align:middle&#8217;.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,34,51,113],"tags":[138,137,96,136],"class_list":["post-276","post","type-post","status-publish","format-standard","hentry","category-code","category-css","category-html","category-internet-explorer","tag-bugfix","tag-expression","tag-fix","tag-vertical-align"],"_links":{"self":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":0,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/276\/revisions"}],"wp:attachment":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/media?parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/categories?post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/tags?post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}