HTML響應式設計的顏色選擇器,適配各種屏幕尺寸

顏色選擇器
響應式設計的顏色選擇器,適配各種屏幕尺寸
支持色相滑塊和RGB數值兩種調色方式
點擊顏色值或復制按鈕即可復制十六進制顏色代碼
自動根據背景色調整文字顏色確保可讀性
包含復制成功提示動畫效果
現代化UI設計,采用圓角、陰影和漸變背景
完全原生JavaScript實現,無外部依賴
支持鍵盤輸入RGB數值實時更新顏色


<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>顏色選擇器</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"><style>:root {--primary: #6366f1;--secondary: #8b5cf6;--dark: #1e293b;--light: #f8fafc;}* {box-sizing: border-box;margin: 0;padding: 0;}body {font-family: 'Inter', system-ui, sans-serif;background: linear-gradient(135deg, #f5f7fa, #e4e8f0);min-height: 100vh;display: flex;justify-content: center;align-items: center;padding: 20px;}.color-picker-container {background: white;border-radius: 15px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);width: 100%;max-width: 400px;padding: 25px;text-align: center;}.color-picker-title {color: var(--dark);margin-bottom: 20px;font-size: 24px;font-weight: 600;}.color-display {width: 100%;height: 150px;border-radius: 10px;margin-bottom: 20px;transition: background-color 0.3s ease;display: flex;align-items: center;justify-content: center;position: relative;overflow: hidden;}.color-value {background: rgba(0, 0, 0, 0.7);color: white;padding: 8px 15px;border-radius: 20px;font-family: monospace;font-size: 16px;cursor: pointer;transition: all 0.3s ease;}.color-value:hover {transform: scale(1.05);}.color-controls {display: flex;flex-direction: column;gap: 15px;}.color-slider {width: 100%;height: 10px;-webkit-appearance: none;appearance: none;background: linear-gradient(to right, red, yellow, lime, cyan, blue, magenta, red);border-radius: 5px;outline: none;margin: 10px 0;}.color-slider::-webkit-slider-thumb {-webkit-appearance: none;appearance: none;width: 20px;height: 20px;border-radius: 50%;background: white;border: 2px solid var(--dark);cursor: pointer;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);}.rgb-controls {display: flex;gap: 10px;margin-top: 10px;}.rgb-input {flex: 1;padding: 8px;border: 1px solid #ddd;border-radius: 5px;text-align: center;font-family: monospace;}.copy-btn {background: var(--primary);color: white;border: none;padding: 12px 20px;border-radius: 8px;font-size: 16px;font-weight: 500;cursor: pointer;transition: all 0.3s ease;margin-top: 15px;display: flex;align-items: center;justify-content: center;gap: 8px;}.copy-btn:hover {background: var(--secondary);transform: translateY(-2px);}.toast {position: fixed;bottom: 20px;left: 50%;transform: translateX(-50%);background: rgba(0, 0, 0, 0.8);color: white;padding: 12px 24px;border-radius: 8px;font-size: 14px;opacity: 0;transition: opacity 0.3s ease;z-index: 1000;}.toast.show {opacity: 1;}@media (max-width: 480px) {.color-picker-container {padding: 20px;}.rgb-controls {flex-direction: column;}}</style>
</head>
<body><div class="color-picker-container"><h1 class="color-picker-title">顏色選擇器</h1><div class="color-display" id="colorDisplay"><span class="color-value" id="colorValue">#FFFFFF</span></div><div class="color-controls"><input type="range" class="color-slider" id="hueSlider" min="0" max="360" value="0"><div class="rgb-controls"><input type="number" class="rgb-input" id="redInput" min="0" max="255" value="255" placeholder="R"><input type="number" class="rgb-input" id="greenInput" min="0" max="255" value="255" placeholder="G"><input type="number" class="rgb-input" id="blueInput" min="0" max="255" value="255" placeholder="B"></div><button class="copy-btn" id="copyBtn"><i class="fas fa-copy"></i> 復制顏色代碼</button></div></div><div class="toast" id="toast">已復制到剪貼板</div><script>document.addEventListener('DOMContentLoaded', function() {const colorDisplay = document.getElementById('colorDisplay');const colorValue = document.getElementById('colorValue');const hueSlider = document.getElementById('hueSlider');const redInput = document.getElementById('redInput');const greenInput = document.getElementById('greenInput');const blueInput = document.getElementById('blueInput');const copyBtn = document.getElementById('copyBtn');const toast = document.getElementById('toast');let currentColor = {h: 0,s: 100,l: 50,r: 255,g: 255,b: 255};// 初始化顏色updateColor();// 色相滑塊事件hueSlider.addEventListener('input', function() {currentColor.h = parseInt(this.value);hslToRgb();updateColor();});// RGB輸入事件[redInput, greenInput, blueInput].forEach(input => {input.addEventListener('input', function() {const value = Math.min(255, Math.max(0, parseInt(this.value) || 0));this.value = value;if (this.id === 'redInput') currentColor.r = value;if (this.id === 'greenInput') currentColor.g = value;if (this.id === 'blueInput') currentColor.b = value;rgbToHsl();updateColor();});});// 復制按鈕事件copyBtn.addEventListener('click', function() {const hexColor = rgbToHex(currentColor.r, currentColor.g, currentColor.b);navigator.clipboard.writeText(hexColor).then(() => {showToast();});});// 點擊顏色值也可以復制colorValue.addEventListener('click', function() {const hexColor = rgbToHex(currentColor.r, currentColor.g, currentColor.b);navigator.clipboard.writeText(hexColor).then(() => {showToast();});});// 更新顏色顯示function updateColor() {const hexColor = rgbToHex(currentColor.r, currentColor.g, currentColor.b);colorDisplay.style.backgroundColor = hexColor;colorValue.textContent = hexColor;// 根據亮度調整文字顏色const brightness = (currentColor.r * 299 + currentColor.g * 587 + currentColor.b * 114) / 1000;colorValue.style.color = brightness > 128 ? 'black' : 'white';colorValue.style.background = brightness > 128 ? 'rgba(255, 255, 255, 0.7)' : 'rgba(0, 0, 0, 0.7)';// 更新RGB輸入框redInput.value = currentColor.r;greenInput.value = currentColor.g;blueInput.value = currentColor.b;// 更新色相滑塊hueSlider.value = currentColor.h;}// HSL轉RGBfunction hslToRgb() {const h = currentColor.h / 360;const s = currentColor.s / 100;const l = currentColor.l / 100;let r, g, b;if (s === 0) {r = g = b = l;} else {const hue2rgb = (p, q, t) => {if (t < 0) t += 1;if (t > 1) t -= 1;if (t < 1/6) return p + (q - p) * 6 * t;if (t < 1/2) return q;if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;return p;};const q = l < 0.5 ? l * (1 + s) : l + s - l * s;const p = 2 * l - q;r = hue2rgb(p, q, h + 1/3);g = hue2rgb(p, q, h);b = hue2rgb(p, q, h - 1/3);}currentColor.r = Math.round(r * 255);currentColor.g = Math.round(g * 255);currentColor.b = Math.round(b * 255);}// RGB轉HSLfunction rgbToHsl() {const r = currentColor.r / 255;const g = currentColor.g / 255;const b = currentColor.b / 255;const max = Math.max(r, g, b);const min = Math.min(r, g, b);let h, s, l = (max + min) / 2;if (max === min) {h = s = 0;} else {const d = max - min;s = l > 0.5 ? d / (2 - max - min) : d / (max + min);switch (max) {case r: h = (g - b) / d + (g < b ? 6 : 0); break;case g: h = (b - r) / d + 2; break;case b: h = (r - g) / d + 4; break;}h /= 6;}currentColor.h = Math.round(h * 360);currentColor.s = Math.round(s * 100);currentColor.l = Math.round(l * 100);}// RGB轉十六進制function rgbToHex(r, g, b) {return '#' + [r, g, b].map(x => {const hex = x.toString(16);return hex.length === 1 ? '0' + hex : hex;}).join('');}// 顯示提示function showToast() {toast.classList.add('show');setTimeout(() => {toast.classList.remove('show');}, 2000);}});</script>
</body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ChatGPT登錄不進怎么辦?

ChatGPT登錄不進的核心原因分類ChatGPT登錄失敗并非單一問題導致&#xff0c;通常與網絡環境、賬號狀態、設備設置及平臺限制相關&#xff0c;不同場景下的故障表現與誘因存在明顯差異&#xff0c;可分為以下四類&#xff1a;網絡連接與地域限制&#xff1a;ChatGPT對訪問地域有…

【ConcurrentHashMap】實現原理和HashMap、Redis哈希的區別

【ConcurrentHashMap】實現原理和HashMap、Redis哈希的區別【一】核心思想【1】HashMap?&#xff08;1&#xff09;概括&#xff08;2&#xff09;&#x1f680;線程不安全的場景和原因1-場景一&#xff1a;Put 操作導致的數據覆蓋/丟失 (Lost Update)??2-場景二&#xff1a…

Android 中使用開源庫 ZXing 生成二維碼圖片

在 Android 中生成二維碼是一個比較常見的功能&#xff0c;可以使用開源庫 ZXing&#xff08;Zebra Crossing&#xff09;庫來實現&#xff0c;這是一個非常流行的二維碼生成和掃描庫。 1、添加依賴庫 在 app/build.gradle.kt 中添加依賴庫。 dependencies { ......implementat…

vue 如何使用 vxe-table 來實現跨表拖拽,多表聯動互相拖拽數據

vue 如何使用 vxe-table 來實現跨表拖拽&#xff0c;多表聯動互相拖拽數據 row-drag-config.isCrossTableDrag 啟用跨表格、多表格互相拖拽&#xff1b;跨表拖拽需要確保數據主鍵不重復&#xff0c;通過 row-config.keyField 指定主鍵字段名 查看官網&#xff1a;https://vxe…

微生產力革命:AI解決生活小任務分享會

微生產力革命的概念微生產力革命指利用AI技術高效解決日常瑣碎任務&#xff0c;釋放時間與精力。其核心在于將重復性、低價值的事務自動化&#xff0c;聚焦創造性或高價值活動。AI解決生活小任務的典型場景健康管理 AI健身助手可定制個性化訓練計劃&#xff0c;通過攝像頭實時糾…

標量、向量、矩陣和張量的區別

注&#xff1a;本文為 “標量、向量、矩陣和張量的區別” 相關合輯。 英文引文&#xff0c;機翻未校。 如有內容異常&#xff0c;請看原文。 Difference Between Scalar, Vector, Matrix and Tensor 標量、向量、矩陣和張量的區別 Last Updated : 06 Aug, 2025 In the conte…

VScode,設置自動保存

在搜索框輸入“autoSave”或VSCode提供以下自動保存選項&#xff1a; 在搜索框輸入“autoSave” Off&#xff1a;禁用自動保存。 On Focus Change&#xff1a;當您將焦點從編輯器移開時自動保存。 On Window Change&#xff1a;當您切換窗口選項卡或編輯器時自動保存。 After D…

2025.8.27鏈表_鏈表逆置

鏈表中的指針只是用來標記&#xff0c;具體連接方式&#xff0c;是按照node.next鏈接。JAVA中頭節點存東西&#xff0c;不是空的。核心原理&#xff1a;Java 的參數傳遞是"值傳遞"&#xff0c;但對象引用是"值傳遞引用"也就是傳過來了ListNode head。headh…

ssc37x平臺的音頻應用demo

//ao_test.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include

PPT處理控件Aspose.Slides教程:在.NET中開發SVG到EMF的轉換器

SVG和EMF都是基于矢量的格式。許多傳統的 CAD 和報告工具仍然傾向于使用 EMF 文件格式&#xff0c;因為它具有更廣泛的兼容性。如果您正在開發一個 .NET 項目&#xff0c;并希望實現自動化&#xff0c;使 SVG 到 EMF 的轉換變得輕松便捷。Aspose.Slides for .NET是一個功能強大…

深入理解HTTP:請求、響應與狀態碼解析

深入理解HTTP&#xff1a;請求、響應與狀態碼解析一&#xff1a;概述二&#xff1a;協議版本三&#xff1a;協議詳解1&#xff09;請求報文2&#xff09;響應報文四&#xff1a;狀態碼1&#xff09;1xx&#xff1a;信息狀態碼2&#xff09;2xx&#xff1a;成功狀態碼3&#xff…

瀏覽器輸入網址回車后,訪問網頁全流程解析!

你在地址欄敲下 https://baidu.com.com 并回車&#xff0c;幾百毫秒內發生了很多事&#xff1a;瀏覽器先想“這個域名的 IP 我記得嗎”&#xff0c;接著去找 DNS&#xff1b;建立連接時還要握個手&#xff08;TCP/QUIC&#xff09;順便打個招呼&#xff08;TLS 證書校驗、ALPN …

[Linux]學習筆記系列 -- mm/percpu

文章目錄mm/percpu.c Per-CPU Variables Management Per-CPU數據管理的核心實現歷史與背景這項技術是為了解決什么特定問題而誕生的&#xff1f;它的發展經歷了哪些重要的里程碑或版本迭代&#xff1f;目前該技術的社區活躍度和主流應用情況如何&#xff1f;核心原理與設計它的…

企微會話風控「智腦」:源雀SCRM的AI合規守護引擎

一&#xff1a;功能概述源雀SCRM會話風控功能是一款專為企業客戶關系管理設計的智能風控解決方案&#xff0c;通過雙重審計機制保障企業會話合規性&#xff0c;發送違規內容及時提醒通知企業負責人。二&#xff1a;核心功能1. 普通風控審計基于Lucene全文關鍵詞檢索&#xff1a…

Java崗位供過于求,如何破局?

程序員面試背八股&#xff0c;可以說是現在互聯網開發崗招聘不可逆的形式了&#xff0c;其中最卷的當屬Java&#xff01;&#xff08;網上動不動就是成千上百道的面試題總結&#xff09;你要是都能啃下來&#xff0c;平時技術不是太差的話&#xff0c;面試基本上問題就不會太大…

白話FNN、RNN、Attention和self-attention等

我嘗試同過炸醬面的例子,讓所有人都能理解Transformer的核心Self-Attention。你在做老北京炸醬面的醬,食譜包括一系列步驟:準備食材(干黃醬、甜面醬、豬肉、蔥姜等)、洗菜、切菜(蔥姜蒜等)、炒肉,調和干黃醬、甜面醬、涼水、醬油后,加入鍋中,慢燉成醬。我們將從FNN開…

路由基礎(一):IP地址規劃

###IPv4地址 IPv4地址分成網絡部分和主機部分 IPv4地址根據定義可分為&#xff1a; A類地址 a. 第一字節的第一位為0 b. 第一字節的數值范圍為1-126B類地址 a. 第一字節的第一和第二位為10的一組地址 b. 第一字節的數值范圍為128-191C類地址 a. 第一字節的第一、第二和第三位為…

Content-Type是application/x-www-form-urlencoded表示從前端到后端提交的是表單的形式

Content-Type: application/x-www-form-urlencoded 就是表示前端向后端提交的是表單&#xff08;form&#xff09;數據的形式。? 精確解釋&#xff1a;這個 Content-Type 是 HTML 表單&#xff08;form&#xff09;默認的提交編碼方式&#xff0c;它的名字就可以拆解理解&…

一、添加Viewport3DX,并設置相機、燈光

后續主要介紹使用高性能Wpf.SharpDX版本的使用。 其核心組件包括: Viewport3DX 控件:作為渲染視口,管理相機、場景元素、輸入事件和渲染主機。 CameraController:封裝相機交互邏輯,實現旋轉、縮放、平移等操作。 RenderHost:SharpDX 的抽象,負責 GPU 渲染,支持多種渲染…

AI生成音樂模型發展現狀與前景

第一章 引言與市場概述人工智能音樂生成技術正在經歷一個前所未有的爆發期&#xff0c;從實驗室的技術演示迅速發展為商業化的成熟產品。根據Digital Ocean 2025年的最新報告&#xff0c;全球AI音樂市場預計將從2023年的39億美元增長到2033年的387億美元&#xff0c;年復合增長…