{"id":3002,"date":"2012-10-19T17:13:55","date_gmt":"2012-10-19T15:13:55","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=3002"},"modified":"2013-08-19T10:31:11","modified_gmt":"2013-08-19T08:31:11","slug":"systeme-notation-quelques-lignes-css","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/systeme-notation-quelques-lignes-css","title":{"rendered":"Un syst\u00e8me de notation en quelques lignes de CSS"},"content":{"rendered":"<p>Afficher 5 \u00e9toiles les unes \u00e0 c\u00f4t\u00e9 des autres, puis les faire se colorer en fonction de la note que vous souhaitez donner \u00e0 une cr\u00e9ation, une vid\u00e9o, un article,&hellip; C&rsquo;est parfois prise de t\u00eate, sprites CSS et autres syst\u00e8mes de masque. Je vous propose plus simple&nbsp;!<!--more--><\/p>\n<p>Nous allons faire \u00e7a en HTML et CSS, juste pour le fun, \u00e7a vous dit ?<\/p>\n<p class=\"center\"><a href=\"\/trytotry\/rating-stars-with-no-js.html\" class=\"demonstration\" hreflang=\"en\">Voir la d\u00e9monstration<\/a><\/p>\n<h2>Un bout de HTML<\/h2>\n<p>Nous allons simplement cr\u00e9er un groupe de lien dans une <code class=\"element\">div<\/code>, mais le principe est assez semblable quelle que soit votre structure.<\/p>\n<pre class=\"code\"><code class=\"html boc-nocontrols boc-nogutter\">&lt;div class=\"rating\"&gt;&lt;!--\r\n   --&gt;&lt;a href=\"#5\" title=\"Donner 5 \u00e9toiles\"&gt;\u2606&lt;\/a&gt;&lt;!--\r\n   --&gt;&lt;a href=\"#4\" title=\"Donner 4 \u00e9toiles\"&gt;\u2606&lt;\/a&gt;&lt;!--\r\n   --&gt;&lt;a href=\"#3\" title=\"Donner 3 \u00e9toiles\"&gt;\u2606&lt;\/a&gt;&lt;!--\r\n   --&gt;&lt;a href=\"#2\" title=\"Donner 2 \u00e9toiles\"&gt;\u2606&lt;\/a&gt;&lt;!--\r\n   --&gt;&lt;a href=\"#1\" title=\"Donner 1 \u00e9toile\"&gt;\u2606&lt;\/a&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Les commentaires sont l\u00e0 pour conserver l&rsquo;indentation et \u00e9viter le <code>white-space<\/code>. Je vous renvoie sur cette <a href=\"\/blog\/tutoriels\/display-inline-block-une-valeur-trop-peu-utilisee\" title=\"Article de CreativeJuiz sur display: inline-block;\">article \u00e0 propos de inline-block<\/a> pour plus d&rsquo;informations.<\/p>\n<p>On commence par un petit probl\u00e8me : on doit inverser le sens des \u00e9toiles (liens), la premi\u00e8re permet de donner 5 \u00e9toiles (meilleure note), la derni\u00e8re 1 \u00e9toile (moins bonne note), mais vous allez comprendre ensuite pourquoi.<\/p>\n<h2>Une portion de CSS<\/h2>\n<p>Donnons quelques styles de base \u00e0 notre syst\u00e8me d&rsquo;\u00e9toiles.<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">.rating a {\r\n   color: #aaa;\r\n   text-decoration: none;\r\n   font-size: 3em;\r\n   transition: color .4s;\r\n}\r\n.rating a:hover,\r\n.rating a:focus {\r\n   color: orange;\r\n   cursor: pointer;\r\n}<\/code><\/pre>\n<p><code>transition<\/code> c&rsquo;est pour la petite touche d&rsquo;animation en CSS3, mais c&rsquo;est optionnel.<br \/>\nBien, pour le moment nous avons des liens dans le mauvais sens et les \u00e9toiles pr\u00e9c\u00e9dents celle survol\u00e9e ne sont pas orange.<\/p>\n<p>Changeons \u00e7a gr\u00e2ce au <a href=\"\/blog\/tutoriels\/selecteur-dadjacence-indirecte-en-css3\" title=\"Un article sur Creative Juiz \u00e0 propos du s\u00e9lecteur d'adjacence indirecte\">s\u00e9lecteur d&rsquo;adjacence indirecte<\/a>.<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">.rating a:hover ~ a,\r\n.rating a:focus ~ a {\r\n   color: orange;\r\n}<\/code><\/pre>\n<p>Voil\u00e0, \u00e7a c&rsquo;est fait, pour la couleur&hellip; mais on est un peu \u00e0 l&rsquo;envers encore.<\/p>\n<p>Qu&rsquo;\u00e0 cela ne tienne, la propri\u00e9t\u00e9 <code>float<\/code> \u00e0 sa valeur <code>right<\/code> a un dr\u00f4le d&rsquo;effet sur plusieurs \u00e9l\u00e9ments dispos\u00e9s ainsi : elle inverse l&rsquo;ordre.<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">.rating a {\r\n   float: right;\r\n}<\/code><\/pre>\n<p>Le code CSS final :<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">.rating a {\r\n   float: right;\r\n   color: #aaa;\r\n   text-decoration: none;\r\n   font-size: 3em;\r\n   transition: color .4s;\r\n}\r\n.rating a:hover,\r\n.rating a:focus,\r\n.rating a:hover ~ a,\r\n.rating a:focus ~ a {\r\n   color: orange;\r\n   cursor: pointer;\r\n}<\/code><\/pre>\n<p>Bien entendu avec des flottants dans les parages, il vous faudra faire attention aux effets de bord, mais \u00e7a marche plut\u00f4t bien.<\/p>\n<h2>Encore du CSS<\/h2>\n<p>Il est possible de faire autrement en changeant ponctuellement le sens de lecture. \u00c0 la place des flottants, nous allons utiliser la propri\u00e9t\u00e9 <code>direction<\/code>.<br \/>\nJe vous donne le code final directement :<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">.rating {\r\n   direction: rtl;\r\n}\r\n.rating a {\r\n   color: #aaa;\r\n   text-decoration: none;\r\n   font-size: 3em;\r\n   transition: color .4s;\r\n}\r\n.rating a:hover,\r\n.rating a:focus,\r\n.rating a:hover ~ a,\r\n.rating a:focus ~ a {\r\n   color: orange;\r\n   cursor: pointer;\r\n}<\/code><\/pre>\n<h2>Limites<\/h2>\n<p>Je ne connais pas les r\u00e9percutions en terme d&rsquo;accessibilit\u00e9 de l&rsquo;inversement de l&rsquo;ordre des liens dans le DOM par rapport \u00e0 ce qu&rsquo;on voit r\u00e9ellement \u00e0 l&rsquo;\u00e9cran. Apr\u00e8s tout si on vire la CSS, le seul probl\u00e8me serait de pr\u00e9senter comme premier lien la note la plus haute. Soit&hellip; je n&rsquo;y vois pas de souci, si ce n&rsquo;est que ce n&rsquo;est pas tr\u00e8s habituel, mais tant que l&rsquo;utilisateur le sait \u00e7a ne devrait pas poser de probl\u00e8me ergonomique&hellip;<\/p>\n<p>Autre petite note : j&rsquo;ai utilis\u00e9 des liens pour la d\u00e9mo, mais il fonctionne aussi avec <a href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/jEkBL\">des boutons radios et ses labels<\/a>.<\/p>\n<p class=\"center\"><a href=\"\/trytotry\/rating-stars-with-no-js.html\" class=\"demonstration\" hreflang=\"en\">Voir la d\u00e9monstration<\/a> <a href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/LvoFg\" class=\"demonstration\" hreflang=\"en\">Le code sur CodePen.io<\/a><\/p>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/LvoFg\" hreflang=\"en\">Le code sur CodePen.io<\/a><\/li>\n<li><a href=\"http:\/\/css-tricks.com\/star-ratings\/\" title=\"Another idea to create star rating in CSS\" lang=\"en\" hreflang=\"en\">Star Rating &#8211; CSS Tricks<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Afficher 5 \u00e9toiles les unes \u00e0 c\u00f4t\u00e9 des autres, puis les faire se colorer en fonction de la note que vous souhaitez donner \u00e0 une cr\u00e9ation, une vid\u00e9o, un article,&hellip; C&rsquo;est parfois prise de t\u00eate, sprites CSS et autres syst\u00e8mes de masque. Je vous propose plus simple&nbsp;!<\/p>\n","protected":false},"author":4,"featured_media":3115,"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":[288,508,510,441,509,511,121],"coauthors":[],"class_list":["post-3002","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-tutoriels","tag-css2-1","tag-etoile","tag-float","tag-notation","tag-rtl","tag-snippet","tag-transition"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/3002","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=3002"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/3002\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/3115"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=3002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=3002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=3002"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=3002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}