Skip to content

Chapitre 2 : Le template HTML du sabre

Ouvrez src/views/HomePage.vue et remplacez tout le contenu du fichier par ce qui suit. Nous allons construire le fichier section par section, en commencant par le template.

2.1 Structure de la page

vue
<template>
  <ion-page>
    <ion-content :fullscreen="true" :scroll-y="false" class="saber-content">
      <div class="saber-scene">

        <!-- L'assemblage lame + poignee (Chapitre 2.2 et 2.3) -->

        <!-- Le bouton power (Chapitre 2.4) -->

        <!-- Le selecteur de couleur (Chapitre 2.5) -->

      </div>
    </ion-content>
  </ion-page>
</template>

Quelques points importants :

  • Pas de <ion-header> : on veut un ecran plein ecran immersif, sans barre de titre.
  • :fullscreen="true" permet au contenu de s'etendre sous la barre de statut.
  • :scroll-y="false" desactive le scroll, on ne veut pas que l'utilisateur puisse scroller.
  • saber-scene sera notre conteneur flex qui organise les elements verticalement.

2.2 La lame

La lame et la poignee sont regroupees dans un conteneur saber-assembly. Cela permet de positionner la lame en absolute par rapport a la poignee avec bottom: 100%, de sorte qu'elle est toujours collee juste au-dessus de la poignee, quelle que soit la taille de l'ecran.

Remplacez le premier commentaire par :

html
        <!-- Assemblage du sabre : lame + poignee groupees -->
        <div class="saber-assembly">
          <!-- La lame solide (rectangle fin et colore) -->
          <div
            class="blade"
            :class="{ 'blade--on': isOn }"
            :style="{ '--blade-color': activeColor }"
          ></div>
          <!-- Le halo (meme forme mais floutee, pour l'effet glow) -->
          <div
            class="blade-glow"
            :class="{ 'blade-glow--on': isOn }"
            :style="{ '--blade-color': activeColor }"
          ></div>

          <!-- Chapitre 2.3 : la poignee ira ici -->

        </div>

La lame est composee de deux elements superposes :

  • blade : un rectangle fin (8px) qui represente la lame solide.
  • blade-glow : un rectangle plus large et floute qui cree le halo lumineux caracteristique.

Les deux utilisent une variable CSS --blade-color passee via :style, ce qui permet de changer la couleur dynamiquement. La classe conditionnelle blade--on controle l'animation d'extension via scaleY. Les deux elements sont en position: absolute avec bottom: 100%, ce qui les place juste au-dessus du conteneur saber-assembly (donc au-dessus de la poignee).

2.3 La poignee (hilt)

Remplacez le commentaire de la poignee a l'interieur du saber-assembly par :

html
          <!-- La poignee du sabre -->
          <div class="hilt">
            <div class="hilt-top"></div>
            <div class="hilt-grip">
              <!-- 6 rainures decoratives sur la poignee -->
              <div class="hilt-ridge" v-for="n in 6" :key="n"></div>
            </div>
            <div class="hilt-pommel"></div>
          </div>

La poignee est un assemblage de trois parties CSS :

  • hilt-top : l'embout superieur (emetteur) ou sort la lame.
  • hilt-grip : le corps de la poignee avec ses rainures (hilt-ridge).
  • hilt-pommel : la base de la poignee.

Le v-for="n in 6" genere 6 rainures decoratives. La poignee est le seul enfant en flux normal du saber-assembly, ce qui definit la taille du conteneur et sert de point d'ancrage pour la lame.

2.4 Le bouton power

Remplacez le commentaire du bouton par :

html
        <!-- Le bouton power (icone SVG standard) -->
        <button
          class="power-btn"
          :class="{ 'power-btn--on': isOn }"
          :style="{ '--btn-color': activeColor }"
          @click="toggle"
        >
          <svg viewBox="0 0 24 24" width="32" height="32" fill="none"
               stroke="currentColor" stroke-width="2.5"
               stroke-linecap="round" stroke-linejoin="round">
            <line x1="12" y1="2" x2="12" y2="12" />
            <path d="M16.24 7.76a6 6 0 1 1-8.49 0" />
          </svg>
        </button>

Le bouton utilise une icone SVG "power" inline. Quand le sabre est allume, la classe power-btn--on ajoute une bordure lumineuse et un box-shadow colore. Le @click="toggle" appelle la fonction que nous definirons dans le script.

2.5 Le selecteur de couleur

Remplacez le dernier commentaire par :

html
        <!-- Le selecteur de couleur (visible uniquement quand le sabre est eteint) -->
        <div class="color-picker" v-show="!isOn">
          <button
            v-for="color in colors"
            :key="color.name"
            class="color-swatch"
            :class="{ 'color-swatch--active': selectedColor === color.value }"
            :style="{ background: color.value }"
            @click="selectedColor = color.value"
          >
          </button>
        </div>

v-show="!isOn" masque le selecteur quand le sabre est allume (on ne change pas de cristal kyber en plein combat). Chaque pastille de couleur est un <button> avec un background dynamique et une classe --active pour celle qui est selectionnee.