123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- <!doctype html><!-- This is a valid HTML5 document. -->
- <!-- Screen readers, SEO, extensions and so on. -->
- <html lang="fr">
- <!-- Has to be within the first 1024 bytes, hence before the `title` element
- See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
- <meta charset="utf-8">
- <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
- <!-- The viewport meta is quite crowded and we are responsible for that.
- See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <!-- Required to make a valid HTML5 document. -->
- <title>Comment fonctionne une centrale nucléaire ? (archive) — David Larlet</title>
- <meta name="description" content="Publication mise en cache pour en conserver une trace.">
- <!-- That good ol' feed, subscribe :). -->
- <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
- <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
- <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
- <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
- <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
- <link rel="manifest" href="/static/david/icons2/site.webmanifest">
- <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
- <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
- <meta name="msapplication-TileColor" content="#f7f7f7">
- <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
- <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
- <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
- <!-- Documented, feel free to shoot an email. -->
- <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
- <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
- <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
- <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
- <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
- <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
- <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
- <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
- <script>
- function toggleTheme(themeName) {
- document.documentElement.classList.toggle(
- 'forced-dark',
- themeName === 'dark'
- )
- document.documentElement.classList.toggle(
- 'forced-light',
- themeName === 'light'
- )
- }
- const selectedTheme = localStorage.getItem('theme')
- if (selectedTheme !== 'undefined') {
- toggleTheme(selectedTheme)
- }
- </script>
-
- <meta name="robots" content="noindex, nofollow">
- <meta content="origin-when-cross-origin" name="referrer">
- <!-- Canonical URL for SEO purposes -->
- <link rel="canonical" href="https://couleur-science.eu/?d=268bbb--comment-fonctionne-une-centrale-nucleaire">
-
- <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
-
-
- <article>
- <header>
- <h1>Comment fonctionne une centrale nucléaire ?</h1>
- </header>
- <nav>
- <p class="center">
- <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
- </svg> Accueil</a> •
- <a href="https://couleur-science.eu/?d=268bbb--comment-fonctionne-une-centrale-nucleaire" title="Lien vers le contenu original">Source originale</a>
- </p>
- </nav>
- <hr>
- <p><img src="https://couleur-science.eu/img/45/centrale-nucleaire.jpg" alt="Une centrale nucléaire." srcset="https://couleur-science.eu/img/45/centrale-nucleaire.jpg 1200w, img/45/centrale-nucleaire-thb.jpg 600w" sizes="50vw" loading="lazy" itemprop="image" class="imgcover"><br>
- Parfois, la simple évocation du terme « nucléaire » peut suffire à faire peur. Et pour cause : ce terme est plus généralement associé à la bombe atomique qu’à la production d’électricité décarbonée et bon marché.</p>
-
- <p>Néanmoins, comme pour un couteau ou la poudre à canon, la technologie ne fait pas le risque associé à celui-ci. C’est l’emploi qui le fait : sans poudre à canon pas de feux d’artifices, et sans couteau on ne coupe pas de pizza, par exemple. Ainsi, de même, la technologie de fission nucléaire est utilisée dans les bombes A ou H, tout comme elle est utilisée dans la production d’énergie thermique et électrique.</p>
-
- <p>Comment ? C’est l’objet de cet article.</p>
-
- <p>Je pense que la compréhension de cette technologie peut permettre d’en avoir moins peur et de voir ses avantages, plus ses seuls inconvénients. Et ceci est très important quand il s’agit de se faire un opinion sur quelque chose.</p>
-
- <p>Car tout comme l’avion peut faire peur alors qu’il s’agit du moyen de transport le plus sûr au monde, la technologie des centrales nucléaires fait peur malgré le fait qu’il s’agit à ce jour la méthode de production d’énergie la moins dangereuse depuis 60 ans, et de très loin.</p>
-
- <h2>Principe général d’une centrale électrique</h2>
-
- <p>Dans le cas d’une éolienne, c’est le vent qui actionne directement une génératrice électrique : une grosse dynamo dont le courant produit est injecté dans le réseau électrique.</p>
-
- <p>Dans le cas d’un barrage hydroélectrique, on a le même principe. C’est juste que la génératrice n’est plus alimentée par une hélice à vent, mais par une turbine à eau. L’eau qui tombe du barrage entraîne la turbine, qui elle-même entraîne la génératrice.</p>
-
- <p>Dans ce cas d’une centrale au gaz, à charbon, ou une centrale de revalorisation des déchets, il y a à nouveau une génératrice. Celle-ci est mise en rotation de deux façons (et parfois une même centrale utilise les deux à la fois pour un maximum de rendement) :</p>
-
- <ul><li> par un moteur thermique (similaire à un moteur de voiture) qui brûle le gaz ou le charbon et fait tourner la génératrice d’électricité ;</li>
- <li> par un surgénérateur à vapeur : la chaleur émise par le moteur thermique va faire chauffer de l’eau et produire de la vapeur. Cette vapeur est envoyée sur une turbine, elle-même reliée à une génératrice d’électricité.</li></ul>
-
- <p>Dans tous ces dispositifs, on utilise l’eau, le vent, la vapeur, un moteur thermique pour faire tourner une génératrice électrique. L’électricité est ensuite transformée et ajustée avant d’être envoyée dans le réseau de distribution électrique.</p>
-
- <h3>Cas d’une centrale nucléaire</h3>
-
- <p>Et une centrale nucléaire alors ?</p>
-
- <p>La centrale nucléaire est avant tout une centrale thermique : on utilise un « combustible » nucléaire, à base d’uranium et de plutonium, généralement. Ce combustible est naturellement chaud, et on peut en tirer de très grandes quantités de chaleur à l’aide d’un processus de réaction en chaîne (voir ci-dessous).</p>
-
- <p>Toute cette chaleur produite permet de chauffer de l’eau. Cette eau bout et se transforme en vapeur qui est envoyée sur des turbines, elles-mêmes reliées à des génératrices. Voilà pour le principe de base.</p>
-
- <p>La centrale nucléaire est donc une centrale thermique, sauf qu’on n’y brûle pas du gaz ou du charbon au cours d’une combustion, mais on utilise la chaleur de l’uranium ou du plutonium.</p>
-
- <p>La question logique maintenant : <strong>d’où vient cette chaleur naturelle de l’uranium et du plutonium ?</strong></p>
-
- <h2>Les matériaux fissiles</h2>
-
- <p>Dans le tableau périodique, la plupart des éléments sont stables. Le fer par exemple, ou le cuivre, l’or, l’oxygène, le calcium… restent tels qu’ils sont indéfiniment (à des échelles de temps humains ; car au-delà de 10¹⁰⁰ années, <a href="?d=0b6d81--les-etoiles-de-fer-et-la-fin-des-etoiles">tout est instable</a>).</p>
-
- <p>Certains autres éléments, comme l’uranium ou le plutonium, mais aussi le carbone 14, l’hydrogène 3, l’oxygène 18, le potassium 40… sont instables : ils finissent par se désintégrer. Cette désintégration libère de l’énergie, des particules et du rayonnement.</p>
-
- <p>On appelle cette désintégration <strong>la radioactivité</strong>.</p>
-
- <p>En plus de ça, l’uranium et le plutonium sont dits <em>fissiles</em>.<br>
- Ces atomes sont en effet très gros et massifs : à titre de comparaison, l’oxygène est composé de 16 protons et neutrons. Le fer de 56. Pour l’uranium, on parle plutôt de 238 protons et neutrons. C’est beaucoup et cela rend ces atomes instables. Il arrive ainsi qu’un atome d’uranium éjecte un neutron pour se stabiliser.</p>
-
- <p>Ce neutron est envoyé à 5-10 % de la vitesse de la lumière. Si un autre atome d’uranium se trouve sur sa trajectoire, cet atome est éclaté en deux. On dit que l’atome fissionne, et ceci aussi libère beaucoup d’énergie… et d’autres neutrons rapides !<br>
- Là encore, si de l’uranium se trouve sur leur trajectoire, ça va les fissionner en libérant d’autant plus d’énergie. Ce processus peut se répéter et on a un effet boule de neige, que l’on appelle une réaction en chaîne. Au cours de cette réaction en chaîne, une quantité inimaginable d’énergie est libérée de façon exponentielle,. Si l’on laisse cette réaction se faire, on assiste à ce qui se passe dans une bombe atomique : la libération de beaucoup d’énergie sous la forme d’une explosion.</p>
-
- <p>Les neutrons sont émis naturellement par l’uranium [uranium 235]. Mais pour qu’il y ait une réaction en chaîne, il faut que d’autre uranium se trouve sur la trajectoire de ces neutrons. Si l’on ne dispose que d’un tout petit peu d’uranium (moins de 48 kilos, qui est sa masse dite « critique »), alors les neutrons sortent de l’uranium avant de fissionner d’autres atomes et il n’y a pas de réaction en chaîne.<br>
- Pour obtenir une bombe à l’uranium, il faut donc au minimum 48 kilogramme d’uranium. À ce moment-là seulement a-t-on statistiquement plus de chances qu’un neutron fissionne un autre atome que de de sortir de l’échantillon.</p>
-
- <p>Si l’on a moins de 48 kilos d’uranium, il y a un peu de fission, mais rien d’explosif : juste assez pour produire un peu de chaleur.</p>
-
- <p>Le même principe est applicable au plutonium, mais ce dernier devient critique à partir de 10 kilogrammes. Il est donc nettement plus fissile.</p>
-
- <h2>Emploi de l’uranium dans les centrales</h2>
-
- <p>Dans les centrales, on veut à la fois :</p>
-
- <ul><li> pouvoir contrôler la quantité de chaleur produite, pour contrôler la quantité d’électricité en sortie en fonction de la demande ;</li>
- <li> éviter la criticité pour ne pas faire exploser le réacteur, la centrale, la ville toute entière.</li></ul>
-
- <p>Tout est donc une question de dosage des neutrons émis : c’est la quantité de neutrons en jeu qui va déterminer le nombre de réactions de fissions qui ont lieu, et donc a quantité de chaleur dégagée.</p>
-
- <p>Physiquement, pour chaque neutron émis puis absorbé par un autre atome, cet autre atome doit lui aussi émettre un neutron. Comme ça, le nombre de fissions est constant. On dit que le facteur multiplicatif de la réaction est 1.<br>
- Si chaque atome produit plus d’une autre fission, le nombre de fissions augmente exponentiellement et on obtient une bombe (facteur multiplicateur supérieur à 1). Si le nombre de fissions produit par chaque atome est inférieur à 1 (facteur multiplicatif inférieur à 1), la réaction s’atténue.</p>
-
- <p><strong>Dans une centrale nucléaire, on cherche à maintenir le facteur multiplicatif égale à 1 : le nombre de fissions reste constant, l’énergie produite aussi et le tout reste stable.</strong></p>
-
- <p>Pour cela, entre les morceaux de combustible nucléaire, on va introduire <strong>des barres de contrôles</strong> contenant du bore ou du cadmium : <strong>ces éléments peuvent absorber les neutrons</strong>. Si la centrale est trop chaude, on abaisse les barres de contrôle : davantage de neutrons sont absorbés, la fission ralentit, et la centrale refroidit. Si l’on veut davantage de puissance, on remonte les barres de contrôle (en faisant attention toutefois de ne pas dépasser la criticité).</p>
-
- <p>J’ai dit plus haut que les neutrons émis sont très rapides : 5-10 % de la vitesse de la lumière. À cette vitesse, les neutrons vont principalement en ligne droite et sortent de l’uranium sans produire de fission.<br>
- Si l’on souhaite favoriser la fission, on doit les ralentir : le neutron peut alors rebondir entre les atomes et a plus de chance de fission des atomes d’uranium et de produire de l’énergie.</p>
-
- <p>Ce ralentissement neutronique peut être fait par exemple à l’aide d’eau sous pression : l’hydrogène présent dans l’eau ralentie les neutrons : on dit que l’eau joue le rôle de modérateur. Le deutérium est également un modérateur (utilisé dans <a href="?d=b7897d--quest-ce-que-leau-lourde">les réacteurs à eau lourde</a>) et on peut aussi citer le graphite.</p>
-
- <p>Au final, dans le réacteur, en jouant sur la quantité de modérateur de neutron (pour accélérer la fission) et sur les barres de contrôle absorbeur de neutrons (pour réduire la fission), on peut entièrement contrôler le rythme des fissions et l’énergie produite.</p>
-
- <p>Bien-sûr, pour tout ça, on doit être constamment vigilant.</p>
-
- <h2>Problèmes possibles</h2>
-
- <p>Parmi les problèmes possibles dans un réacteur, il y a l’emballement du réacteur : le combustible surchauffe, peut fondre, et à ce moment-là on ne peut plus insérer les barres de contrôle. L’échauffement n’est alors plus contrôlable et le réacteur fond.</p>
-
- <p>Tous les réacteurs sont situés au-dessus de cuves de récupération pour au cas où le réacteur fondrait : le combustible doit fondre à travers la dalle et tomber dans la cuve.</p>
-
- <p>Il ne faut pas être tenté de refroidir tout ça directement en arrosant avec de l’eau : l’eau favorise la fission et donc l’émission de chaleur ! Cela ne ferait qu’empirer la situation.<br>
- La seule solution, c’est de récupérer le combustible et de l’étaler en petites quantités, évitant d’avoir des quantités critique de matière fissile, et de l’arroser de matériaux absorbeur de neutrons (sable au bore).</p>
-
- <p>De plus, en cas de surchauffe, la chaleur produite est telle que l’eau peut se dissocier en hydrogène et oxygène. L’hydrogène est un bon modérateur neutronique : meilleur encore que l’eau. L’hydrogène doit donc être évacué coûte que coûte. Le problème, c’est que c’est un gaz explosif.</p>
-
- <p>C’est un des problèmes qui ont eu lieu à <em>Fukushima</em> : le réacteur a fondu à cause d’un problème avec le système de refroidissement. La surchauffe a provoqué une accumulation d’hydrogène et donc provoqué un danger d’explosion. Par sécurité, cet hydrogène a dû être évacué dans la nature… au côté d’autres éléments, pour certains radioactifs.</p>
-
- <p>À Tchernobyl, c’est un défaut de conception qui a provoqué l’explosion : un test a mal tourné, les systèmes de refroidissement ont été coupés et à cause d’un défaut de conception dans le choix des matériaux utilisés sur les barres de contrôle, leur insertion subite a non pas stoppé le réacteur, mais provoqué son emballement immédiat puis son explosion.</p>
-
- <h2>Solutions</h2>
-
- <p>Les réactions nucléaires et chimiques qui ont lieu dans une centrale nucléaire sont complexes. Beaucoup de matériaux entrent en jeu : combustibles, produits de fission, produits de désintégration, modérateurs, barres de contrôle… Tous ces éléments agissent de façon chimique (l’hydrogène explose), physique (certains composés peuvent dissoudre, fondre, corroder les parois du réacteur) ou nucléaire (le modérateur favorise la fission et ce qui en découle).</p>
-
- <p>De plus, la nature des matériaux et des réactions font que ce n’est pas comme un feu que l’on peut éteindre facilement. Une fission ou une désintégration radioactive ne se contrôle pas : un atome qui veut se désintégrer le fait sans pouvoir être empêché, en libérant l’énergie qui va avec.</p>
-
- <p>Il faut donc surveiller tout ce qui se passe et agir en conséquence. Il faut aussi être prêt à tout moment de stopper le réacteur en insérant les barres de contrôle pour arrêter la fission. Cela demande une surveillance constante.<br>
- Une solution peut-être une autre forme de réacteurs, dont le fonctionnement est stable par défaut. En cas de problème, le réacteur tend toujours vers un état stable, et si cet état stable est sécurisé, le réacteur est sécurisé par défaut.</p>
-
- <p>C’est le cas par exemple des réacteurs aux sels fondus, qui contrairement aux réacteurs à uranium/plutonium actuels, ne sont pas des cocottes minutes que l’on doit constamment réguler sous peine de surpression et d’explosion, mais plutôt un système dont il suffit de couper l’alimentation pour que ça s’arrête.</p>
-
- <p>En résumé, les réacteurs actuels doivent être alimentés et surveillés pour éviter l’emballement : sans action de contrôle, le réacteur explose. D’autres types de réacteurs sont possibles : sans action de notre part, le réacteur s’arrête. C’est donc nettement plus sécurisé. La filière de l’uranium/plutonium n’est pas la seule possible, et il serait bête de rejeter « le nucléaire » quand on peut avoir des centrales plus propres et sécurisées.</p>
-
- <h2>Pour conclure</h2>
-
- <p>Premièrement, une centrale nucléaire est avant tout une centrale thermique : on utilise la chaleur pour vaporiser de l’eau et la vapeur pour faire tourner une turbine.</p>
-
- <p>La chaleur provient d’une réaction de fission nucléaire provoquée par des neutrons émis lors de la désintégration d’un matériau fissile. En contrôlant le nombre de ces fissions, on évite la réaction en chaîne et on produit une quantité de chaleur constante.</p>
-
- <p>Voilà pour l’aspect technique.</p>
-
- <p>Concernant le combustible nucléaire, on utilise évidemment de l’uranium ou du plutonium. Le premier est un matériau naturellement présent dans le sol. Le second est un des produits de fission de l’uranium.</p>
-
- <p>Le principal problème de ces centrales n’est pas forcément le risque d’accident (le nucléaire tue ou a tué beaucoup moins de monde que toutes les autres énergies prises individuellement et à production d’énergie égale), mais plutôt le fait que cela nous laisse avec des produits de fission sur les bras : les fameux « déchets nucléaires ».</p>
-
- <p>Ces déchets sont des matériaux souvent instables et radioactifs (donc dangereux), mais inexploitable à ce jour. Du coup, on doit les stocker sur le très long terme (100 000 ans).</p>
-
- <p>Ceci n’est pas, au passage, sans rappeler le CO<sub>2</sub> issu de la production d’énergie par le charbon ou le gaz, qui lui aussi est un déchet stocké [dans l’atmosphère] pour des millions d’années où il est responsable d’une pollution sans précédent et provoquant le réchauffement climatique et ses conséquences mortelles.</p>
-
- <p>D’autres technologies de réacteurs nucléaires existent ou sont à l’étude. Il serait suicidaire à l’échelle de l’espèce humaine d’exclure tout ça du mix-énergétique aujourd’hui.</p>
-
- <h3>Et la <em>fusion</em> ?</h3>
-
- <p>Une des technologies à l’étude est <strong>la fusion nucléaire</strong> : plutôt que de prendre un atome lourd d’uranium et de le briser, on va utiliser un élément léger (l’hydrogène) et le fusionner. Là aussi, de l’énergie est libérée.</p>
-
- <p>L’avantage, c’est que cela peut produire beaucoup plus d’énergie et sans déchets nucléaires dangereux et à longue durée de vie (c’est à dire « <em>dangereux longtemps</em> »).</p>
-
- <p>L’inconvénient de la fusion, c’est sa maîtrise difficile. À tel point même qu’en ce début de XXIᵉ siècle, aucun réacteur fonctionnel n’existe encore dans le monde. Le jour où nous y parviendrons en revanche, notre avenir énergétique sera assuré sur le très long terme. Mais pour ça, il faut s’en donner les moyens, évidemment.</p>
-
- <p class="small"><a href="https://unsplash.com/photos/C82jAEQkfE0">image d’en-tête de Nicolas Hippert</a></p>
- </article>
-
-
- <hr>
-
- <footer>
- <p>
- <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
- </svg> Accueil</a> •
- <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
- </svg> Suivre</a> •
- <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
- </svg> Pro</a> •
- <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
- </svg> Email</a> •
- <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
- </svg> Légal</abbr>
- </p>
- <template id="theme-selector">
- <form>
- <fieldset>
- <legend><svg class="icon icon-brightness-contrast">
- <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
- </svg> Thème</legend>
- <label>
- <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
- </label>
- <label>
- <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
- </label>
- <label>
- <input type="radio" value="light" name="chosen-color-scheme"> Clair
- </label>
- </fieldset>
- </form>
- </template>
- </footer>
- <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
- <script>
- function loadThemeForm(templateName) {
- const themeSelectorTemplate = document.querySelector(templateName)
- const form = themeSelectorTemplate.content.firstElementChild
- themeSelectorTemplate.replaceWith(form)
-
- form.addEventListener('change', (e) => {
- const chosenColorScheme = e.target.value
- localStorage.setItem('theme', chosenColorScheme)
- toggleTheme(chosenColorScheme)
- })
-
- const selectedTheme = localStorage.getItem('theme')
- if (selectedTheme && selectedTheme !== 'undefined') {
- form.querySelector(`[value="${selectedTheme}"]`).checked = true
- }
- }
-
- const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
- window.addEventListener('load', () => {
- let hasDarkRules = false
- for (const styleSheet of Array.from(document.styleSheets)) {
- let mediaRules = []
- for (const cssRule of styleSheet.cssRules) {
- if (cssRule.type !== CSSRule.MEDIA_RULE) {
- continue
- }
- // WARNING: Safari does not have/supports `conditionText`.
- if (cssRule.conditionText) {
- if (cssRule.conditionText !== prefersColorSchemeDark) {
- continue
- }
- } else {
- if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
- continue
- }
- }
- mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
- }
-
- // WARNING: do not try to insert a Rule to a styleSheet you are
- // currently iterating on, otherwise the browser will be stuck
- // in a infinite loop…
- for (const mediaRule of mediaRules) {
- styleSheet.insertRule(mediaRule.cssText)
- hasDarkRules = true
- }
- }
- if (hasDarkRules) {
- loadThemeForm('#theme-selector')
- }
- })
- </script>
- </body>
- </html>
|