新闻详情

新闻详情

首页 / 资讯中心 / 详情

树莓派搭建智能家居服务器:从选型到自动化实战

发布时间:2026/9/20 5:33:07来源:尧图网络
树莓派搭建智能家居服务器:从选型到自动化实战
1. 为什么我选择用树莓派做智能家居服务器1.1 从一次“灯忘关”的尴尬说起去年冬天有一次出差高铁都开出两百公里了我突然想起来客厅的取暖器没关。那种后背发凉的感觉估计每个租过老房子的人都懂。当时我就在想能不能有个便宜、省电、随时在线的小盒子帮我把家里这些零零碎碎的东西管起来。市面上成品智能家居中枢不少但要么生态封闭要么数据全在别人服务器上要么价格直接劝退。折腾了一圈最后还是回到了树莓派这条路上。树莓派做智能家居服务器核心逻辑其实特别朴素它是一台功耗只有几瓦、可以7×24小时开机、能跑完整Linux系统、带GPIO引脚可以直连传感器和执行器的小电脑。你把它往路由器旁边一放接上电源和网线它就成了你家里的“本地大脑”。所有自动化规则、设备状态、历史数据都存在你自己手里断网了局域网内的控制照样能用。这件事的意义在于你不再依赖任何厂商的云服务续费也不用担心哪天某个品牌停止运营导致设备变砖。适合看这篇内容的人我大致分三类。第一类是刚拿到树莓派、想找个能落地的项目练手的入门玩家第二类是家里已经有一些智能设备、但被多个App割裂得很难受的折腾党第三类是做毕设或者课程设计需要一套完整智能家居控制系统方案的同学。不管你是哪一类下面的内容都会从选型、装系统、搭服务、写自动化一路讲到底中间踩过的坑我也会原样告诉你。1.2 树莓派方案和成品中枢的取舍很多人一上来就问为什么不直接买个成品网关。我的回答通常是看你想要“省事”还是想要“可控”。成品网关的优势是开箱即用App界面漂亮语音助手对接完善。但它的代价是你的自动化逻辑被限制在厂商允许的范围内你想让“如果阳台湿度超过80%且室内温度低于15度就打开除湿机并给我发消息”这种组合条件很多成品根本做不到或者要付费解锁高级场景。树莓派方案正好相反。前期你需要花一个周末装系统、配环境、部署服务但一旦跑起来规则想怎么写就怎么写。你可以用Node-RED拖拽流程也可以直接写Python脚本甚至可以让它同时兼任文件服务器、下载机、内网DNS。我自己的那台树莓派4B除了跑智能家居还顺带做了家庭相册备份和打印机共享一机多用电费一个月也就几块钱。当然树莓派不是没有短板。它的GPIO是3.3V逻辑电平直接驱动继电器模块没问题但要接5V传感器就得注意电平转换。另外SD卡作为系统盘长期读写容易损坏这是很多人跑几个月后系统崩溃的元凶。后面我会专门讲怎么规避这个问题。1.3 硬件选型别在第一步就买错树莓派型号现在市面上主流是3B、4B和5。做智能家居服务器我的建议很明确优先选4B的4GB或8GB版本预算充足直接上5。3B虽然也能跑但内存1GB在同时运行Home Assistant、MQTT broker和数据库时会有明显卡顿尤其是你后面想接入摄像头做简单图像识别的时候3B基本没戏。存储方面千万不要只靠一张SD卡。我的做法是一张32GB的A2级别SD卡装系统同时插一块USB3.0的固态硬盘或者高速U盘做数据盘把Docker容器数据、数据库、日志全部放到外置存储上。树莓派4B和5都支持USB启动如果你愿意折腾直接把系统装到SSD上稳定性会有质的提升。我第一台机器就是SD卡跑了半年后突然只读所有自动化配置全丢从那以后我再也不把重要数据放SD卡上。电源是另一个容易被忽视的点。树莓派4B官方推荐5V 3A5代推荐5V 5A。很多人拿手机充电头凑合结果带不动USB外设系统频繁重启。我实测过一个标称5V 2.4A的充电头接上SSD后电压直接掉到4.6V树莓派就开始随机死机。所以电源一定买官方或者口碑好的品牌别省这几十块钱。网络连接我强烈建议走有线。Wi-Fi虽然方便但2.4G频段干扰严重智能家居设备又多延迟抖动会让你怀疑人生。树莓派4B的千兆网口跑本地服务绰绰有余实在不方便拉网线再考虑Wi-Fi但尽量用5G频段。传感器和执行器这块入门可以从DHT22温湿度传感器、人体红外模块、继电器模块开始。DHT22精度够用单总线协议接线简单。继电器买光耦隔离的别买那种便宜的三无产品否则开关瞬间的干扰可能让树莓派重启。如果要接220V市电控制灯具务必断电操作并且确保继电器额定电流留足余量。2. 系统安装与基础环境搭建2.1 系统镜像选择和烧录树莓派官方系统现在叫Raspberry Pi OS基于Debian。做服务器用途我推荐装Lite版本也就是不带桌面环境的版本。原因很简单桌面环境占内存、占CPU、还多了一堆不必要的服务服务器要的是稳定和资源节约。你不需要在树莓派上开浏览器看网页所有配置通过SSH远程完成就行。烧录工具用官方Raspberry Pi ImagerWindows、Mac、Linux都有。打开之后选择“Raspberry Pi OS Lite (64-bit)”然后点右下角齿轮图标提前配置好主机名、开启SSH、设置用户名密码、配置Wi-Fi如果必须用无线的话。这一步非常关键因为Lite版本没有桌面你不提前开SSH插上显示器也进不去图形界面。烧录完成后把SD卡插回树莓派上电。等待两三分钟用路由器后台找到树莓派的IP地址或者直接用主机名.local访问。Windows用户如果解析不了.local装个Bonjour打印服务就行或者直接在路由器里给树莓派绑定静态IP后面所有操作都用IP省心。第一次SSH登录用户名和密码就是你在Imager里设置的那个。登录成功后第一件事是改源。国内网络环境直接连官方源速度很慢换成国内镜像源能快很多。树莓派OS的源配置文件在/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list。具体换源命令网上很多但要注意版本代号比如Bookworm和Bullseye的源地址不一样换错了apt update会报错。我一般直接看/etc/os-release里的VERSION_CODENAME确认是bookworm还是bullseye再动手。2.2 系统基础配置和远程访问换完源先跑一遍完整更新sudo apt update sudo apt full-upgrade -y sudo reboot重启后登录用raspi-config做几项基础设置。第一修改时区为Asia/Shanghai否则日志时间全是UTC排查问题的时候很痛苦。第二开启VNC或者直接跳过服务器用途SSH足够。第三在Performance Options里把GPU内存调到最低16MB省出来的内存给系统用。第四如果用的是SSD启动确认启动顺序已经改成USB优先。远程访问方面SSH是必须的。我还会装一个RustDesk做备用远程桌面虽然Lite版本没有图形界面但万一需要临时看个图形化工具可以装个轻量级的xrdp。不过说实话跑服务器一年到头也用不上几次图形界面SSH加命令行编辑器足够。这里插一句关于SSH安全的事。默认22端口暴露在公网风险很高如果你确实需要外网访问至少做三件事禁用密码登录改用密钥、修改默认端口、装fail2ban自动封禁多次尝试的IP。更稳妥的做法是只在内网访问外网通过其他方式接入这里就不展开说了。2.3 Docker环境部署智能家居服务器上要跑的服务不止一个Home Assistant、Mosquitto、Node-RED、数据库每个都直接装系统里会搞得依赖关系一团糟。Docker能把这些服务隔离在各自容器里升级、备份、迁移都方便。树莓派4B/5跑Docker完全没问题官方提供了一键安装脚本curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER执行完最后一条命令后需要重新登录SSH用户组变更才生效。验证一下docker version docker run hello-world看到hello-world输出就说明Docker正常了。接下来装Docker Compose虽然现在Docker自带compose插件但独立版本的compose用起来更顺手。装完之后我建议把Docker的数据目录改到外置SSD上默认在/var/lib/dockerSD卡扛不住频繁读写。修改方法是在/etc/docker/daemon.json里加data-root配置然后重启Docker服务。注意修改Docker数据目录前如果已经有容器在跑需要先停止Docker服务迁移数据再改配置启动。直接改配置会导致已有容器丢失。3. 核心服务部署让树莓派真正“智能”起来3.1 Home Assistant的容器化部署Home Assistant是目前开源智能家居里生态最完善的一个支持上千种设备接入自动化引擎强大界面也过得去。用Docker部署是最干净的方式。我习惯用docker-compose管理新建一个目录比如/opt/smart-home在里面写docker-compose.ymlversion: 3 services: homeassistant: container_name: homeassistant image: ghcr.io/home-assistant/home-assistant:stable volumes: - ./config:/config - /etc/localtime:/etc/localtime:ro environment: - TZAsia/Shanghai restart: unless-stopped network_mode: host privileged: true这里有几个关键点解释一下。network_mode用host模式是因为Home Assistant需要发现局域网内的设备桥接模式会限制广播发现。privileged: true是为了让它能访问USB设备比如Zigbee协调器或者蓝牙适配器。volumes把配置目录映射到本地这样升级容器不会丢配置。启动命令docker-compose up -d第一次启动会拉取镜像树莓派上大概需要几分钟。启动完成后浏览器访问树莓派IP的8123端口就能看到Home Assistant的初始化界面。创建账号、设置位置、选择时区然后就可以开始接入设备了。接入设备的方式取决于你的设备类型。Wi-Fi设备通常通过集成页面自动发现或者手动输入IP。Zigbee设备需要插一个USB协调器比如CC2652或者ConBee II然后在Home Assistant里添加ZHA集成。蓝牙设备用内置蓝牙或者USB蓝牙适配器添加Bluetooth集成。我自己的配置是Zigbee协调器接在USB延长线上远离树莓派本体和SSD减少2.4G干扰。3.2 MQTT broker和Node-RED的配合Home Assistant自带的自动化引擎已经很强了但如果你喜欢可视化拖拽编程Node-RED是绝佳补充。而Node-RED和Home Assistant之间以及各种DIY传感器之间通常用MQTT协议通信。所以Mosquitto这个MQTT broker基本是必装的。在同一个docker-compose.yml里追加mosquitto: container_name: mosquitto image: eclipse-mosquitto:2 volumes: - ./mosquitto/config:/mosquitto/config - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log ports: - 1883:1883 - 9001:9001 restart: unless-stopped nodered: container_name: nodered image: nodered/node-red:latest volumes: - ./nodered:/data environment: - TZAsia/Shanghai ports: - 1880:1880 restart: unless-stoppedMosquitto需要先创建配置文件在./mosquitto/config/mosquitto.conf里写入listener 1883 allow_anonymous true这是最简配置允许匿名连接。如果你的网络环境比较复杂建议设置用户名密码在配置文件里加上password_file并生成密码文件。局域网内自己用匿名问题不大但如果你有公网暴露或者访客网络务必加认证。Node-RED启动后访问1880端口第一次进去是空的流程画布。你需要安装几个关键节点node-red-contrib-home-assistant-websocket用于和Home Assistant通信node-red-contrib-mqtt相关节点通常自带。安装方法是在Node-RED菜单里点“节点管理”搜索安装。装完后配置Home Assistant服务器地址和长期访问令牌就可以在Node-RED里直接调用Home Assistant的实体和服务了。我自己的用法是简单的定时开关灯用Home Assistant原生自动化复杂的多条件联动、需要发通知到手机、需要调用外部API的全部丢给Node-RED。两者各取所长维护起来也清晰。3.3 数据库和持久化存储Home Assistant默认用SQLite存历史数据小规模使用没问题但设备多了之后查询会变慢而且SQLite文件损坏的风险不低。我建议换成MariaDB或者PostgreSQL。在docker-compose里加一个MariaDB容器mariadb: container_name: mariadb image: mariadb:10.11 volumes: - ./mariadb:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORDyour_strong_password - MYSQL_DATABASEhass - MYSQL_USERhass - MYSQL_PASSWORDyour_hass_password restart: unless-stopped command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci然后在Home Assistant的configuration.yaml里配置recorder组件指向MariaDB。这样历史数据查询快很多而且数据库文件在外置SSD上不怕SD卡挂掉。提示数据库密码不要用简单密码即使是内网。我见过有人因为内网设备被入侵导致数据库被清空的案例虽然概率低但设个强密码不费事。4. 自动化实战从“能控”到“会想”4.1 用GPIO直连传感器采集数据树莓派的GPIO是它区别于普通服务器最大的地方。你可以直接接温湿度传感器、光照传感器、雨滴传感器把物理世界的数据读进来。以DHT22为例接线方式是VCC接3.3V引脚1GND接GND引脚6DATA接GPIO4引脚7。然后在树莓派上装Adafruit的DHT库sudo apt install python3-pip pip3 install Adafruit_DHT写一个简单的Python脚本读取数据import Adafruit_DHT import time sensor Adafruit_DHT.DHT22 pin 4 while True: humidity, temperature Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print(f温度: {temperature:.1f}C 湿度: {humidity:.1f}%) else: print(读取失败) time.sleep(60)这个脚本每60秒读一次输出到终端。但我们要的是把数据接入Home Assistant。有两种方式一是用MQTT发布二是用Home Assistant的command_line传感器。我推荐MQTT方式因为更灵活Node-RED也能订阅。改造脚本加上MQTT发布import Adafruit_DHT import paho.mqtt.publish as publish import time import json sensor Adafruit_DHT.DHT22 pin 4 while True: humidity, temperature Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: payload json.dumps({temperature: round(temperature, 1), humidity: round(humidity, 1)}) publish.single(home/livingroom/dht22, payload, hostnamelocalhost) time.sleep(60)然后在Home Assistant的configuration.yaml里加MQTT传感器mqtt: sensor: - name: 客厅温度 state_topic: home/livingroom/dht22 value_template: {{ value_json.temperature }} unit_of_measurement: C device_class: temperature - name: 客厅湿度 state_topic: home/livingroom/dht22 value_template: {{ value_json.humidity }} unit_of_measurement: % device_class: humidity重启Home Assistant后就能在界面上看到客厅的温湿度了。这个数据可以用于自动化触发比如湿度超过70%自动打开除湿机。4.2 自动化规则设计几个我实际在用的场景场景一回家自动开灯。用手机连接家里Wi-Fi作为触发条件比地理围栏更可靠。在Home Assistant里用ping集成或者路由器集成检测手机是否在线。当手机从离线变为在线且时间在日落后到晚上11点之间打开玄关灯和客厅灯亮度设为70%。场景二夜间起夜自动亮小灯。用床下的人体红外传感器触发条件是时间在晚上11点到早上6点之间且主灯是关闭状态。触发后打开走廊的灯带亮度10%颜色设为暖黄5分钟后自动关闭。场景三温度过高自动开风扇。当客厅温度超过28度且有人在家打开风扇插座通过继电器控制并发送手机通知。温度降到26度以下自动关闭。场景四漏水检测紧急关阀。在水槽下放一个水浸传感器一旦检测到漏水立即关闭智能水阀并给手机发紧急通知同时让客厅灯闪烁红色。这个场景我虽然没实际触发过但每次看到那个传感器都觉得安心。这些自动化在Home Assistant里用YAML写或者用界面编辑器都行。我的经验是复杂的用YAML写因为版本控制方便改错了能回滚。简单的用界面点几下就完事。4.3 外网访问与远程控制在家用局域网访问Home Assistant很简单但出门在外想看看家里状态怎么办。最稳妥的方式是用Home Assistant Cloud官方提供的远程访问服务按月付费省心但花钱。免费方案有几种一是用DuckDNS加Lets Encrypt证书做动态DNS把树莓派暴露到公网但需要路由器端口转发安全性要自己把控。二是用Tailscale或者ZeroTier这类组网工具把手机和树莓派拉进同一个虚拟局域网不需要公网IP安全性也好。我目前用的是Tailscale方案。在树莓派上装Tailscale客户端登录账号手机也装Tailscale这样手机在任何网络下都能通过Tailscale分配的IP访问树莓派。配置简单加密传输而且不需要在路由器上开任何端口。唯一的小问题是Tailscale免费版设备数量有限制个人用完全够。注意无论用哪种外网访问方式Home Assistant的认证一定要开启双因素认证密码要强。我见过有人图省事用admin/admin结果被扫到之后家里灯被远程乱开虽然损失不大但挺吓人的。5. 稳定性优化与常见问题排查5.1 让树莓派稳定运行半年的几个关键设置第一禁用不必要的服务。树莓派OS Lite默认开了一些用不到的服务比如avahi-daemon、triggerhappy、蓝牙如果你不用的话。用systemctl disable关掉能省一点内存和CPU。第二设置日志轮转。Docker容器日志默认不限制大小跑几个月能把磁盘写满。在/etc/docker/daemon.json里加{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }这样每个容器最多占30MB日志不会失控。第三加一个看门狗。树莓派偶尔会因为电源波动或者SD卡IO错误导致系统无响应。我装了一个简单的脚本每分钟检查关键服务是否在跑如果Home Assistant容器挂了就自动重启。更彻底的做法是用硬件看门狗树莓派自带bcm2835_wdt模块启用后如果系统完全死机硬件会自动重启。第四温度管理。树莓派4B满载时温度能到70度以上长期高温会降频甚至影响寿命。加一个散热片和风扇是最基本的如果装在封闭盒子里一定要留通风孔。我用的金属外壳自带散热柱再加一个5V小风扇接在GPIO的5V和GND上温度能压在50度以下。5.2 常见问题速查表现象可能原因排查方法解决方式SSH连不上IP变了或SSH服务没开路由器后台看设备列表绑定静态IPImager里确认开启SSHDocker容器启动失败镜像架构不对或端口冲突docker logs 容器名确认拉取arm64镜像检查端口占用Home Assistant打不开容器还在启动或配置错误docker ps看状态看日志等待启动完成检查configuration.yaml语法传感器数据不更新MQTT连接断开或脚本挂了手动运行脚本看输出检查Mosquitto日志加脚本自动重启系统频繁重启电源功率不足测电压看dmesg日志换5V 3A以上优质电源SD卡变只读卡寿命耗尽dmesg看IO错误换新卡迁移到SSD启动Zigbee设备掉线2.4G干扰或协调器供电不足看ZHA日志换信道USB延长线远离树莓派换Zigbee信道自动化不触发条件不满足或实体ID写错开发者工具里手动触发测试检查实体状态用模板调试条件这个表里的问题我基本都遇到过。最坑的一次是Zigbee设备频繁掉线排查了两天才发现是USB3.0接口对2.4G的干扰。树莓派4B的USB3.0接口在读写SSD时会产生2.4G频段噪声Zigbee协调器插在旁边的USB口上就会被干扰。解决办法很简单用一根USB延长线把协调器引到离树莓派半米远的地方问题立刻消失。5.3 备份策略别等丢了才后悔智能家居服务器最值钱的是配置数据硬件坏了可以再买配置丢了重新配一遍能让人崩溃。我的备份策略分三层第一层Home Assistant自带的快照功能。在设置里可以创建完整快照包含配置、数据库、插件。我设置每周自动快照一次保留最近4个。快照文件存在外置SSD上。第二层Docker卷备份。用restic或者rsync把/opt/smart-home整个目录同步到另一台设备或者NAS上。我家里有一台旧笔记本跑着Linux每天凌晨自动从树莓派拉一次备份。第三层关键配置文件用Git管理。configuration.yaml、automations.yaml、docker-compose.yml这些文本文件放在一个私有Git仓库里每次修改后commit。这样不仅能备份还能看到每次改了什么出问题能快速回滚。提示备份文件一定要测试恢复流程。我见过有人备份了三年真出事的时候发现备份脚本早就静默失败了备份文件全是空的。每隔几个月手动恢复一次到测试环境确认备份可用。6. 后续扩展思路这套树莓派智能家居服务器跑稳之后能扩展的方向很多。我目前正在折腾的是接入摄像头做简单的人形检测用树莓派5加一个OV5647摄像头模块跑一个轻量级的YOLO模型只在检测到人的时候才录像并推送通知避免整天录一堆无用画面。树莓派5的PCIe接口还能接M.2 HAT扩展NVMe固态硬盘彻底解决存储瓶颈。另一个方向是语音控制。Home Assistant支持本地语音助手配合麦克风阵列和扬声器可以做到不依赖云端的关键词唤醒和语音指令识别。虽然中文识别效果还不如商业方案但隐私性是无敌的所有语音数据都在本地处理。如果你做毕设或者课程设计这套系统可以拆成多个子课题传感器数据采集、MQTT通信协议、自动化规则引擎、Web可视化界面、移动端控制。每个部分都能单独写一章合起来又是一个完整的智能家居控制系统设计。我帮学弟调过类似的毕设评委最看重的就是系统能不能实际跑起来而不是纯仿真。树莓派方案的好处就是你抱着实物去答辩演示几个自动化场景比放PPT有说服力得多。最后分享一个小心得别追求一次到位。我刚开始的时候想把所有设备都接进来所有自动化都写好结果折腾了两周把自己搞得很累。后来改变策略先让灯能控再加传感器再加自动化每完成一个阶段就稳定运行几天再继续。这样出问题的时候容易定位也不会因为一次改太多导致整个系统崩掉。智能家居是个长期折腾的事享受过程比追求完美更重要。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Preact Table 的 SubscribePropsWithSourceWithSelector 类型详解:原子订阅与选择器投影实战 2026/9/20 6:18:14

Preact Table 的 SubscribePropsWithSourceWithSelector 类型详解:原子订阅与选择器投影实战

Preact Table 的 SubscribePropsWithSourceWithSelector 类型详解:原子订阅与选择器投影实战 【免费下载链接】table 🤖 Headless UI for building powerful tables & datagrids for TS/JS - React-Table, Vue-Table, Solid-Table, Svelte-Table 项…

阅读更多 →
银行信贷系统测试方案:准入判定、接口性能与安全验证 2026/9/20 6:18:14

银行信贷系统测试方案:准入判定、接口性能与安全验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
2025年AI降本增效五大核心技术方案解析 2026/9/20 6:18:14

2025年AI降本增效五大核心技术方案解析

1. 项目背景与核心价值在AI技术快速渗透各行各业的当下,如何有效降低AI应用成本已成为企业决策者的核心关切。根据Gartner最新调研数据显示,2024年企业AI项目平均超支率达47%,其中模型训练成本占比高达63%。这促使市场对"降AI率"&a…

阅读更多 →
大语言模型微调技术:方法选型与工业实践指南 2026/9/20 6:18:14

大语言模型微调技术:方法选型与工业实践指南

1. 大语言模型微调技术全景概览大语言模型微调(Fine-tuning)作为迁移学习的关键环节,已经成为AI工程领域的标配技能。不同于直接使用预训练模型的零样本学习,微调通过领域数据对模型参数进行针对性调整,使其在特定任务…

阅读更多 →
ESP32-P4 USB MSC实战:基于TinyUSB将SD卡模拟为U盘 2026/9/20 6:18:14

ESP32-P4 USB MSC实战:基于TinyUSB将SD卡模拟为U盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
TensorRT部署实战:YOLO转ONNX到推理加速的五大避坑指南 2026/9/20 6:15:14

TensorRT部署实战:YOLO转ONNX到推理加速的五大避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞