{"id":1484,"date":"2011-10-26T22:35:45","date_gmt":"2011-10-26T20:35:45","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=1484"},"modified":"2015-01-18T16:22:53","modified_gmt":"2015-01-18T15:22:53","slug":"css3-any-pseudo-classe-prometteuse-et-econome","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/veille-technologique\/css3-any-pseudo-classe-prometteuse-et-econome","title":{"rendered":"CSS3 &#8211; :any() &#8211; pseudo-classe prometteuse et \u00e9conome"},"content":{"rendered":"<p>CSS3 nous apporte son lot de nouveaut\u00e9s, et parmi elles, un petit nouveau bien prometteur, et qui pourrait nous permettre pas mal d&rsquo;\u00e9conomie de lignes de code.<br \/>\nD\u00e9couvrons la pseudo-classe <code>:any()<\/code> ensemble, voyons comment il est possible de l&rsquo;utiliser aux travers d&rsquo;exemples plus ou<!--more--> moins pertinents (on va essayer de le rester :p)<\/p>\n<h2><code>:any()<\/code>, mais qu&rsquo;est-ce donc que cette chose l\u00e0 ?<\/h2>\n<p><code>:any()<\/code> est une pseudo-classes qui permet de factoriser : \u00e7a ne vous rappelle pas les maths ? \ud83d\ude42<br \/>\nLe principe est le suivant : regrouper plusieurs \u00e9l\u00e9ments HTML afin d&rsquo;\u00e9viter la multiplication de s\u00e9lecteurs similaires.<\/p>\n<p>Sa syntaxe de base est la suivante.<\/p>\n<pre class=\"code\"><code class=\"css\">:any( selector[, selector]* )<\/code><\/pre>\n<p>Ainsi, \u00e0 la place de :<\/p>\n<pre class=\"code\"><code class=\"css\">.inside p,\r\n.inside ul,\r\n.inside blockquote {\r\nmargin-left: 2em;\r\n}<\/code><\/pre>\n<p>on pourra \u00e9crire :<\/p>\n<pre class=\"code\"><code class=\"css\">.inside :any(p, ul, blockquote) {\r\nmargin-left: 2em;\r\n}<\/code><\/pre>\n<p>J&rsquo;esp\u00e8re que cet exemple de code est parlant pour vous.<br \/>\nVoyons d&rsquo;autres exemples, peut-\u00eatre que \u00e7a vous parlera davantage.<\/p>\n<p>Cette pseudo-classe \u00e9tant encore exp\u00e9rimentale, il conviendra d&rsquo;utiliser les pr\u00e9fixes de chaque navigateur (-moz-, -webkit-, -o- et -ms-).<br \/>\nPour le moment, seuls Firefox 4+, Chrome 12+ (\u00e0 v\u00e9rifier) et Safari 5.1+ (\u00e0 v\u00e9rifier) semblent avoir impl\u00e9ment\u00e9 la chose.<\/p>\n<h2>Quelques exemples d&rsquo;utilisation<\/h2>\n<h3>Exemple \u00ab\u00a0system\u00a0\u00bb de Firefox<\/h3>\n<p>Firefox impl\u00e9mente cette pseudo-classe depuis Firefox 4 si je ne fais pas erreur.<br \/>\nEn m\u00eame temps que de proposer des styles par d\u00e9faut pour de nombreux \u00e9l\u00e9ments HTML5, cette version de Firefox pr\u00e9voyait d\u00e9j\u00e0 l&rsquo;utilisation multiple de H1.<br \/>\nLes styles suivants sont appliqu\u00e9s pour pr\u00e9voir l&rsquo;imbrication de H1 et donc son niveau dans le <abbr title=\"Document Object Model\">DOM<\/abbr>.<\/p>\n<pre class=\"code\"><code class=\"css\">\/* Niveau 0 *\/\r\nh1 {\r\n  font-size: 30px;\r\n}\r\n\/* Niveau 1 *\/\r\n:-moz-any(section, article, aside, nav) h1 {\r\n  font-size: 25px;\r\n}\r\n\/* Niveau 2 *\/\r\n:-moz-any(section, article, aside, nav)\r\n:-moz-any(section, article, aside, nav) h1 {\r\n  font-size: 20px;\r\n}\r\n\/* Niveau 3 *\/\r\n:-moz-any(section, article, aside, nav)\r\n:-moz-any(section, article, aside, nav)\r\n:-moz-any(section, article, aside, nav) h1 {\r\n  font-size: 15px;\r\n}<\/code><\/pre>\n<p>Cette technique permet de donner \u00e0 un <code>h1<\/code> un corps de texte diff\u00e9rent en fonction du nombre de parents de cet \u00e9l\u00e9ment.<br \/>\nPour le niveau 2 par exemple, le corps de texte de <code>20px<\/code> sera attribu\u00e9 si le <code>h1<\/code> se trouve enfant de <code>section<\/code> et <code>article<\/code>, ou enfant de <code>section<\/code> et <code>section<\/code>, etc.<\/p>\n<h3>Exemple de factorisation des \u00e9v\u00e8nements<\/h3>\n<p>Il vous est certainement arriv\u00e9 \u00e0 de nombreuses reprises d&rsquo;avoir le m\u00eame effet lors d&rsquo;un <code>:hover<\/code> et d&rsquo;un <code>:focus<\/code>.<br \/>\nVotre code CSS ressemble donc souvent \u00e0 cela :<\/p>\n<pre class=\"code\"><code class=\"css\">header nav li a:hover,\r\nheader nav li a:focus {\r\n\/* mes styles *\/\r\n}<\/code><\/pre>\n<p>Il est possible de simplifier ce s\u00e9lecteur ainsi :<\/p>\n<pre class=\"code\"><code class=\"css\">header nav li a:any(:hover, :focus) {\r\n\/* mes styles *\/\r\n}<\/code><\/pre>\n<p><a href=\"\/blog\/doc\/any-pseudo-class.html\" class=\"demonstration\">Voir l&rsquo;exemple<\/a>.<\/p>\n<h2>\u00c0 peine arriv\u00e9e&hellip;<\/h2>\n<p>J&rsquo;ai cru voir une information passer entre le d\u00e9but de la r\u00e9daction de cet article, et aujourd&rsquo;hui, mais je ne sais plus o\u00f9 (quelque part chez Mozilla) : apparemment <code>:any()<\/code> aurait chang\u00e9 de nom et serait maintenant une pseudo-classe de niveau 4 (entendez CSS4).<br \/>\nElle s&rsquo;appellerait d\u00e9sormais : <code><a href=\"http:\/\/dev.w3.org\/csswg\/selectors4\/#matches\">:matches()<\/a><\/code><\/p>\n<p>Sa construction pourrait donc changer entre temps, mais sachez d&rsquo;ores et d\u00e9j\u00e0 que la chose existe \ud83d\ude09<\/p>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/dev.w3.org\/csswg\/selectors4\/#matches\" hreflang=\"en\">Pseudo-classe <code>:matches<\/code> (Anglais)<\/a><\/li>\n<li><a href=\"\/blog\/doc\/any-pseudo-class.html\">Une d\u00e9monstration de l&rsquo;article<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en\/CSS\/%3A-moz-any\" hreflang=\"en\">La fameuse page de Mozilla (Anglais)<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CSS3 nous apporte son lot de nouveaut\u00e9s, et parmi elles, un petit nouveau bien prometteur, et qui pourrait nous permettre pas mal d&rsquo;\u00e9conomie de lignes de code. D\u00e9couvrons la pseudo-classe :any() ensemble, voyons comment il est possible de l&rsquo;utiliser aux travers d&rsquo;exemples plus ou<\/p>\n","protected":false},"author":4,"featured_media":1584,"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,12],"tags":[387,402,223],"coauthors":[597],"class_list":["post-1484","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-veille-technologique","tag-any","tag-matches","tag-compatibilite"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1484","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=1484"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1484\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1584"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=1484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=1484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=1484"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=1484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}