Skip to content

Commit 7b62aa5

Browse files
committed
feat(theme): light mode
1 parent ff6d50e commit 7b62aa5

24 files changed

Lines changed: 713 additions & 220 deletions

MODE_LIGHT_DARK.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# Mode Light/Dark - Documentation
2+
3+
## Vue d'ensemble
4+
5+
Le site dispose maintenant d'un système de basculement entre mode sombre (dark) et mode clair (light) utilisant CSS Variables et localStorage pour la persistance.
6+
7+
## Fichiers modifiés/créés
8+
9+
### 1. Nouveau fichier de couleurs Stylus
10+
11+
- **`themes/cactus/source/css/_colors/custom-light.styl`**
12+
- Définit la palette de couleurs pour le mode clair
13+
- Basé sur la palette de marque personnalisée fournie
14+
15+
### 2. Fichier CSS de basculement de thème
16+
17+
- **`themes/cactus/source/css/theme-toggle.css`**
18+
- Contient les CSS Variables pour les deux thèmes
19+
- Utilise l'attribut `[data-theme="custom-light"]` pour le mode clair
20+
- Par défaut (`:root`), utilise le mode sombre
21+
22+
### 3. Modifications JavaScript
23+
24+
- **`themes/cactus/source/js/main.js`**
25+
- Ajout d'un IIFE (Immediately Invoked Function Expression) pour gérer le thème
26+
- Fonctions principales :
27+
- `initTheme()` : Initialise le thème au chargement de la page
28+
- `toggleTheme()` : Bascule entre dark et custom-light
29+
- `updateToggleIcon()` : Met à jour l'icône du bouton (soleil/lune)
30+
- Stocke la préférence dans `localStorage`
31+
32+
### 4. Modifications du header
33+
34+
- **`themes/cactus/layout/_partial/header.ejs`**
35+
- Ajout d'un bouton de basculement dans le menu de navigation
36+
- Icône Font Awesome qui change selon le thème actif
37+
38+
### 5. Modifications du head
39+
40+
- **`themes/cactus/layout/_partial/head.ejs`**
41+
- Inclusion du fichier `theme-toggle.css`
42+
43+
## Utilisation
44+
45+
### Pour l'utilisateur
46+
47+
1. Cliquer sur l'icône soleil/lune dans le menu de navigation
48+
2. Le thème bascule immédiatement
49+
3. La préférence est sauvegardée et persiste entre les sessions
50+
51+
### Palette de couleurs
52+
53+
#### Mode Sombre (Dark - par défaut)
54+
55+
- Background: `#040D12`
56+
- Text: `#c9cacc`
57+
- Accent primaire: `#93BEAE` (vert)
58+
- Link: `#ff7e70` (corail)
59+
60+
#### Mode Clair (Light)
61+
62+
- Background: `#fdf9f3` (warm bg)
63+
- Text: `#1a1a1a`
64+
- Accent primaire: `#93beae` (vert)
65+
- Link: `#93beae` (vert)
66+
67+
## Architecture technique
68+
69+
### CSS Variables
70+
71+
Les couleurs sont définies via CSS Variables (`--color-*`) ce qui permet :
72+
73+
- Un basculement instantané sans rechargement de page
74+
- Une maintenance facile des couleurs
75+
- Une performance optimale
76+
77+
### Attribut data-theme
78+
79+
L'attribut `data-theme` sur `<html>` détermine le thème actif :
80+
81+
```html
82+
<html data-theme="dark">
83+
<!-- Mode sombre -->
84+
<html data-theme="custom-light">
85+
<!-- Mode clair -->
86+
</html>
87+
</html>
88+
```
89+
90+
### LocalStorage
91+
92+
La préférence est stockée avec la clé `"theme"` :
93+
94+
```javascript
95+
localStorage.setItem("theme", "dark"); // ou 'custom-light'
96+
```
97+
98+
## Développement futur
99+
100+
### Pour ajouter un nouveau thème :
101+
102+
1. Ajouter une nouvelle section dans `theme-toggle.css` :
103+
104+
```css
105+
[data-theme="nouveau-theme"] {
106+
--color-background: ...;
107+
--color-text: ...;
108+
/* etc. */
109+
}
110+
```
111+
112+
2. Modifier `toggleTheme()` dans `main.js` pour inclure le nouveau thème
113+
114+
### Pour modifier les couleurs :
115+
116+
Éditer directement les CSS Variables dans `theme-toggle.css`
117+
118+
## Build et déploiement
119+
120+
Après modification :
121+
122+
1. `hexo clean` - Nettoie le cache
123+
2. `hexo generate` - Génère le site statique
124+
3. `hexo server` - Teste localement
125+
4. Déployer normalement
126+
127+
## Notes
128+
129+
- Le mode par défaut est "dark" (sombre)
130+
- Le premier chargement sans préférence utilisera le mode sombre
131+
- L'icône du toggle : 🌞 (soleil) en mode sombre, 🌙 (lune) en mode clair
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<!-- Theme Toggle Button - Always visible -->
2+
<div id="theme-toggle-wrapper">
3+
<a href="#" onclick="toggleTheme(); return false;" aria-label="Toggle dark/light mode" id="theme-toggle-btn">
4+
<i id="theme-toggle-icon" class="fa-solid fa-moon"></i>
5+
</a>
6+
</div>

themes/cactus/layout/layout.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html<%= config.language ? " lang=" + config.language.substring(0, 2) : ""%>>
33
<%- partial('_partial/head') %>
44
<body class="max-width mx-auto px3 <%- theme.direction -%>">
5+
<%- partial('_partial/theme_toggle') %>
56
<% if (is_post()) { %>
67
<%- partial('_partial/post/actions_desktop') %>
78
<% } %>

themes/cactus/source/css/_colors/classic.styl

Lines changed: 0 additions & 15 deletions
This file was deleted.

themes/cactus/source/css/_colors/dark.styl

Lines changed: 0 additions & 15 deletions
This file was deleted.

themes/cactus/source/css/_colors/light.styl

Lines changed: 0 additions & 16 deletions
This file was deleted.

themes/cactus/source/css/_colors/white.styl

Lines changed: 0 additions & 16 deletions
This file was deleted.

themes/cactus/source/css/_extend.styl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ $base-style
1111

1212
h1, .h1
1313
display: block
14-
color: $color-accent-1
14+
color: var(--color-accent-1-var)
1515
letter-spacing: .01em
1616
font-weight: 700
1717
font-style: normal
@@ -24,14 +24,14 @@ $base-style
2424
display: block
2525
margin-top: 2rem
2626
margin-bottom: .5rem
27-
color: $color-accent-2
27+
color: var(--color-accent-2-var)
2828
text-transform: none
2929
letter-spacing: normal
3030
font-weight: bold
3131
font-size: 1rem
3232

3333
h3
34-
color: $color-accent-2
34+
color: var(--color-accent-2-var)
3535
text-decoration: underline
3636
font-weight: bold
3737
font-size: .9rem
@@ -41,7 +41,7 @@ $base-style
4141
h6
4242
display: inline
4343
text-decoration: none
44-
color: $color-accent-3
44+
color: var(--color-accent-3-var)
4545
font-weight: bold
4646
font-size: .9rem
4747

@@ -53,7 +53,7 @@ $base-style
5353
margin-bottom: .5rem
5454

5555
hr
56-
border: .5px dashed $color-accent-3
56+
border: .5px dashed var(--color-accent-3-var)
5757
opacity: .5
5858
margin: 0
5959
margin-top: 20px
@@ -114,8 +114,8 @@ $base-style
114114

115115
th
116116
padding: 8px
117-
border-bottom: 1px dashed $color-border
118-
color: $color-accent-2
117+
border-bottom: 1px dashed var(--color-border-var)
118+
color: var(--color-accent-2-var)
119119
font-weight: bold
120120
font-size: 0.9rem
121121

themes/cactus/source/css/_partial/archive.styl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
display: block
1616
margin-right: 16px
1717
min-width: 100px
18-
color: $color-meta
18+
color: var(--color-meta-var)
1919
font-size: 14px
2020

2121
@media (min-width: 480px)

0 commit comments

Comments
 (0)