使用 StayedCSS 在 Next.js 中应用 CSS
Next.js 应用路由器中的样式问题
自 Next.js App Router 发布以来,开发人员已经采用了将服务器和客户端组件分开的范式。虽然这种范式很高效,但也带来了新的挑战。
挑战 1:支持服务器端和客户端环境
Next.js 经常使用 React 样式库,因为它基于 React。但是,这些库中的许多库都针对 CSR(客户端渲染)进行了优化,而 App Router 默认为 SSR(服务器端渲染)。这种不匹配可能会导致 SSR 和 CSR 之间的样式不一致。
挑战 2:无样式内容闪烁 (FOUC)
暗黑模式是改善用户体验的常用功能,但 SSR 通常以浅色模式渲染 HTML。客户端稍后应用暗黑模式,导致屏幕闪烁,从而影响用户体验。
我在开发过程中也曾面临过这些挑战。尽管 Next.js 功能强大,但样式问题始终困扰着我。下面是我解决这些问题的方法。
StayedCSS:Next.js 应用路由器的 CSS 库
vectordxy/stayedcss 的翻译结果:
✨ Next.js App Router 的轻量级 CSS 库,支持服务器和客户端组件。
StayedCSS:Next.js App Router 的 CSS 库
介绍
StayedCSS-测试版
StayedCSS 是一个专为 **Next.js App Router** 设计的静态 CSS 库,为服务器和客户端组件提供全面支持。它使用与基本 CSS 类似的简单语法,可实现高效的样式设置,旨在成为 Next.js App Router 的下一代 CSS 库。
StayedCSS 目前处于测试阶段,其优化和稳定性正在快速提升。它将继续发展,为您的项目提供更好的样式体验。
主要特点
入门
**安装**
npm install stayedcss # or yarn在 GitHub 上查看
为了解决这些问题,我创建了 StayedCSS。这个库支持服务器和客户端环境,提供无闪烁的暗模式并与 Next.js App Router 无缝兼容。
我希望 StayedCSS 能够帮助其他开发人员解决这些挑战,并且我很高兴与社区分享它!
1. 将样式应用于服务器组件
import { st } from "stayedcss"; const styles = st({ componentId: "components/example", container: { backgroundColor: "white", padding: "20px", }, }); export default function Example() { return (); }Hello, StayedCSS!
使用 st 函数定义样式,该函数会生成静态 CSS 文件和唯一类名。每个样式对象都链接到一个 componentId,确保轻松区分。服务器组件现在可以利用类似 CSS-in-JS 的语法,同时受益于针对 SSR 优化的静态 CSS。
2. 将样式应用于客户端组件
'use client' import { stClient } from "stayedcss/client"; export default function ExampleClient() { return (); } const style = stClient({ componentId: "components/example-client", container: { marginBottom: 60, }, title:{ fontSize: 27, }, });title
对于客户端组件,使用 stClient 函数定义样式。与服务器组件类似,它根据 componentId 生成静态 CSS 文件和唯一类名。服务器和客户端组件都共享相同的简单样式方法。
3. 无闪烁的暗黑模式
import { st, stDark } from "stayedcss"; export default function DarkModeExample() { return (); } const style = st({ componentId: "component/darkmode-example", container: { backgroundColor: "white", }, }); stDark({ componentId: "component/darkmode-example", container: { backgroundColor: "black", }, });Hello world!
StayedCSS 通过使用 cookie 来解决 SSR 中的 FOUC 问题,从而应用暗黑模式而不会出现延迟或闪烁。使用匹配的 componentId 定义明暗模式样式,以实现平滑过渡。
4. 简单方法实现响应式页面
const style = st({ componentId: "components/docs/media-query", container: { display: "flex", justifyContent: "center", padding: "20px", backgroundColor: "lightgray", }, "@mobile": { container: { backgroundColor: "pink", padding: "10px", }, }, "@tablet": { container: { backgroundColor: "lightblue", padding: "15px", }, }, "@desktop": { container: { backgroundColor: "lightgreen", width: "50%", }, }, });
StayedCSS 使用“mobile”、“tablet”和“desktop”等关键字简化媒体查询。直接在样式对象中声明响应式样式,实现简洁且自适应的设计,适用于各种屏幕尺寸。
5. 使用高级 CSS 进一步完善
const style = st({ componentId: "components/docs/pseudo-classes", container: { backgroundColor: "black", ":hover": { backgroundColor: "green", }, }, });
支持的功能包括伪类 `:hover`、伪元素 `::before` 和组合器 `~`。编写熟悉的 CSS 语法,StayedCSS 会将其优化为静态文件,从而实现跨服务器和客户端组件的高性能样式。
有关详细示例,请访问文档页面。
StayedCSS 旨在简化 Next.js App Router 环境中的样式设置。从服务器-客户端兼容性到高级 CSS 功能,它旨在提供更好的样式设置体验。立即试用并分享您的想法 — 我很想听听您的反馈!🚀