使用HTML和JS创建尾风CSS暗模式
#javascript #前端 #tailwindcss #themes

教程:用尾风CSS实施暗模式

在搜索在HTML页面上实现黑暗模式的教程时,找到清晰解释它的资源可能会具有挑战性。这就是为什么我提供本教程来帮助那些希望实现此功能的人。

遵循的步骤:

1.包括尾风CSS JavaScript文件

首先,在您的HTML页面的<head>部分中包含尾风CSS JavaScript文件。您可以使用Tailwind CSS CDN或下载文件并在本地添加它来执行此操作:

<!-- Include Tailwind CSS JavaScript file with class strategy -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- OR download tailwind.min.js file and add it locally -->
<!-- <script src="./path/to/tailwind.min.js"></script> -->

2.配置暗模式策略

在启用黑暗模式之前,请在<head>中的<script>标签中配置“暗模式”策略。在此示例中,我们正在使用类策略来启用黑暗模式:

<!-- Configure dark mode strategy -->
<script>
    tailwind.config = {
        darkMode: 'class', /* 'class' or 'media', we use 'class' to enable dark mode manually */
    }
</script>

3.页面上的加载主题加载

如果您希望主题从一开始就自动加载,请在<head>中的<script>标签中添加以下脚本:

<!-- Load theme on page load -->
<script>
    if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
        document.documentElement.classList.add('dark');
    } else {
        document.documentElement.classList.remove('dark')
    }
</script>

4.使用暗模式按钮创建卡片

现在,创建一个带有文本内容的卡和一个按钮,可以打开和关闭黑暗模式。您可以根据需要自定义卡的内容:

<body class="bg-slate-100 dark:bg-slate-800 relative flex min-h-screen flex-col justify-center overflow-hidden py-6 sm:py-12">

    <div class="flex justify-center items-center h-screen">
        <a href="#" class="block max-w-sm p-6 bg-white border border-gray-200 rounded-lg shadow hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700">
            <h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white">Quote by Agent K</h5>
            <p class="font-normal text-gray-700 dark:text-gray-400">"A person is smart. People are dumb, panicky, dangerous animals and you know it." - Agent K, Men in Black</p>
        </a>

        <button id="theme-toggle" type="button" class="text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5">
            <svg id="theme-toggle-dark-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path></svg>
            <svg id="theme-toggle-light-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4

 11a1 1 0 100-2H3a1 1 0 000 2h1z" fill-rule="evenodd" clip-rule="evenodd"></path></svg>
        </button>

    </div>
</body>

5.脚本要切换黑暗模式

最后,在HTML页面末尾添加以下脚本,以在单击按钮时打开和关闭黑暗模式:

<script>
    var themeToggleDarkIcon = document.getElementById("theme-toggle-dark-icon");
    var themeToggleLightIcon = document.getElementById("theme-toggle-light-icon");

    // Change the icons inside the button based on previous settings
    if (
        localStorage.getItem("color-theme") === "dark" ||
        (!("color-theme" in localStorage) &&
            window.matchMedia("(prefers-color-scheme: dark)").matches)
    ) {
        themeToggleLightIcon.classList.remove("hidden");
    } else {
        themeToggleDarkIcon.classList.remove("hidden");
    }

    var themeToggleBtn = document.getElementById("theme-toggle");

    themeToggleBtn.addEventListener("click", function () {
        // Toggle icons inside button
        themeToggleDarkIcon.classList.toggle("hidden");
        themeToggleLightIcon.classList.toggle("hidden");

        // If set via local storage previously
        if (localStorage.getItem("color-theme")) {
            if (localStorage.getItem("color-theme") === "light") {
                document.documentElement.classList.add("dark");
                localStorage.setItem("color-theme", "dark");
            } else {
                document.documentElement.classList.remove("dark");
                localStorage.setItem("color-theme", "light");
            }

        // If NOT set via local storage previously
        } else {
            if (document.documentElement.classList.contains("dark")) {
                document.documentElement.classList.remove("dark");
                localStorage.setItem("color-theme", "light");
            } else {
                document.documentElement.classList.add("dark");
                localStorage.setItem("color-theme", "dark");
            }
        }
    });
</script>

就是这样!您已经在HTML页面上成功实现了使用Tailwind CSS的暗模式。随时根据您的喜好自定义样式和内容。

结论

本教程已指导您使用必要的步骤,以使用Tailwind CSS在HTML页面上启用和禁用黑暗模式。享受您的新暗模式功能!

在完整的代码下方

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Arabic-Roman Numeral Converter</title>
    <link rel="icon" type="image/svg+xml" href="./assets/favicon/icon.svg">
        <!-- Tailwind CSS with class strategy -->
        <script src="https://cdn.tailwindcss.com"></script> 
        <!-- OR download tailwind.min cdn file and paste your file --> 
        <!-- <script src="./assets/tailwind/tailwind.min.js"></script> --> 
        <!-- Configure your strategy -->
        <script>
                tailwind.config = {
                    darkMode: 'class', /* class/media, here we use class to enable manually dark mode */
                }
        </script>
        <script>
            /**
             * Loads the theme stored
            */
            if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
                document.documentElement.classList.add('dark');
            } else {
                    document.documentElement.classList.remove('dark')
            }
        </script>
</head>
<body class="bg-slate-100 dark:bg-slate-800 relative flex min-h-screen flex-col justify-center overflow-hidden py-6 sm:py-12">

    <div class="flex justify-center items-center h-screen">
    <a href="#" class="block max-w-sm p-6 bg-white border border-gray-200 rounded-lg shadow hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700">
        <h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white">Quote by Agent K</h5>
        <p class="font-normal text-gray-700 dark:text-gray-400">"A person is smart. People are dumb, panicky, dangerous animals and you know it." - Agent K, Men in Black</p>
        </a>


        <button id="theme-toggle" type="button" class="text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5">
            <svg id="theme-toggle-dark-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path></svg>
            <svg id="theme-toggle-light-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" fill-rule="evenodd" clip-rule="evenodd"></path></svg>
        </button>
    </div>

    <script>
    var themeToggleDarkIcon = document.getElementById("theme-toggle-dark-icon");
    var themeToggleLightIcon = document.getElementById("theme-toggle-light-icon");

    // Change the icons inside the button based on previous settings
    if (
        localStorage.getItem("color-theme") === "dark" ||
        (!("color-theme" in localStorage) &&
            window.matchMedia("(prefers-color-scheme: dark)").matches)
    ) {
        themeToggleLightIcon.classList.remove("hidden");
    } else {
        themeToggleDarkIcon.classList.remove("hidden");
    }

    var themeToggleBtn = document.getElementById("theme-toggle");

    themeToggleBtn.addEventListener("click", function () {
        // toggle icons inside button
        themeToggleDarkIcon.classList.toggle("hidden");
        themeToggleLightIcon.classList.toggle("hidden");

        // if set via local storage previously
        if (localStorage.getItem("color-theme")) {
            if (localStorage.getItem("color-theme") === "light") {
                document.documentElement.classList.add("dark");
                localStorage.setItem("color-theme", "dark");
            } else {
                document.documentElement.classList.remove("dark");
                localStorage.setItem("color-theme", "light");
            }

            // if NOT set via local storage previously
        } else {
            if (document.documentElement.classList.contains("dark")) {
                document.documentElement.classList.remove("dark");
                localStorage.setItem("color-theme", "light");
            } else {
                document.documentElement.classList.add("dark");
                localStorage.setItem("color-theme", "dark");
            }
        }
    });
    </script>

</body>
</html>