{"id":332,"date":"2008-10-28T07:32:52","date_gmt":"2008-10-28T06:32:52","guid":{"rendered":"http:\/\/nyams.planbweb.com\/blog\/?p=332"},"modified":"2008-10-28T07:32:52","modified_gmt":"2008-10-28T06:32:52","slug":"css-float-et-javascript","status":"publish","type":"post","link":"https:\/\/nyamsprod.com\/blog\/css-float-et-javascript\/","title":{"rendered":"Assigner ou r\u00e9cup\u00e9rer la valeur de l&#8217;attribut CSS float via Javascript"},"content":{"rendered":"<div class=\"message warning\">\n<p><strong>Attention:<\/strong> Les informations de ce billet sont susceptibles d'&ecirc;tre obsol&egrave;tes car vieux de plus 2 ans.<\/p>\n<p><strong>Warning: <\/strong> The information you are reading may be obsolete, this post was published more than 2 years ago.<\/p>\n<\/div><p>Comment manipuler la propri\u00e9t\u00e9 CSS <code>float<\/code> via <em>javascript<\/em>. La r\u00e9ponse qui vient directement \u00e0 l&#8217;esprit est de dire qu&#8217;il suffit d&#8217;\u00e9crire :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var el = document.getElementById(&#039;element_id&#039;); el.style.float = &#039;left&#039;;<\/pre>\n<p>Si cela \u00e9tait aussi simple, ce poste ne servirait \u00e0 rien \ud83d\ude09 . En effet le code ci-dessus ne fonctionne pas pour la simple et bonne raison qu&#8217;en <em>javascript<\/em> comme dans la plupart des langages de programmation le mot <code>float<\/code> est un mot r\u00e9serv\u00e9. En effet, <code>float<\/code> d\u00e9signe un nombre d\u00e9cimal. Alors comment faire ? <!--more--><\/p>\n<p>Un peu d&#8217;histoire pour commencer. L&#8217;\u00e9laboration de la classe <em>style <\/em>en DOM pour r\u00e9cup\u00e9rer et assigner les valeurs des feuilles de style est un apport de <em>Microsoft<\/em>. Et lorsque les d\u00e9veloppeurs de <em>M$<\/em> ce sont retrouv\u00e9s confront\u00e9s \u00e0 ce probl\u00e8me, ils l&#8217;ont r\u00e9solu en cr\u00e9ant la m\u00e9thode sp\u00e9cifique <code>styleFloat<\/code>. Ainsi, historiquement pour assigner et\/ou r\u00e9cup\u00e9rer la propri\u00e9t\u00e9 <code>float<\/code> d&#8217;un \u00e9l\u00e9ment il fallait \u00e9crire, dans le premier navigateur \u00e0 permettre une telle assignation, le code suivant :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var el = document.getElementById(&#039;element_id&#039;); el.style.styleFloat = &#039;left&#039;;<\/pre>\n<p>Mais voila, entre temps, le W3C a r\u00e9cup\u00e9r\u00e9\u00a0et a\u00a0reformul\u00e9 la classe <code>style<\/code> et, apr\u00e8s moultes d\u00e9bats, il fut d\u00e9cid\u00e9 d&#8217;utiliser la m\u00e9thode <code>cssFloat<\/code>. Donc selon le W3C il faut \u00e9crire ce qui suit :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var el = document.getElementById(&#039;element_id&#039;); el.style.cssFloat = &#039;left&#039;;<\/pre>\n<p>Bon je vois d\u00e9j\u00e0, certains d&#8217;entre vous critiquer encore une fois Microsoft, mais pour une fois, je vais prendre leur d\u00e9fense. Ils ont cr\u00e9\u00e9 et implant\u00e9 la classe <code>style<\/code> avant les recommandations du W3C et donc ils ont fait ce qu&#8217;ils ont jug\u00e9 \u00eatre correct \u00e0 l&#8217;\u00e9poque, et d&#8217;ailleurs d&#8217;autres navigateurs ont suivi et ont implant\u00e9 la m\u00e9thode <code>styleFloat<\/code> .<\/p>\n<p>En r\u00e9sum\u00e9,\u00a0\u00e0 l&#8217;heure actuelle, il existe 3 types de navigateurs:<\/p>\n<ul>\n<li>Ce qui ne connaissent que la m\u00e9thode <code>styleFloat<\/code>, comme Internet Explorer jusqu&#8217;\u00e0 la version 7 (<em>je n&#8217;ai pas test\u00e9 Internet Explorer 8<\/em>).\u00a0<\/li>\n<li>Ce qui ne reconnaissent\u00a0que la m\u00e9thode <code>cssFloat<\/code> , comme Safari ou encore Firefox,<\/li>\n<li>\u00a0Et enfin, ceux qui\u00a0comprennent les 2 m\u00e9thodes, Opera est dans cette derni\u00e8re cat\u00e9gorie.\u00a0<a title=\"D\u00e9monstration de l'assignation et de la r\u00e9cup\u00e9ration de la valeur float\" href=\"http:\/\/nyams.planbweb.com\/test\/float\/\"><\/a><\/li>\n<\/ul>\n<p><a title=\"D\u00e9monstration de l'assignation et de la r\u00e9cup\u00e9ration de la valeur float\" href=\"http:\/\/nyams.planbweb.com\/test\/float\/\">Dans de telles conditions<\/a>, on serait tent\u00e9 d&#8217;utiliser les <em>user agent<\/em> des navigateurs pour d\u00e9terminer quand utiliser l&#8217;une ou l&#8217;autre de ces m\u00e9thodes, <a title=\"Il est temps d'arr\u00eater d'utiliser les user agent\" href=\"http:\/\/nyams.planbweb.com\/blog\/2008\/09\/18\/yen-a-marre-des-user-agent\/\">mais cet option est mal<\/a>!! Au lieu de cela, le plus simple et le plus efficace est encore d&#8217;\u00e9crire les codes suivants :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var el = document.getElementById(&#039;element_id&#039;);  \/\/assignation\n\nel.style.styleFloat = &#039;left&#039;;\n\nel.style.cssFloat = &#039;left&#039;;  \/\/r\u00e9cup\u00e9ration\n\nvar elFloat = (typeof el.style.cssFloat === &#039;string&#039;) ? el.style.cssFloat : el.style.styleFloat;<\/pre>\n<p>En r\u00e9sum\u00e9, lors de l&#8217;assignation, on utilise les 2 m\u00e9thodes, m\u00eame si cela ajoute la m\u00e9thode manquante \u00e0 l&#8217;\u00e9l\u00e9ment s\u00e9lectionn\u00e9, cela n&#8217;engendrera aucune erreur DOM et\/ou javascript. Lors de la r\u00e9cup\u00e9ration de la valeur de <em>float<\/em> il suffira de v\u00e9rifier si la m\u00e9thode <code>cssFloat<\/code> est pr\u00e9sente si oui on r\u00e9cup\u00e8re sa valeur, sinon on r\u00e9cup\u00e8re la valeur de <code>styleFloat<\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment assigner et r\u00e9cup\u00e9rer de mani\u00e8re s\u00fbre la valeur de l&#8217;attribut CSS float via Javascript<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5],"tags":[53,80,135,141,200,292,396,506],"class_list":["post-332","post","type-post","status-publish","format-standard","hentry","category-web","tag-attribut","tag-browser-detection","tag-css","tag-cssfloat","tag-float","tag-javascript","tag-object-detection","tag-stylefloat"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/comments?post=332"}],"version-history":[{"count":0,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/332\/revisions"}],"wp:attachment":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/media?parent=332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/categories?post=332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/tags?post=332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}