Button Viền Gradient
Thành phần nút này có đường viền chuyển màu xoay đẹp mắt bằng cách kết hợp CSS `-webkit-mask-composite` và chuyển màu động.
Xem trước
Nút có nền trong suốt và chỉ có đường viền phát sáng theo mức độ chuyển màu. Triển khai CSS thuần túy không yêu cầu JavaScript.
Trường hợp sử dụng và tính năng
-
Thiết kế sạch: Nền hoàn toàn trong suốt. Nhìn đơn giản mà chỉ có sự chuyển màu của đường viền là nổi bật và không ảnh hưởng đến nội dung.
-
Thích hợp cho các biểu tượng, thanh công cụ và nút phát sáng: Thích hợp cho các nút điều khiển được đặt trên nền tối, chẳng hạn như bản đồ rạp hát.
-
Không cần JavaScript: Đạt được chỉ với
animationvàmask-composite. Tác động hiệu suất tối thiểu. -
Dễ dàng mở rộng các biến thể: Bạn có thể dễ dàng tạo các nút với các chủ đề khác nhau chỉ bằng cách thay đổi màu của
linear-gradient.
Điểm thiết kế và UX
-
Cách
mask-composite: excludehoạt động**: Bằng cách đặtpadding: 2pxtrên phần tử giả::beforevà che dấu ngược lại hộp nội dung trong khu vực đó, chỉ có thể hiển thị đường viền. -
Hướng mắt bằng hoạt ảnh: Chuyển màu xoay trên đường viền để thu hút mắt một cách tự nhiên vào các nút quan trọng.
-
Tăng tỷ lệ khi di chuột: Thể hiện dự đoán về việc nhấp chuột bằng một thay đổi tinh tế về kích thước
transform: scale(1.05).
Cách tùy chỉnh
Bạn có thể tạo các biến thể bằng cách thay đổi màu của linear-gradient:
/* サンセット */
.gb-btn::before {
background: linear-gradient(45deg, #f97316, #ef4444, #f59e0b);
}
/* オーlục lam */
.gb-btn::before {
background: linear-gradient(45deg, #06b6d4, #3b82f6, #8b5cf6);
}
Để thay đổi độ rộng của đường viền, hãy thay đổi giá trị của padding:
/* 幅を広く (3px) */
.gb-btn::before { padding: 3px; }
.gb-btn::after { inset: 3px; }
Mã triển khai
<button class="gb-btn">Primary</button>
<button class="gb-btn gb-btn-success">Success</button>
<button class="gb-btn gb-btn-warning">Warning</button>
<style>
.gb-btn {
position: relative;
background: transparent;
border: none;
padding: 14px 36px;
font-size: 1rem;
font-weight: 600;
letter-spacing: 0.08em;
cursor: pointer;
border-radius: 8px;
color: white;
z-index: 1;
transition: transform 0.2s ease, box-shadow 0.3s ease;
}
.gb-btn::before {
content: '';
position: absolute;
inset: 0;
padding: 2px;
border-radius: 8px;
background: linear-gradient(45deg, #f093fb, #f5576c, #4facfe, #00f2fe);
background-size: 400% 400%;
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
animation: gb-rotate 3s ease infinite;
}
.gb-btn::after {
content: '';
position: absolute;
inset: 2px;
border-radius: 6px;
background: rgba(17,24,39,0.9);
z-index: -1;
}
.gb-btn:hover { transform: scale(1.05); }
.gb-btn-success::before { background: linear-gradient(45deg, #43e97b, #38f9d7); }
.gb-btn-warning::before { background: linear-gradient(45deg, #f7971e, #ffd200); }
@keyframes gb-rotate {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
</style> Trạng thái tương thích với trình duyệt
| Trình duyệt | Trạng thái tương thích |
|--------|-------|
| Chrome 80+ | ✅ Hoàn toàn tương thích |
| Firefox 99+ | ✅ Hoàn toàn tương thích |
| Safari 15.4+ | ✅ Tương thích |
| Cạnh 80+ | ✅ Hoàn toàn tương thích |
Lưu ý: Safari cũ hơn yêu cầu
-webkit-mask-composite: xor. Để dự phòng, bạn có thể sử dụngborder: 2px solidtrong các trường hợp có thể chấp nhận được.