Créer de l’interactivité sans JavaScript

Le 16/03/2017

Dans Développement

Pour commencer, il sera indispensable de bien comprendre comment cibler les éléments en fonction de leurs voisins (les sélecteurs combinateurs) ainsi qu'en fonction de leurs états (les pseudo-classes et les sélecteurs d'attributs) car c'est le mécanisme principal que nous avons en CSS pour créer de la logique. L'article de la semaine dernière étant fait de deux exemples de ce principe, nous vous recommandons de le lire si ce n'est pas encore fait.

Les préprocesseurs ne sont pas retirer des exemples, seulement les commandes qui sortent de l'ordinaire sont documentés. Si vous n'êtes pas à jour sur ce sujet, nous vous proposons deux articles pour vous simplifier l'installation.

Petit guide d'utilisation des pré-processeurs CSS #1 Les bases

Petit guide d'utilisation des pré-processeurs CSS #2 Un peu d'algorithmique

Maintenant que tout est dit, attaquons notre unique exemple de la semaine.

Pure CSS Light Bulb

See the Pen Pure CSS Light Bulb by Alexis Degryse (@twogrey) on CodePen.

Comme vous pouvez le voir, nous pouvons faire varier la lumière faite par l'ampoule avec la jauge, le tout sans JavaScript !

Niveau HTML, on commence très fort avec de l'algorithmique directement, le tout dans une template Pug.

Si c'est la première fois que vous voyez un code de ce style, l'imbrication se fait avec l'indentation et que nous n'avons donc pas besoin des balises fermantes. De plus, nous pouvons utiliser la notation "CSS" pour définir les classes et ID, et que nous pouvons ignorer "div". Pour avoir un aperçu du HTML si vous en avez besoin, appuyez sur la flèche a gauche de la boîte HTML, et demandez "view compiled HTML".

Comme vous pouvez le voir, nous sommes face à une liste d'éléments label suivi d'éléments inputs dont le cinquantième est "checked". En dessous, nous retrouvons notre ampoule.

Maintenant que nous avons expédié le HTML, passons au CSS, la partie intéressante de cet article.

See the Pen Pure CSS Light Bulb by Alexis Degryse (@twogrey) on CodePen.

Nous commençons avec une liste de déclaration de variables. Les premières sont les couleurs utilisées, puis la largeur, hauteur de chaque rang ainsi que leur nombre et enfin la taille de l'ampoule.

Le bloc ligne 48 définit le style du label. Ligne 64, nous avons une boucle permettant de définir la taille de chacun des labels qui compose la "jauge". Notez que la boucle ne prend en compte que le strict minimum de ligne, la taille, pour ne pas encombrer le CSS final.

Enfin, nous pouvons aller ligne 71 où l'ampoule est créée, puis ligne 120, où nous allons commencer à détailler.

Ligne 122, nous avons "&:checked ~ label" qui prends un opacity : 0.5 . Cette ligne fait que tous les labels après l'input radio checke sont translucides, pour représenter le fait qu'ils sont "inactifs". Si vous avez pris le temps de regarder les étoiles que nous avons proposé en fin d'article la semaine dernière, vous pouvez noter que c'est exactement la même technique qui est utilisée ici.

Enfin, nous avons une boucle ligne 125, qui va générer une centaine de ce genre de bloc, en changeant juste les valeurs chiffrées :

&.rank-1:checked ~ .light-bulb .base .bulb {
       box-shadow: 0 0 2px * 1 lighten($yellow,0.5 * 1);
       background-color: lighten($yellow,0.5 * 1);
}

Comme vous pouvez le voir, c'est exactement la même manière de cibler l'élément de manière détournée que le second exemple de la semaine dernière, la checkbox était juste ici remplacée par une liste de radios.

Pour s'exercer

Nous vous laissons avec un exercice particulièrement intéressant : un morpion en CSS. Les commandes utilisées ont été présenté dans les articles des deux dernières semaines. Cet exercice est simplement un poil plus complexe que l'exemple vu aujourd'hui. 

See the Pen Pure CSS Tic-tac-toe by Žiga Miklič (@ziga-miklic) on CodePen.