{"id":1777,"date":"2012-01-30T08:40:16","date_gmt":"2012-01-30T07:40:16","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=1777"},"modified":"2015-01-18T16:16:14","modified_gmt":"2015-01-18T15:16:14","slug":"transitions-css3-mouseover-mouseout","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/transitions-css3-mouseover-mouseout","title":{"rendered":"Les transitions en CSS3 &#8211; Mouseover et Mouseout sans JavaScript"},"content":{"rendered":"<p>Mani\u00e8re un peu originale d&rsquo;aborder les transitions, j&rsquo;ai lu un article en anglais il n&rsquo;y a pas longtemps qui proposait d&rsquo;\u00e9tudier les transitions sur l&rsquo;\u00e9v\u00e9nement <code class=\"pseudo-e\">hover<\/code> en CSS.<br \/>\nPar d\u00e9faut, la transition sur cet \u00e9v\u00e9nement comme on a l&rsquo;habitude de l&rsquo;utiliser nous propose des effets \u00e9quivalents au &laquo;<code>mouseover<\/code>&raquo; comme<!--more--> au &laquo;<code>mouseout<\/code>&raquo;.<\/p>\n<p>Nous allons voir assez simplement comment diviser en deux les effets de transitions pour proposer un effet au survol diff\u00e9rent de l&rsquo;effet de transition au moment o\u00f9 la souris quitte l&rsquo;\u00e9l\u00e9ment.<\/p>\n<p class=\"message note\">Les propri\u00e9t\u00e9s CSS 3 demandent un pr\u00e9fixe pour les navigateurs (-moz-, -webkit-, etc.) que je n&rsquo;ai pas pr\u00e9cis\u00e9 ici.<\/p>\n<h2>Rappel sur <code>transition<\/code> en CSS 3<\/h2>\n<p>Pour cr\u00e9er une transition en CSS 3, vous aurez besoin de plusieurs informations, dont : l&rsquo;effet recherch\u00e9 (et sa correspondance en propri\u00e9t\u00e9 CSS), la dur\u00e9e et \u00e9ventuellement le sc\u00e9nario.<br \/>\nSur ce dernier point, il ne faut pas confondre <code>transition<\/code> et animation (<code>@keyframes<\/code>) en CSS 3 qui sont deux modules diff\u00e9rents.<br \/>\n<code>transition<\/code> permet tout de m\u00eame la r\u00e9alisation de mini sc\u00e9nario gr\u00e2ce \u00e0 la dur\u00e9e (<code>transition-duration<\/code>) et le d\u00e9lais (<code>transition-delay<\/code>), notamment.<br \/>\nVoici un exemple de syntaxe compl\u00e8te :<\/p>\n<pre class=\"code\"><code class=\"css\">div {\r\n   transition-property: width;\r\n   transition-duration: 2s;\r\n   transition-timing-function: ease-in;\r\n   transition-delay: .5s;\r\n}<\/code><\/pre>\n<p>Je ne vais pas refaire un article complet sur les d\u00e9tails de ces propri\u00e9t\u00e9s, il y en a un tr\u00e8s bien fait sur <a href=\"http:\/\/www.alsacreations.com\/tuto\/lire\/873-transitions-css3-animations.html\">Alsacr\u00e9ations.com par Antoine Cailliau<\/a>.<\/p>\n<p>En reprenant les m\u00eames valeurs de notre pr\u00e9c\u00e9dent code, il est possible d&rsquo;utiliser la propri\u00e9t\u00e9 raccourcie :<\/p>\n<pre class=\"code\"><code class=\"css\">div {\r\n   transition: width 2s ease-in .5s;\r\n}<\/code><\/pre>\n<p>Il est important de se souvenir de l&rsquo;ordre pour ne pas inverser <code>delay<\/code> et <code>duration<\/code>.<\/p>\n<h2>MouseEnter et MouseLeave identiques<\/h2>\n<p>Par d\u00e9faut, en utilisant cet exemple de code, le navigateur va comprendre qu&rsquo;il doit appliquer le m\u00eame effet au survol de la souris que lorsque la souris quitte l&rsquo;\u00e9l\u00e9ment.<\/p>\n<pre class=\"code\"><code class=\"css\">div {\r\n\twidth: 90px; height: 90px;\r\n\tbackground: #fff;\r\n\tborder: 20px solid #aaa;\r\n\tborder-radius: 30px;\r\n\t\/* transition pour les deux \u00e9v\u00e9nements *\/\r\n\ttransition: all 2s;\r\n}\r\ndiv:hover {\r\n\tborder-color: #333;\r\n\ttransform: rotate(1080deg);\r\n\tborder-radius: 50%;\r\n}<\/code><\/pre>\n<p>Ici l&rsquo;animation sur l&rsquo;\u00e9l\u00e9ment s&rsquo;effectuera de la m\u00eame mani\u00e8re pour l&rsquo;\u00e9tat <code class=\"pseudo-e\">hover<\/code> et lors du retour \u00e0 l&rsquo;\u00e9tat initial, sur la couleur de la bordure, le rotation et l&rsquo;arrondi des angles, selon les m\u00eames r\u00e8gles d\u00e9finies une unique fois par la propri\u00e9t\u00e9 <code>transition<\/code>.<\/p>\n<p><a class=\"demonstration\" href=\"http:\/\/dabblet.com\/gist\/1694171\" title=\"Voir la d\u00e9monstration d'une animation sur Dabblet.com\">D\u00e9monstration<\/a><\/p>\n<h2>Une animation diff\u00e9rente au MouseLeave ou au MouseEnter<\/h2>\n<p>La pr\u00e9sence de la propri\u00e9t\u00e9 <code>transition<\/code> sur <code class=\"element\">div<\/code> affecte l&rsquo;\u00e9l\u00e9ment \u00e9galement sur son \u00e9tat <code class=\"pseudo-e\">hover<\/code>. Il est donc normal que sans nouvelle d\u00e9claration de cette propri\u00e9t\u00e9 dans l&rsquo;\u00e9tat <code class=\"pseudo-e\">hover<\/code>, la seule existante s&rsquo;applique.<br \/>\nPour changer d&rsquo;effets dans l&rsquo;animation lorsque la souris survole l&rsquo;\u00e9l\u00e9ment, il suffit d&rsquo;\u00e9craser transition \u00e0 l&rsquo;\u00e9tat <code class=\"pseudo-e\">hover<\/code>.<br \/>\nPour reprendre l&rsquo;animation pr\u00e9c\u00e9dente uniquement lorsque la souris survole l&rsquo;\u00e9l\u00e9ment, et effectuer une animation plus simple lorsqu&rsquo;elle quitte l&rsquo;\u00e9l\u00e9ment, voici un exemple de code :<\/p>\n<pre class=\"code\"><code class=\"css\">div {\r\n\twidth: 90px; height: 90px;\r\n\tbackground: #fff;\r\n\tborder: 20px solid #aaa;\r\n\tborder-radius: 30px;\r\n\t\/* transition quand la souris quitte l'\u00e9l\u00e9ment *\/\r\n\ttransition: border-radius 2s, border-color 3s;\r\n}\r\ndiv:hover {\r\n\tborder-color: #333;\r\n\ttransform: rotate(1080deg);\r\n\tborder-radius: 50%;\r\n\t\/* transition quand la souris survole *\/\r\n\ttransition: all 2s;\r\n}<\/code><\/pre>\n<p>Ce qui nous donne :<br \/>\n<a class=\"demonstration\" href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/gnIJG\" title=\"Voir la d\u00e9monstration d'une animation avec un effet diff\u00e9rent sur CodePen.io\">D\u00e9monstration<\/a><\/p>\n<p>Il est \u00e9galement possible d&rsquo;envisager des animations diff\u00e9rentes pour toutes <a href=\"\/blog\/css-css3\/difference-entre-pseudo-element-et-pseudo-classe\">les pseudo-classes existantes<\/a> : <code class=\"pseudo-e\">hover<\/code>, <code class=\"pseudo-e\">focus<\/code>, <code class=\"pseudo-e\">target<\/code>, etc.<\/p>\n<p>En esp\u00e9rant que cette astuce vous soit utile \ud83d\ude09<br \/>\n\u00c0 bient\u00f4t !<\/p>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/designshack.net\/articles\/css\/mastering-mouse-enter-and-exit-events-with-css-transitions\/\" lang=\"en\" hreflang=\"en\">Mastering mouse enter and exit with CSS &#8211; DesignShack<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Mani\u00e8re un peu originale d&rsquo;aborder les transitions, j&rsquo;ai lu un article en anglais il n&rsquo;y a pas longtemps qui proposait d&rsquo;\u00e9tudier les transitions sur l&rsquo;\u00e9v\u00e9nement hover en CSS. Par d\u00e9faut, la transition sur cet \u00e9v\u00e9nement comme on a l&rsquo;habitude de l&rsquo;utiliser nous propose des effets \u00e9quivalents au &laquo;mouseover&raquo; comme<\/p>\n","protected":false},"author":4,"featured_media":1889,"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,12],"tags":[120,228,428,425,424,121],"coauthors":[597],"class_list":["post-1777","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-tutoriels","category-veille-technologique","tag-animation","tag-astuce","tag-css3","tag-mouseleave","tag-mouseover","tag-transition"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1777","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=1777"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1777\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1889"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=1777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=1777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=1777"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=1777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}