Loading...
Loading...
Compare original and translation side by side
Skill by ara.so — Daily 2026 Skills collection.
border-beam@property由ara.so提供的Skill — 2026每日技能合集。
border-beam@propertynpm install border-beamnpm install border-beamimport { BorderBeam } from 'border-beam';
function App() {
return (
<BorderBeam>
<div style={{ padding: 32, borderRadius: 16, background: '#1d1d1d' }}>
Your content here
</div>
</BorderBeam>
);
}BorderBeamborder-radiuspointer-events: noneimport { BorderBeam } from 'border-beam';
function App() {
return (
<BorderBeam>
<div style={{ padding: 32, borderRadius: 16, background: '#1d1d1d' }}>
你的内容放在这里
</div>
</BorderBeam>
);
}BorderBeamborder-radiuspointer-events: none// Full border glow (default) — for cards, panels
<BorderBeam size="md">
<Card />
</BorderBeam>
// Compact glow — for small elements like icon buttons
<BorderBeam size="sm">
<IconButton />
</BorderBeam>
// Bottom-only traveling glow — ideal for search bars, inputs
<BorderBeam size="line">
<SearchBar />
</BorderBeam>// 完整边框光晕(默认)——适用于卡片、面板
<BorderBeam size="md">
<Card />
</BorderBeam>
// 紧凑光晕——适用于图标按钮等小型元素
<BorderBeam size="sm">
<IconButton />
</BorderBeam>
// 仅底部移动光晕——非常适合搜索栏、输入框
<BorderBeam size="line">
<SearchBar />
</BorderBeam><BorderBeam colorVariant="colorful" /> {/* Rainbow spectrum (default), animates hue */}
<BorderBeam colorVariant="mono" /> {/* Grayscale, no hue animation */}
<BorderBeam colorVariant="ocean" /> {/* Blue-purple tones */}
<BorderBeam colorVariant="sunset" /> {/* Orange-yellow-red tones */}mono<BorderBeam colorVariant="colorful" /> {/* 彩虹光谱(默认),动态变换色相 */}
<BorderBeam colorVariant="mono" /> {/* 灰度模式,无色相动画 */}
<BorderBeam colorVariant="ocean" /> {/* 蓝紫色调 */}
<BorderBeam colorVariant="sunset" /> {/* 橙黄红色调 */}mono<BorderBeam theme="dark" /> {/* Default — for dark backgrounds */}
<BorderBeam theme="light" /> {/* For light backgrounds */}
<BorderBeam theme="auto" /> {/* Detects system prefers-color-scheme */}<BorderBeam theme="dark" /> {/* 默认——适用于深色背景 */}
<BorderBeam theme="light" /> {/* 适用于浅色背景 */}
<BorderBeam theme="auto" /> {/* 自动检测系统的prefers-color-scheme设置 */}// strength: 0 (invisible) to 1 (full, default) — only affects beam layers
<BorderBeam strength={0.6}>
<Card />
</BorderBeam>
// brightness and saturation multipliers
<BorderBeam brightness={1.5} saturation={1.4}>
<Card />
</BorderBeam>// strength: 0(不可见)至1(完全显示,默认值)——仅影响光束层
<BorderBeam strength={0.6}>
<Card />
</BorderBeam>
// 亮度和饱和度乘数
<BorderBeam brightness={1.5} saturation={1.4}>
<Card />
</BorderBeam>import { useState } from 'react';
import { BorderBeam } from 'border-beam';
function AnimatedCard() {
const [active, setActive] = useState(true);
return (
<>
<BorderBeam
active={active}
onActivate={() => console.log('Beam faded in')}
onDeactivate={() => console.log('Beam faded out')}
>
<div style={{ padding: 32, borderRadius: 16, background: '#111' }}>
Hover-activated beam
</div>
</BorderBeam>
<button onClick={() => setActive(a => !a)}>Toggle Beam</button>
</>
);
}import { useState } from 'react';
import { BorderBeam } from 'border-beam';
function AnimatedCard() {
const [active, setActive] = useState(true);
return (
<>
<BorderBeam
active={active}
onActivate={() => console.log('光束淡入完成')}
onDeactivate={() => console.log('光束淡出完成')}
>
<div style={{ padding: 32, borderRadius: 16, background: '#111' }}>
悬停触发光束
</div>
</BorderBeam>
<button onClick={() => setActive(a => !a)}>切换光束</button>
</>
);
}<BorderBeam
duration={3.5} // Animation cycle in seconds (default: 1.96 for md, 2.4 for line)
hueRange={60} // Hue rotation range in degrees (default: 30)
staticColors={true} // Disable hue-shift entirely
>
<Card />
</BorderBeam><BorderBeam
duration={3.5} // 动画周期(秒),默认值:md尺寸为1.96,line尺寸为2.4
hueRange={60} // 色相旋转范围(度),默认值:30
staticColors={true} // 完全禁用色相偏移
>
<Card />
</BorderBeam><BorderBeam borderRadius={24}>
<div className="my-card">Content</div>
</BorderBeam><BorderBeam borderRadius={24}>
<div className="my-card">内容</div>
</BorderBeam><div>HTMLDivElement<BorderBeam
className="my-wrapper"
style={{ display: 'inline-block' }}
data-testid="beam-card"
>
<Card />
</BorderBeam><div>HTMLDivElement<BorderBeam
className="my-wrapper"
style={{ display: 'inline-block' }}
data-testid="beam-card"
>
<Card />
</BorderBeam>import { useState } from 'react';
import { BorderBeam } from 'border-beam';
function HoverCard() {
const [hovered, setHovered] = useState(false);
return (
<BorderBeam active={hovered} strength={0.85} colorVariant="ocean">
<div
onMouseEnter={() => setHovered(true)}
onMouseLeave={() => setHovered(false)}
style={{ padding: 24, borderRadius: 12, background: '#0f0f0f' }}
>
Hover me
</div>
</BorderBeam>
);
}import { useState } from 'react';
import { BorderBeam } from 'border-beam';
function HoverCard() {
const [hovered, setHovered] = useState(false);
return (
<BorderBeam active={hovered} strength={0.85} colorVariant="ocean">
<div
onMouseEnter={() => setHovered(true)}
onMouseLeave={() => setHovered(false)}
style={{ padding: 24, borderRadius: 12, background: '#0f0f0f' }}
>
悬停我
</div>
</BorderBeam>
);
}import { BorderBeam } from 'border-beam';
function SearchInput() {
return (
<BorderBeam size="line" colorVariant="sunset" theme="dark">
<input
type="text"
placeholder="Search..."
style={{
padding: '12px 16px',
borderRadius: 8,
background: '#1a1a1a',
border: '1px solid #333',
color: '#fff',
width: 320,
}}
/>
</BorderBeam>
);
}import { BorderBeam } from 'border-beam';
function SearchInput() {
return (
<BorderBeam size="line" colorVariant="sunset" theme="dark">
<input
type="text"
placeholder="搜索..."
style={{
padding: '12px 16px',
borderRadius: 8,
background: '#1a1a1a',
border: '1px solid #333',
color: '#fff',
width: 320,
}}
/>
</BorderBeam>
);
}import { BorderBeam } from 'border-beam';
function LightCard() {
return (
<BorderBeam theme="light" colorVariant="colorful" strength={0.8}>
<div style={{ padding: 32, borderRadius: 16, background: '#f5f5f5' }}>
Light mode card
</div>
</BorderBeam>
);
}import { BorderBeam } from 'border-beam';
function LightCard() {
return (
<BorderBeam theme="light" colorVariant="colorful" strength={0.8}>
<div style={{ padding: 32, borderRadius: 16, background: '#f5f5f5' }}>
浅色模式卡片
</div>
</BorderBeam>
);
}prefers-reduced-motionimport { useReducedMotion } from 'framer-motion'; // or your own hook
import { BorderBeam } from 'border-beam';
function AccessibleCard() {
const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
return (
<BorderBeam active={!reduceMotion}>
<Card />
</BorderBeam>
);
}prefers-reduced-motionimport { useReducedMotion } from 'framer-motion'; // 或自定义钩子
import { BorderBeam } from 'border-beam';
function AccessibleCard() {
const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
return (
<BorderBeam active={!reduceMotion}>
<Card />
</BorderBeam>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
| | — | Content to wrap |
| | | Size/type preset |
| | | Color palette |
| | | Background adaptation |
| | | Beam opacity 0–1, does not affect children |
| | | Animation cycle in seconds |
| | | Play/pause with fade transition |
| | auto-detected | Override border radius in px |
| | | Glow brightness multiplier |
| | | Glow saturation multiplier |
| | | Hue rotation range in degrees |
| | | Disable hue-shift animation |
| | — | Class on wrapper div |
| | — | Inline styles on wrapper div |
| | — | Called when fade-in completes |
| | — | Called when fade-out completes |
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| | — | 要包裹的内容 |
| | | 尺寸/类型预设 |
| | | 配色方案 |
| | | 背景适配模式 |
| | | 光束透明度(0–1),不影响子元素 |
| | | 动画周期(秒) |
| | | 控制播放/暂停,带淡入淡出过渡 |
| | 自动检测 | 手动指定边框圆角(像素) |
| | | 光晕亮度乘数 |
| | | 光晕饱和度乘数 |
| | | 色相旋转范围(度) |
| | | 禁用色相偏移动画 |
| | — | 包裹div的类名 |
| | — | 包裹div的内联样式 |
| | — | 淡入完成时触发的回调 |
| | — | 淡出完成时触发的回调 |
BorderBeam<div>pointer-events: none::after::before[data-beam-bloom]<div>@propertyBorderBeam<div>pointer-events: none::after::before[data-beam-bloom]<div>@propertybackgroundborder-radiusstrength0activetrueborderRadiuspointer-events: none@property'use client'backgroundborder-radiusstrength0activetrueborderRadiuspointer-events: none@property'use client'