商店现已上线

我们打造用于网站、AI 智能体和 LLM 训练的 Workstation AI 机器——在线配置并购买。

获取同行价格
AI 产品
AI 实验室OpenAI 智能体Claude 代理Grok BotWorkstation AI 原生 CRM营销所有产品
AI 解决方案
应用型 AIAI 智能体生成式 AIAI 自动化AI 技能提升中小企业 AI 套餐企业 AI 实验室AI 工作站NVIDIA 硬件与软件NVIDIA 加速计算私有 AIGPU 集群边缘 AI行业 AI
AI 服务
平台现代化数字工程数据基础与 AI自主运营AI 咨询DevOps 自动化网络安全软件开发智能体构建MLOps 搭建GPU 租赁
关于我们
公司我们的故事合作伙伴客户案例
AI 数据中心
AI 洞察Jev 系列基准测试实验室模型选择
技术说明
文档
Linux 操作系统UbuntuRed Hat Enterprise LinuxSUSE LinuxAlpine LinuxDebian, Rocky & AlmaLinux
AI 云平台AWS & Amazon BedrockGoogle Cloud & Vertex AIMicrosoft Azure & AI FoundryGPU 云与算力市场
私有 AI 数据中心面向律师事务所面向会计师事务所本地部署平台全面安全的云
工具Ring PromoterJobshout
新闻
博客
联系我们登录

面向现代企业的 AI 工作站、AI 多智能体软件、GPU 基础设施和智能代理解决方案。

联系我们

AI 解决方案

应用型 AIAI 智能体生成式 AIAI 自动化AI 技能提升中小企业 AI 套餐企业 AI 实验室行业 AI

产品

所有产品Workstation AI native CRM 与 ERP营销OpenAI 智能体Ring PromoterJobshout

公司

关于我们公司AI 数据中心为什么选择Workstation合作伙伴客户案例定价联系TenthMatrix

资源

AI 洞察技术说明文档Linux 操作系统AI 云平台私有 AI 数据中心博客搜索网站地图
英国办公室
77-79 Marlowes, Hemel Hempstead HP1 1LF路线指引 — 从 M25 外环伦敦 20 号出口驶出公司编号: 11641870周一至周五:上午 9:00 - 下午 6:00 GMT
+44 7515 356 146
比利时办公室
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683周一至周五:上午 9:00 - 下午 6:00 CET
+32 492 45 67 46
印度办公室
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI。保留所有权利。

隐私数据删除Cookie服务条款网站地图

NVIDIA, the NVIDIA logo, RTX, RTX PRO, Blackwell, CUDA, NVLink, MGX, Omniverse, Spectrum-X, Quantum, BlueField, DGX and HGX are trademarks and/or registered trademarks of NVIDIA Corporation in the US and other countries. AMD, the AMD Arrow logo, EPYC, Instinct, Ryzen and Threadripper are trademarks of Advanced Micro Devices, Inc. Dell and PowerEdge are trademarks of Dell Inc. or its subsidiaries. Intel and Xeon are trademarks of Intel Corporation or its subsidiaries. AMAX, AceleMax and LiquidMax are trademarks of AMAX Engineering Corporation. All other product names, logos and brands are the property of their respective owners. We use them only to identify the products we describe, supply or support; their use does not mean their owners endorse us.

Loading blog...

首页 / 博客
TechAIOpsapi

使用 React 和现代 CSS 构建令人惊叹的 Web 界面

React 和现代 CSS

Balinder Walia2025年5月19日5 min read
38

网络的发展已经远远超出了静态页面的范围。用户期望界面具有令人惊叹的视觉效果、光滑流畅且易于每个人使用。 React 与现代 CSS 技术相结合,为开发人员提供了实现这些期望的工具。本指南涵盖了从基础布局系统到高级动画和设计系统架构的所有内容。

现代 CSS 布局:网格和 Flexbox

React 组件架构应用程序外壳标头 — 导航、徽标、搜索、用户菜单侧边栏导航链接过滤器类别快速操作主要内容卡卡表单组件提交卡状态和状态数据流Props ↓数据从父组件沿着流向子组件状态提升 ↑事件和事件回调从子向上流动到父上下文跨树共享

CSS 网格和 Flexbox 是现代布局的两大支柱。了解何时使用每种方法对于构建响应式界面至关重要。用于二维布局的

CSS 网格

网格 擅长页面级布局以及任何需要同时控制行和列的设计:

.dashboard {
  display: grid;
  grid-template-columns: 250px 1fr 300px;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "sidebar header  aside"
    "sidebar main    aside"
    "sidebar footer  aside";
  gap: 1rem;
  min-height: 100vh;
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.aside   { grid-area: aside; }
.footer  { grid-area: footer; }

用于一维流的 Flexbox

Flexbox 非常适合组件级布局 — 导航栏、卡行、表单布局以及在单个流中流动的任何内容方向:

.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 2rem;
}

.nav-links {
  display: flex;
  gap: 1.5rem;
  list-style: none;
}

容器查询

容器查询是基于组件的设计的游戏规则改变者。与响应视口宽度的媒体查询不同,容器查询响应组件容器的大小。这意味着卡片组件无论出现在狭窄的侧边栏还是宽阔的主要内容区域中都可以调整其布局:

.card-container {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) {
  .card {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 1rem;
  }
}

@container card (max-width: 399px) {
  .card {
    display: flex;
    flex-direction: column;
  }
}

CSS 自定义属性和设计令牌

CSS 自定义属性(变量)是可维护设计系统的基础。将您的设计令牌定义为:root元素上的自定义属性,并在整个样式中引用它们:

:root {
  /* Colors */
  --color-primary: #3b82f6;
  --color-primary-dark: #1d4ed8;
  --color-surface: #ffffff;
  --color-surface-elevated: #f8fafc;
  --color-text: #0f172a;
  --color-text-muted: #64748b;

  /* Spacing */
  --space-xs: 0.25rem;
  --space-sm: 0.5rem;
  --space-md: 1rem;
  --space-lg: 1.5rem;
  --space-xl: 2rem;

  /* Typography */
  --font-sans: 'Inter', system-ui, sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.25rem;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
  --shadow-md: 0 4px 6px rgb(0 0 0 / 0.07);
  --shadow-lg: 0 10px 15px rgb(0 0 0 / 0.1);

  /* Borders */
  --radius-sm: 0.375rem;
  --radius-md: 0.5rem;
  --radius-lg: 0.75rem;
  --radius-full: 9999px;
}

设计令牌可确保整个应用程序的一致性,并使全局样式更改变得微不足道 - 更新一个变量,每个使用它的组件都会自动更新。 React 中的

造型方法

React 提供多种造型方法。每种方法都在开发人员经验、性能和可维护性方面进行权衡。

CSS 模块

CSS 模块通过在构建时生成唯一的类名称,将样式范围限定到各个组件。它们提供了简单性和安全性的最佳平衡:

/* Button.module.css */
.button {
  padding: var(--space-sm) var(--space-md);
  border-radius: var(--radius-md);
  font-weight: 600;
  cursor: pointer;
  transition: all 0.2s ease;
}

.primary {
  background: var(--color-primary);
  color: white;
}

.primary:hover {
  background: var(--color-primary-dark);
  box-shadow: var(--shadow-md);
}
import styles from './Button.module.css';

function Button({ variant = 'primary', children, ...props }) {
  return (
    <button
      className={`${styles.button} ${styles[variant]}`}
      {...props}
    >
      {children}
    </button>
  );
}

Tailwind CSS

Tailwind CSS 提供实用程序类,让您可以直接在 JSX 中设置组件样式。 它消除了 CSS 和 JavaScript 文件之间的上下文切换,并通过其配置强制实施一致的设计系统:

function Card({ title, description, image }) {
  return (
    <div className="rounded-lg shadow-md overflow-hidden
                    bg-white hover:shadow-lg transition-shadow">
      <img src={image} alt={title}
           className="w-full h-48 object-cover" />
      <div className="p-4">
        <h3 className="text-lg font-semibold text-gray-900">
          {title}
        </h3>
        <p className="mt-2 text-gray-600 text-sm">
          {description}
        </p>
      </div>
    </div>
  );
}

CSS-in-JS(样式组件、情感)

CSS-in-JS 库允许您直接在 JavaScript 中编写 CSS,并具有对 props 和状态的完全访问权限。虽然功能强大,但它们增加了运行时开销,并且越来越不受服务器渲染应用程序的青睐:

import styled from 'styled-components';

const Badge = styled.span`
  display: inline-flex;
  align-items: center;
  padding: 0.25rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 600;
  background: ${props => props.variant === 'success'
    ? '#dcfce7' : '#dbeafe'};
  color: ${props => props.variant === 'success'
    ? '#166534' : '#1e40af'};
`;

对于新项目,建议使用 CSS 模块或 Tailwind CSS,而不是 CSS-in-JS,因为它们具有更好的性能和服务器渲染兼容性。

使用 Storybook 构建设计系统

现代 UI 技术堆栈设计系统令牌、排版、调色板、间距比例、品牌指南组件库按钮、卡片、模态、表单、表格 — 记录在 Storybook 中主题引擎CSS 自定义属性、暗/亮模式、动态主题响应式布局网格、Flexbox、容器查询、带clamp()的流体排版辅助功能层ARIA 角色、键盘导航、焦点管理、对比度54321每一层都建立在下面一层之上 — 可访问性是基础更高抽象 →

Storybook 为开发和记录 UI 组件提供了一个隔离的环境。它既可以作为开发工具,也可以作为生活风格指南:

// Button.stories.jsx
import { Button } from './Button';

export default {
  title: 'Components/Button',
  component: Button,
  argTypes: {
    variant: {
      options: ['primary', 'secondary', 'ghost'],
      control: { type: 'select' },
    },
    size: {
      options: ['sm', 'md', 'lg'],
      control: { type: 'select' },
    },
  },
};

export const Primary = {
  args: { variant: 'primary', children: 'Click me' },
};

export const Secondary = {
  args: { variant: 'secondary', children: 'Click me' },
};

Storybook 使设计人员和开发人员能够单独协作处理组件,确保每个组件在集成到应用程序之前正常工作。

微交互和动画

贴心的动画引导用户、提供反馈并营造优雅的感觉。 Framer Motion 是 React 的领先动​​画库。

带 Framer Motion 的基本动画

import { motion } from 'framer-motion';

function FadeInCard({ children }) {
  return (
    <motion.div
      initial={{ opacity: 0, y: 20 }}
      animate={{ opacity: 1, y: 0 }}
      transition={{ duration: 0.4, ease: 'easeOut' }}
    >
      {children}
    </motion.div>
  );
}

交错列表动画

import { motion } from 'framer-motion';

const container = {
  hidden: { opacity: 0 },
  show: {
    opacity: 1,
    transition: { staggerChildren: 0.1 },
  },
};

const item = {
  hidden: { opacity: 0, x: -20 },
  show: { opacity: 1, x: 0 },
};

function AnimatedList({ items }) {
  return (
    <motion.ul variants={container}
      initial="hidden" animate="show">
      {items.map(i => (
        <motion.li key={i.id} variants={item}>
          {i.label}
        </motion.li>
      ))}
    </motion.ul>
  );
}

仅 CSS 微交互

并非每个动画都需要库。 CSS 转换和转换可有效处理许多常见交互:

.interactive-card {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.interactive-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
}

.button-press:active {
  transform: scale(0.97);
}

可访问组件模式

可访问性不是可选的 — 它是专业 Web 界面的要求。遵循这些模式可确保您的组件适合所有人。

焦点管理

当模式打开时,将焦点移至模式。当它们关闭时,将焦点返回到触发元素。使用inert属性可防止与后台内容交互:​​

function Modal({ isOpen, onClose, children }) {
  const closeRef = useRef();
  const previousFocus = useRef();

  useEffect(() => {
    if (isOpen) {
      previousFocus.current = document.activeElement;
      closeRef.current?.focus();
    } else {
      previousFocus.current?.focus();
    }
  }, [isOpen]);

  if (!isOpen) return null;

  return (
    <div role="dialog" aria-modal="true">
      <button ref={closeRef} onClick={onClose}
        aria-label="Close dialog">X</button>
      {children}
    </div>
  );
}

键盘导航

所有交互元素都必须可通过键盘访问。下拉菜单、选项卡和轮播等自定义组件应遵循键盘交互的 WAI-ARIA 设计模式。

颜色对比度和视觉设计

确保文本符合 WCAG 2.1 对比度:普通文本为 4.5:1,大文本为 3:1。不要仅依靠颜色来传达信息——使用图标、文本标签或图案作为补充指示符。

响应式设计策略

现代响应式设计超越了断点。使用流畅的设计方法,可以平滑地适应所有屏幕尺寸。

流体排版

使用clamp()创建可在最小和最大尺寸之间平滑缩放的排版:

h1 {
  font-size: clamp(1.75rem, 4vw, 3rem);
  line-height: 1.2;
}

p {
  font-size: clamp(0.9rem, 1.5vw, 1.125rem);
  line-height: 1.6;
}

响应式间距

对间距和布局应用相同的流体原理:

.section {
  padding: clamp(2rem, 5vw, 4rem) clamp(1rem, 3vw, 2rem);
}

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: clamp(1rem, 2vw, 2rem);
}

深色模式实施

暗模式需要的不仅仅是反转颜色。设计一个单独的调色板,以保持适当的对比度和视觉层次结构:

:root {
  --bg-primary: #ffffff;
  --bg-secondary: #f1f5f9;
  --text-primary: #0f172a;
  --text-secondary: #475569;
  --border-color: #e2e8f0;
}

[data-theme='dark'] {
  --bg-primary: #0f172a;
  --bg-secondary: #1e293b;
  --text-primary: #f1f5f9;
  --text-secondary: #94a3b8;
  --border-color: #334155;
}

在 React 中,使用上下文提供程序管理主题并将用户首选项保留到 localStorage:

function ThemeProvider({ children }) {
  const [theme, setTheme] = useState(() => {
    if (typeof window === 'undefined') return 'light';
    return localStorage.getItem('theme') ||
      (window.matchMedia('(prefers-color-scheme: dark)').matches
        ? 'dark' : 'light');
  });

  useEffect(() => {
    document.documentElement.setAttribute('data-theme', theme);
    localStorage.setItem('theme', theme);
  }, [theme]);

  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

性能优化

漂亮的界面还必须快速。应用这些 CSS 性能技术来保持 UI 的响应能力。

CSS Containment

contain属性告诉浏览器元素的内容独立于页面的其余部分,从而实现渲染优化:

.card {
  contain: layout style paint;
}

.sidebar {
  contain: layout size style;
}

will-change 属性

使用will-change向浏览器提示即将推出的动画。谨慎使用 — 过度使用会增加内存消耗:

.animated-element {
  will-change: transform, opacity;
}

/* Remove after animation completes */
.animated-element.done {
  will-change: auto;
}

内容可见性

对于包含多个部分的长页面,content-visibility: auto允许浏览器完全跳过渲染离屏内容:

.blog-post-section {
  content-visibility: auto;
  contain-intrinsic-size: 0 500px;
}

结论

构建令人惊叹的 Web 界面是一门融合视觉设计和技术的艺术技能和对用户的同理心。现代 CSS 提供了强大的布局系统、流畅的设计技术和性能优化。 React 的组件模型可以轻松地将样式、行为和可访问性封装到可重用的构建块中。通过将这些技术与深思熟虑的动画、强大的可访问性实践和结构良好的设计系统相结合,您可以创建不仅美观而且快速、可访问和可维护的界面。从设计令牌和布局基元的坚实基础开始,交互性和动画层,跨设备和辅助技术进行测试,并根据真实用户反馈进行迭代。