You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将PHP生成的页面切换为深色模式?

如何将PHP生成的页面切换为深色模式?

嘿,看你在树莓派上搭了个定时换图的趣味页面,要给它加上深色模式其实不难,我给你分享几个实用的思路,按需选就行:


方法1:和现有时间逻辑联动,自动切换深浅模式

你已经在根据时间段换图片了,刚好可以同步给页面绑定深浅模式的样式类,逻辑完全对齐:

先修改你的PHP代码,给每个时间段加上对应的主题类:

<?php
require 'Parsedown.php';  // 你的markdown解析器
$h = date('H'); 

// 同时设置图片和主题类
if( $h < 5 ) {
    $pic = 'res/cyber_rat.png';
    $themeClass = 'dark-mode'; // 深夜用深色
} elseif( $h < 11 ) {
    $pic = 'res/day_rat.png';
    $themeClass = 'light-mode'; // 清晨白天用浅色
} elseif( $h < 20 ) {
    $pic = 'res/saint_rat.png';
    $themeClass = 'light-mode'; // 下午保持浅色
} else {
    $pic = 'res/asm_rat.png';
    $themeClass = 'dark-mode'; // 晚间切换深色
}

// 用Parsedown把README转成HTML(比nl2br更贴合markdown格式)
$readme = file_get_contents('/opt/rat/README.md');
$parsedown = new Parsedown();
$readme_html = $parsedown->text($readme);
?>

然后在页面的<body>标签里输出这个类:

<body class="<?php echo $themeClass; ?>">

最后写对应的CSS样式,放在<style>标签或者单独的.css文件里:

/* 浅色模式基础样式 */
body.light-mode {
    background-color: #fff;
    color: #333;
    transition: all 0.3s ease;
}

/* 深色模式样式 */
body.dark-mode {
    background-color: #1a1a1a;
    color: #f0f0f0;
}

/* 给markdown内容适配深色模式 */
body.dark-mode a {
    color: #63b3ed;
}
body.dark-mode img {
    filter: brightness(0.9) contrast(1.1); /* 让图片在深色背景下更和谐 */
}

方法2:让用户手动切换,用Session记住选择

如果不想完全靠时间,让用户能自主切换的话,用Session来记录偏好就行:

先在PHP开头处理切换请求:

<?php
session_start(); // 开启Session来存用户选择
require 'Parsedown.php';

// 处理切换主题的请求
if(isset($_GET['theme'])){
    $_SESSION['theme'] = $_GET['theme'];
    header("Location: ".$_SERVER['PHP_SELF']); // 跳回当前页面避免重复提交
    exit;
}

// 优先用用户选择的主题,没有的话按时间默认
$h = date('H');
if(isset($_SESSION['theme'])){
    $themeClass = $_SESSION['theme'];
} else {
    $themeClass = ($h < 5 || $h >=20) ? 'dark-mode' : 'light-mode';
}

// 图片逻辑和之前一样
if( $h < 5 ) {
    $pic = 'res/cyber_rat.png';
} elseif( $h < 11 ) {
    $pic = 'res/day_rat.png';
} elseif( $h < 20 ) {
    $pic = 'res/saint_rat.png';
} else {
    $pic = 'res/asm_rat.png';
}

$readme = file_get_contents('/opt/rat/README.md');
$parsedown = new Parsedown();
$readme_html = $parsedown->text($readme);
?>

然后在页面上加个切换按钮区域:

<div style="margin: 10px 0;">
    <a href="?theme=light-mode" style="padding: 5px 10px; margin-right: 10px; background: #eee; text-decoration: none;">浅色模式</a>
    <a href="?theme=dark-mode" style="padding: 5px 10px; background: #333; color: #fff; text-decoration: none;">深色模式</a>
</div>

CSS样式和方法1一样,这样用户点按钮就能切换,刷新页面也会记住他们的选择。


方法3:自动适配系统的深色模式偏好

现在主流浏览器都支持检测系统的深色模式设置,纯CSS就能搞定,不用改太多PHP:

直接写这段CSS:

/* 默认浅色模式 */
body {
    background-color: #fff;
    color: #333;
    transition: background-color 0.3s, color 0.3s;
}

/* 当系统设置为深色模式时自动生效 */
@media (prefers-color-scheme: dark) {
    body {
        background-color: #1a1a1a;
        color: #f0f0f0;
    }
    body a {
        color: #63b3ed;
    }
    body img {
        filter: brightness(0.9) contrast(1.1);
    }
}

这种方法最省心,页面会自动跟着用户的系统设置走——比如用户把手机/电脑改成深色,页面就自动变深色,改回浅色就同步切换。

内容来源于stack exchange

火山引擎 最新活动