CloudflareLogo
@cloudflare/kumo
import { CloudflareLogo } from "@cloudflare/kumo";

export function CloudflareLogoBasicDemo() {
  return <CloudflareLogo className="w-72" />;
}

安装

批量导入

import {
  CloudflareLogo,
  PoweredByCloudflare,
  generateCloudflareLogoSvg,
} from "@cloudflare/kumo";

细粒度导入

import {
  CloudflareLogo,
  PoweredByCloudflare,
  generateCloudflareLogoSvg,
} from "@cloudflare/kumo/components/cloudflare-logo";

用法

import { CloudflareLogo } from "@cloudflare/kumo";

export default function Example() {
  return <CloudflareLogo className="w-36" />;
}

示例

仅图标

使用 variant=“glyph” 可仅显示云朵图标,不显示文字标识。

import { CloudflareLogo } from "@cloudflare/kumo";

export function CloudflareLogoGlyphDemo() {
  return <CloudflareLogo variant="glyph" className="w-24" />;
}

颜色变体

徽标支持三种配色方案:品牌色、黑色和白色。

import { CloudflareLogo } from "@cloudflare/kumo";

export function CloudflareLogoColorVariantsDemo() {
  return (
    <div className="flex flex-wrap items-center gap-8">
      <CloudflareLogo className="w-28" color="color" />
      <div className="rounded-lg bg-white p-4">
        <CloudflareLogo className="w-28" color="black" />
      </div>
      <div className="rounded-lg bg-black p-4">
        <CloudflareLogo className="w-28" color="white" />
      </div>
    </div>
  );
}

图标颜色变体

import { CloudflareLogo } from "@cloudflare/kumo";

export function CloudflareLogoGlyphVariantsDemo() {
  return (
    <div className="flex flex-wrap items-center gap-8">
      <CloudflareLogo variant="glyph" className="w-12" color="color" />
      <div className="rounded-lg bg-white p-4">
        <CloudflareLogo variant="glyph" className="w-12" color="black" />
      </div>
      <div className="rounded-lg bg-black p-4">
        <CloudflareLogo variant="glyph" className="w-12" color="white" />
      </div>
    </div>
  );
}

尺寸调整

使用 CSS 宽度类调整徽标尺寸,高度会自动调整以保持宽高比。

import { CloudflareLogo } from "@cloudflare/kumo";

export function CloudflareLogoSizesDemo() {
  return (
    <div className="flex flex-wrap items-end gap-6">
      <CloudflareLogo className="w-20" />
      <CloudflareLogo className="w-28" />
      <CloudflareLogo className="w-44" />
    </div>
  );
}

品牌资源菜单

结合 DropdownMenu 可创建品牌资源菜单。使用 generateCloudflareLogoSvg() 可 获取可直接复制粘贴的 SVG 标记。

Click to open the brand assets menu
import { useEffect, useRef, useState } from "react";
import { CloudflareLogo, DropdownMenu, generateCloudflareLogoSvg } from "@cloudflare/kumo";
import { CloudIcon, CodeIcon, DownloadSimpleIcon, ArrowSquareOutIcon } from "@phosphor-icons/react";

export function CloudflareLogoCopyDemo() {
  const [copied, setCopied] = useState<string | null>(null);
  const resetTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
  const copyAttemptRef = useRef(0);

  useEffect(() => {
    return () => {
      copyAttemptRef.current += 1;
      if (resetTimeoutRef.current !== null) {
        clearTimeout(resetTimeoutRef.current);
        resetTimeoutRef.current = null;
      }
    };
  }, []);

  const copyToClipboard = async (text: string, label: string) => {
    const attempt = ++copyAttemptRef.current;
    if (resetTimeoutRef.current !== null) {
      clearTimeout(resetTimeoutRef.current);
      resetTimeoutRef.current = null;
    }

    try {
      await navigator.clipboard.writeText(text);
      if (copyAttemptRef.current !== attempt) return;

      setCopied(label);
      resetTimeoutRef.current = setTimeout(() => {
        if (copyAttemptRef.current !== attempt) return;
        setCopied(null);
        resetTimeoutRef.current = null;
      }, COPIED_FEEDBACK_MS);
    } catch (error) {
      if (copyAttemptRef.current !== attempt) return;

      setCopied(null);
      console.error("Failed to copy logo SVG:", error);
    }
  };

  return (
    <div className="flex items-center gap-4">
      <DropdownMenu>
        <DropdownMenu.Trigger>
          <button
            type="button"
            className="flex items-center gap-2 rounded-lg bg-black px-4 py-3 text-white transition-opacity hover:opacity-80"
          >
            <CloudflareLogo variant="glyph" color="white" className="w-8" />
            <span className="font-medium">Logo</span>
          </button>
        </DropdownMenu.Trigger>
        <DropdownMenu.Content>
          <DropdownMenu.Item
            icon={CloudIcon}
            onClick={() =>
              copyToClipboard(
                generateCloudflareLogoSvg({ variant: "glyph" }),
                "glyph",
              )
            }
          >
            {copied === "glyph" ? "Copied!" : "Copy logo as SVG"}
          </DropdownMenu.Item>
          <DropdownMenu.Item
            icon={CodeIcon}
            onClick={() =>
              copyToClipboard(
                generateCloudflareLogoSvg({ variant: "full" }),
                "full",
              )
            }
          >
            {copied === "full" ? "Copied!" : "Copy full logo as SVG"}
          </DropdownMenu.Item>
          <DropdownMenu.Item
            icon={DownloadSimpleIcon}
            onClick={() =>
              window.open(
                "https://www.cloudflare.com/press-kit/",
                "_blank",
                "noopener",
              )
            }
          >
            Download brand assets
          </DropdownMenu.Item>
          <DropdownMenu.Separator />
          <DropdownMenu.Item
            icon={ArrowSquareOutIcon}
            onClick={() =>
              window.open(
                "https://www.cloudflare.com/brand-assets/",
                "_blank",
                "noopener",
              )
            }
          >
            Visit brand guidelines
          </DropdownMenu.Item>
        </DropdownMenu.Content>
      </DropdownMenu>

      <span className="text-sm text-kumo-subtle">
        Click to open the brand assets menu
      </span>
    </div>
  );
}

PoweredByCloudflare

一个预构建的「Powered by Cloudflare」徽章组件,适用于页脚和署名场景。

基本用法

import { PoweredByCloudflare } from "@cloudflare/kumo";

// =============================================================================
// PoweredByCloudflare Demos
// =============================================================================

export function PoweredByCloudflareBasicDemo() {
  return <PoweredByCloudflare />;
}

颜色变体

import { PoweredByCloudflare } from "@cloudflare/kumo";

export function PoweredByCloudflareVariantsDemo() {
  return (
    <div className="flex flex-wrap items-center gap-4">
      <PoweredByCloudflare />
      <PoweredByCloudflare color="black" />
      <div className="rounded-lg bg-black p-3">
        <PoweredByCloudflare color="white" />
      </div>
    </div>
  );
}
import { PoweredByCloudflare } from "@cloudflare/kumo";

export function PoweredByCloudflareFooterDemo() {
  return (
    <footer className="flex w-full items-center justify-between rounded-lg border border-kumo-hairline bg-kumo-elevated px-6 py-4">
      <span className="text-sm text-kumo-subtle">
        &copy; 2026 Your Company. All rights reserved.
      </span>
      <PoweredByCloudflare />
    </footer>
  );
}

SVG 生成

使用 generateCloudflareLogoSvg() 可获取可直接复制粘贴的 SVG 标记,适用于非 React 环境。

import { generateCloudflareLogoSvg } from "@cloudflare/kumo";

// 生成图标 SVG(仅云朵)
const glyphSvg = generateCloudflareLogoSvg({ variant: "glyph" });

// 生成完整徽标 SVG
const fullSvg = generateCloudflareLogoSvg({ variant: "full" });

// 生成黑色徽标
const blackSvg = generateCloudflareLogoSvg({ color: "black" });

// 复制到剪贴板
await navigator.clipboard.writeText(
  generateCloudflareLogoSvg({ variant: "glyph", color: "color" }),
);

API 参考

CloudflareLogo 继承自 SVGSVGElement,接受所有标准 SVG 属性。

属性类型默认值说明
variant”glyph” | “full""full”徽标变体。glyph 仅显示云朵图标,full 包含文字标识。
color”color” | “black” | “white""color”配色方案。color 使用品牌色,black 和 white 为纯色。
classNamestring-用于控制尺寸的 CSS 类 (如 w-36),高度会自动调整。

PoweredByCloudflare

继承自 HTMLAnchorElement,接受所有标准锚点属性。

属性类型默认值说明
color”color” | “black” | “white""color”徽标与文字的配色方案。
hrefstring”https://www.cloudflare.com”链接目标,默认在新标签页中打开。