{"id":4293,"date":"2014-10-13T08:37:26","date_gmt":"2014-10-13T06:37:26","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=4293"},"modified":"2017-03-23T16:14:49","modified_gmt":"2017-03-23T15:14:49","slug":"creer-des-colonnes-de-meme-hauteur-en-css","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/css-css3\/creer-des-colonnes-de-meme-hauteur-en-css","title":{"rendered":"Cr\u00e9er des colonnes de m\u00eame hauteur en CSS"},"content":{"rendered":"<p>Cela peut sembler \u00e9vident \u00e0 faire dans la th\u00e9orie, mais en pratique cr\u00e9er des colonnes de m\u00eame hauteur quel que soit le contenu de chacune d&rsquo;elle demande de s&rsquo;accorder un peu de temps de recherche, notamment si l&rsquo;on souhaite la solution flexible et d\u00e9pourvue de \u00ab\u00a0hack\u00a0\u00bb en JS. J&rsquo;ai quelque chose pour vous\u00a0!<!--more--><\/p>\n<h2>Mettons-nous \u00e0 <code>table<\/code><\/h2>\n<p>L&rsquo;une de ces solutions requiert l&rsquo;utilisation des tableaux CSS (<code>display: table-*;<\/code>) mais apporte sont lots de sp\u00e9cificit\u00e9s, avec en vrac\u00a0:<\/p>\n<ul>\n<li>vous devrez conna\u00eetre le nombre d&rsquo;\u00e9l\u00e9ments par ligne et ne pas en changer<\/li>\n<li>cette solution fonctionne d\u00e8s IE8<\/li>\n<li>des positionnements avanc\u00e9s (<code>absolute<\/code> notamment) risquent de vous poser probl\u00e8me<\/li>\n<li>certains styles sur les colonnes seront difficiles \u00e0 mettre en place<\/li>\n<\/ul>\n<p>Outre ces quelques particularit\u00e9s, cette solution r\u00e9pond n\u00e9anmoins \u00e0 notre besoin qui est de cr\u00e9er des colonnes de m\u00eame hauteur.<br \/>\nVoyons un exemple de code, avec un bout de HTML :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"column-layout\"&gt;\r\n  &lt;div&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit quia, quam delectus sequi odio fugit pariatur architecto, deleniti exercitationem quae adipisci ipsum ullam officia ea!&lt;\/div&gt;\r\n  &lt;div&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur adipisci, quod voluptates, vel nostrum ea distinctio, a tempore voluptas reiciendis doloremque veniam, accusantium. Veritatis ipsum modi doloribus enim sint magnam, delectus dolorum, aperiam! Eaque dolor, veniam eum sunt dolorem nostrum. Dolores, corporis! Magnam, amet quas? Voluptates eaque quaerat quia inventore, earum eveniet hic alias rem atque neque ab, reprehenderit dolore culpa, blanditiis! Maiores enim rerum architecto voluptatibus cumque. Debitis accusamus ea aut incidunt voluptatibus quibusdam rem sint laboriosam qui sit odio expedita illum iste consectetur fugit eaque commodi pariatur, porro ex delectus officia ratione necessitatibus totam. Necessitatibus est autem et.&lt;\/div&gt;\r\n  &lt;div&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque velit dolores ipsa maiores molestias minus iusto nulla consequatur saepe. Aspernatur nulla optio laborum ducimus dignissimos nisi itaque aliquam doloremque, iure qui. Corporis quas atque minus, eveniet delectus officiis dolor, neque, animi, deleniti adipisci esse! Ullam nesciunt, nemo fugit totam itaque.&lt;\/div&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Prenez volontairement des contenus vari\u00e9s, vous pouvez tester avec des images ins\u00e9r\u00e9es dans l&rsquo;une des divisions par exemple.<\/p>\n<p>Le code CSS va \u00eatre relativement court, il consiste simplement \u00e0 cr\u00e9er les diff\u00e9rentes cellules.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.column-layout {\r\n  display: table;\r\n  width: 100%;\r\n  border-collapse: separate;\r\n}\r\n.column-layout &gt; div {\r\n  display: table-cell;\r\n  width: 33.3333%; \/* 100%\/3 = 3 colonnes *\/\r\n  padding: 20px;\r\n  border: 5px #F2F2F2 solid;\r\n  background: #FFF;\r\n  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset;\r\n}<\/code><\/pre>\n<p>Le conteneur des 3 cellules prend le comportement d&rsquo;un tableau (l.2) d&rsquo;une largeur de 100% (l.3).<br \/>\nChacune des divisions enfant devient une cellule (l.7) et occupe 1 tiers de la largeur disponible (l.8).<br \/>\nPour le reste c&rsquo;est de la d\u00e9coration.<\/p>\n<p class=\"center\"><a class=\"demonstration\" href=\"http:\/\/creativejuiz.fr\/blog\/doc\/same-column-height-table.html\">D\u00e9monstration<\/a> <a class=\"demonstration\" href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/tkdCr\">Fork on CodePen.io<\/a><\/p>\n<h2>Introduisons un peu de <code>flex<\/code>ibilit\u00e9<\/h2>\n<p>Une autre solution consiste en l&rsquo;utilisation de <a href=\"http:\/\/dev.w3.org\/csswg\/css-flexbox\/\">Flexible box Layout Module<\/a>, ce fameux module r\u00e9\u00e9crit bon nombre de fois depuis 2009.<br \/>\nCette solution est beaucoup plus flexible, comme son nom l&rsquo;indique \ud83d\ude42<br \/>\nElle apporte \u00e9galement sont lot de sp\u00e9cificit\u00e9s\u00a0:<\/p>\n<ul>\n<li>un minimum de connaissances sur ce nouveau module CSS<\/li>\n<li>une compatibilit\u00e9 \u00e0 partir de IE10 (le fallback naturel reste convenable)<\/li>\n<li>une syntaxe un peu redondante pour un support optimal<\/li>\n<\/ul>\n<p>Reprenez le m\u00eame code HTML, mais appliquez ces styles \u00e0 la place des pr\u00e9c\u00e9dents.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.column-layout {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n}\r\n.column-layout &gt; div {\r\n  display: flex;\r\n  width: 47%;\r\n  padding: 20px;\r\n  margin: 10px 1.5%;\r\n  background: #FFF;\r\n  box-shadow: 0 0 3px rgba(0,0,0,0.05)\r\n}<\/code><\/pre>\n<p>Ici je propose un syst\u00e8me de deux colonnes.<br \/>\nBien entendu, si vous avez besoin de 3 colonnes, renseignez la CSS comme suit\u00a0:<\/p>\n<pre class=\"code\"><code class=\"language-css\">.column-layout &gt; div {\r\n  width: 32%;\r\n  margin: 10px 0.666%;\r\n}<\/code><\/pre>\n<p class=\"message important\">Du fait de ses diff\u00e9rentes r\u00e9\u00e9critures, les diff\u00e9rents navigateurs et versions de navigateurs n&rsquo;interpr\u00e8tent pas la m\u00eame syntaxe de Flexbox, voici la syntaxe compl\u00e8te pour une prise en charge optimale.<\/p>\n<pre class=\"code\"><code class=\"language-css\">  \/* pour display *\/\r\n  display: -webkit-flex;\r\n  display: -ms-flexbox;\r\n  display: flex;\r\n\u00a0\r\n  \/* pour flex-wrap *\/\r\n  -webkit-flex-wrap: wrap;\r\n  -ms-flex-wrap: wrap;\r\n  flex-wrap: wrap;<\/code><\/pre>\n<p>Les autres syntaxes (il en existe d&rsquo;autres) repr\u00e9sentent un nombre d&rsquo;utilisateurs trop peu important pour \u00eatre utiles ici.<\/p>\n<p>Comme vous le constaterez \u00e0 l&rsquo;usage, cette solution est compl\u00e8te et permet toutes les extravagances possibles en terme de design et mise en page en colonnes.<br \/>\nConcernant la probl\u00e9matique du support en dessous de IE10, sachez que le fallback naturel fait simplement passer chaque colonne en ligne de contenu, ce qui n&rsquo;est pas n\u00e9cessairement probl\u00e9matique.<\/p>\n<p class=\"center\"><a class=\"demonstration\" href=\"http:\/\/creativejuiz.fr\/blog\/doc\/same-column-height-css3.html\">D\u00e9monstration<\/a> <a class=\"demonstration\" href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/tkdCr\">Fork on CodePen.io<\/a><\/p>\n<p>N&rsquo;oubliez pas d&rsquo;utiliser le <a href=\"http:\/\/blog.goetter.fr\/articles\/box-sizing-pourquoi-pas\/\">mod\u00e8le de bo\u00eete <code>border-box<\/code><\/a> pour reproduire ces d\u00e9monstrations.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cela peut sembler \u00e9vident \u00e0 faire dans la th\u00e9orie, mais en pratique cr\u00e9er des colonnes de m\u00eame hauteur quel que soit le contenu de chacune d&rsquo;elle demande de s&rsquo;accorder un peu de temps de recherche, notamment si l&rsquo;on souhaite la solution flexible et d\u00e9pourvue de \u00ab\u00a0hack\u00a0\u00bb en JS. J&rsquo;ai quelque chose pour vous\u00a0!<\/p>\n","protected":false},"author":4,"featured_media":4300,"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],"tags":[604,289,4],"coauthors":[597],"class_list":["post-4293","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","tag-flexbox","tag-table","tag-webdesign"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4293","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=4293"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4293\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/4300"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=4293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=4293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=4293"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=4293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}